feat: query param based navigation

This commit is contained in:
2025-12-13 21:56:52 +01:00
parent 417801d4f2
commit 6df6c5a7c9
7 changed files with 18 additions and 56 deletions

View File

@@ -36,6 +36,7 @@ const { selectedButton: selected, selectorPosition } = useButtonNavigation({
if (isSubmenu(buttonName)) {
router.push({
query: {
screen: "settings",
menu: buttonName,
},
});
@@ -153,11 +154,12 @@ watch(
if (isSubmenu(newSelected)) {
router.push({
query: {
screen: "settings",
menu: newSelected.split(/[A-Z]/)[0],
},
});
} else {
router.push({ query: { menu: undefined } });
router.push({ query: { screen: "settings", menu: undefined } });
}
}
},

View File

@@ -1,17 +0,0 @@
<script setup lang="ts">
definePageMeta({
layout: false,
});
</script>
<template>
<NuxtLayout name="default">
<template #top>
<SettingsTopScreen />
</template>
<template #bottom>
<SettingsBottomScreen />
</template>
</NuxtLayout>
</template>

View File

@@ -1,17 +0,0 @@
<script setup lang="ts">
definePageMeta({
layout: false,
});
</script>
<template>
<NuxtLayout name="default">
<template #top>
<ContactTopScreen />
</template>
<template #bottom>
<ContactBottomScreen />
</template>
</NuxtLayout>
</template>

View File

@@ -2,16 +2,25 @@
definePageMeta({
layout: false,
});
const route = useRoute();
const screen = computed(() => route.query.screen as string | undefined);
</script>
<template>
<NuxtLayout name="default">
<template #top>
<HomeTopScreen />
<HomeTopScreen v-if="!screen" />
<ContactTopScreen v-else-if="screen === 'contact'" />
<ProjectsTopScreen v-else-if="screen === 'projects'" />
<SettingsTopScreen v-else-if="screen === 'settings'" />
</template>
<template #bottom>
<HomeBottomScreen />
<HomeBottomScreen v-if="!screen" />
<ContactBottomScreen v-else-if="screen === 'contact'" />
<ProjectsBottomScreen v-else-if="screen === 'projects'" />
<SettingsBottomScreen v-else-if="screen === 'settings'" />
</template>
</NuxtLayout>
</template>

View File

@@ -1,17 +0,0 @@
<script setup lang="ts">
definePageMeta({
layout: false,
});
</script>
<template>
<NuxtLayout name="default">
<template #top>
<ProjectsTopScreen />
</template>
<template #bottom>
<ProjectsBottomScreen />
</template>
</NuxtLayout>
</template>

View File

@@ -96,7 +96,8 @@ export const useContactStore = defineStore("contact", {
onComplete: () => {
setTimeout(() => {
this.isOutro = false;
navigateTo("/");
const router = useRouter();
router.push({ query: {} });
}, 2000);
},
});

View File

@@ -61,7 +61,8 @@ export const useHomeStore = defineStore("home", {
const timeline = gsap.timeline({
onComplete: () => {
this.isOutro = true;
navigateTo(`/${to}`);
const router = useRouter();
router.push({ query: { screen: to } });
},
});