clean up breadcrumbs in prep for refactor
This commit is contained in:
parent
b1496a4f24
commit
9b7779f8eb
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user