clean up breadcrumbs in prep for refactor

This commit is contained in:
Carter 2024-01-23 16:12:57 -08:00
parent b1496a4f24
commit 9b7779f8eb
No known key found for this signature in database
2 changed files with 54 additions and 17 deletions

View File

@ -1,6 +1,16 @@
<template> <template>
<div class="breadcrumbs"> <div class="breadcrumbs">
<div v-for="breadcrumb in breadcrumbs" :key="breadcrumb.name" class="breadcrumbs__item"> <div
v-if="props.afterLogo && breadcrumbContext.routeBreadcrumbs.value?.length > 0"
class="breadcrumbs__item"
>
<ChevronRightIcon class="chevron" />
</div>
<div
v-for="breadcrumb in breadcrumbContext.routeBreadcrumbs.value"
:key="breadcrumb.name"
class="breadcrumbs__item"
>
<router-link <router-link
v-if="breadcrumb.link" v-if="breadcrumb.link"
:to="{ :to="{
@ -20,26 +30,23 @@
<script setup> <script setup>
import { ChevronRightIcon } from 'omorphia' import { ChevronRightIcon } from 'omorphia'
import { useBreadcrumbs } from '@/store/breadcrumbs' import { useBreadcrumbs, useBreadcrumbContext } from '@/store/breadcrumbs'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
import { computed } from 'vue'
const route = useRoute() const props = defineProps({
afterLogo: {
type: Boolean,
default: false,
},
})
const breadcrumbData = useBreadcrumbs() const breadcrumbData = useBreadcrumbs()
breadcrumbData.$subscribe(() => { const route = useRoute()
breadcrumbData?.resetToNames(breadcrumbs.value) const breadcrumbContext = useBreadcrumbContext(route)
})
const breadcrumbs = computed(() => { breadcrumbData.$subscribe(() => {
const additionalContext = breadcrumbData?.resetToNames(breadcrumbContext.routeBreadcrumbs.value)
route.meta.useContext === true
? breadcrumbData.context
: route.meta.useRootContext === true
? breadcrumbData.rootContext
: null
return additionalContext ? [additionalContext, ...route.meta.breadcrumb] : route.meta.breadcrumb
}) })
const breadcrumbName = (bcn) => { const breadcrumbName = (bcn) => {
@ -61,9 +68,12 @@ const breadcrumbName = (bcn) => {
vertical-align: center; vertical-align: center;
margin: auto 0; margin: auto 0;
.chevron, .chevron {
margin: auto 0.5rem;
}
a { a {
margin: auto 0.25rem; margin: auto 0;
} }
} }

View File

@ -1,3 +1,5 @@
import { computed } from 'vue'
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
export const useBreadcrumbs = defineStore('breadcrumbsStore', { export const useBreadcrumbs = defineStore('breadcrumbsStore', {
@ -34,3 +36,28 @@ export const useBreadcrumbs = defineStore('breadcrumbsStore', {
}, },
}, },
}) })
export const useBreadcrumbContext = (route) => {
const breadcrumbs = useBreadcrumbs()
const routeContext = computed(() => {
const { meta } = route
if (meta?.useContext) {
return breadcrumbs.context
} else if (meta?.useRootContext) {
return breadcrumbs.rootContext
} else {
return null
}
})
const routeBreadcrumbs = computed(() => {
const { meta } = route
return routeContext.value ? [routeContext.value, ...meta.breadcrumb] : meta.breadcrumb
})
return {
routeContext,
routeBreadcrumbs,
}
}