GF-12-breadcrumbs #11

Manually merged
liviu merged 8 commits from GF-12-breadcrumbs into production 2026-01-12 14:31:25 +01:00
6 changed files with 55 additions and 6 deletions
Showing only changes of commit a7f75868cf - Show all commits

View file

@ -7,17 +7,26 @@ import {
BreadcrumbPage,
BreadcrumbSeparator,
} from "~/components/ui/breadcrumb";
import { useBreadcrumbStore } from "~/stores/breadcrumbs";
const breadcrumbStore = useBreadcrumbStore();
</script>
<template>
<Breadcrumb>
<BreadcrumbList>
<template v-for="i in breadcrumbStore.items.length - 1" :key="i">
<BreadcrumbItem class="hidden md:block">
<BreadcrumbLink href="#"> Building Your Application </BreadcrumbLink>
<BreadcrumbLink :href="breadcrumbStore.items[i - 1]?.to || ''">
{{ breadcrumbStore.items[i - 1]?.label || "Home" }}
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator class="hidden md:block" />
</template>
<BreadcrumbItem>
<BreadcrumbPage>Data Fetching</BreadcrumbPage>
<BreadcrumbPage>
{{ breadcrumbStore.items[breadcrumbStore.items.length - 1]?.label || "Home" }}
</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>

View file

@ -1,5 +1,9 @@
<script setup lang="ts">
import { useBreadcrumbStore } from "~/stores/breadcrumbs";
import SignupForm from "@/components/SignupForm.vue";
const breadcrumbStore = useBreadcrumbStore();
breadcrumbStore.setBreadcrumbs([{ label: "Auth" }, { label: "Create Account", to: "/auth/create-account" }]);
</script>
<template>

View file

@ -1,5 +1,9 @@
<script setup lang="ts">
import LoginForm from "@/components/LoginForm.vue";
import { useBreadcrumbStore } from "~/stores/breadcrumbs";
import LoginForm from "~/components/LoginForm.vue";
const breadcrumbStore = useBreadcrumbStore();
breadcrumbStore.setBreadcrumbs([{ label: "Auth" }, { label: "Login", to: "/auth/login" }]);
</script>
<template>

View file

@ -4,9 +4,13 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/com
import { Field, FieldDescription } from "@/components/ui/field";
import { useAuthStore } from "~/stores/auth";
import { useBreadcrumbStore } from "~/stores/breadcrumbs";
const authStore = useAuthStore();
await authStore.init();
const breadcrumbStore = useBreadcrumbStore();
breadcrumbStore.setBreadcrumbs([{ label: "Auth" }, { label: "Logout", to: "/auth/logout" }]);
</script>
<template>

View file

@ -1,5 +1,6 @@
<script setup lang="ts">
import { ref } from "vue";
import { useBreadcrumbStore } from "~/stores/breadcrumbs";
import { Button } from "@/components/ui/button";
const lastClicked = ref<string>("None");
@ -7,6 +8,9 @@ const lastClicked = ref<string>("None");
const buttonClicked = (variant: string) => {
lastClicked.value = variant;
};
const breadcrumbStore = useBreadcrumbStore();
breadcrumbStore.setBreadcrumbs([{ label: "Homepage", to: "/" }]);
</script>
<template>

24
app/stores/breadcrumbs.ts Normal file
View file

@ -0,0 +1,24 @@
import { defineStore } from "pinia";
export interface BreadcrumbItem {
label: string;
to?: string;
}
export const useBreadcrumbStore = defineStore("breadcrumb", {
state: () => ({
items: [] as BreadcrumbItem[],
}),
actions: {
setBreadcrumbs(items: BreadcrumbItem[]) {
this.items = items;
},
addBreadcrumb(item: BreadcrumbItem) {
this.items.push(item);
},
clear() {
this.items = [];
},
},
});