11<script setup lang="ts">
2- import { ref , onMounted , watch } from ' vue'
3- import { useRouter , useRoute } from ' vue-router'
2+ import { computed , ref } from ' vue'
3+ import { useRouter , useRoute , type RouteRecordRaw } from ' vue-router'
44
55import AlertRhombusFill from ' @pictogrammers/memory-svg/svg/alert-rhombus-fill.svg'
66
@@ -51,51 +51,45 @@ watch(currentRoute, (): void => {
5151})
5252
5353*/
54+
55+ const filter = (route : RouteRecordRaw ): boolean =>
56+ ! route .meta ?.hidden && ! route .meta ?.childOf && route .name !== currentRoute .name
57+
58+ const navList = ref (router .options .routes .filter (filter ))
59+
60+ const breadcrumbs = computed (() => {
61+ if (! currentRoute )
62+ return []
63+
64+ const res = [currentRoute .name ] as string []
65+
66+ let parentGetter = currentRoute .meta .childOf
67+
68+ while (typeof parentGetter === ' function' ) {
69+ const parent = parentGetter ()
70+
71+ res .unshift (parent .name )
72+
73+ parentGetter = parent .meta ?.childOf
74+ }
75+
76+ return res
77+ })
78+
79+ const overrideBreadcrumbs = ref (' ' )
80+
81+ router .afterEach (() => {
82+ navList .value = router .options .routes .filter (filter )
83+ overrideBreadcrumbs .value = ' '
84+ })
5485 </script >
5586
5687<template >
5788 <div class =" wrapper-header" >
5889 <div class =" header" >evie's pages</div >
59- <!-- <v-tooltip class="menu" :triggers="['click']">
60- <div class="label">
61- menu
62- </div>
63-
64- <template #popper>
65- <router-link v-for="route in router
66- .getRoutes()
67- .filter(
68- (route) => !route.meta.hidden && !route.meta.child && route.name !== currentRoute.name,
69- )" :key="route.path" :to="{ name: route.name }">
70- [{{ route.name }}]
71- </router-link>
72-
73- </template>
74- </v-tooltip> -->
75- <!-- <div @click='navOpen = !navOpen' :class="`nav-button ${navOpen ? 'open' : ''}`">
76- nav <{{ navOpen ? 'close' : 'open' }}>
77- </div>
78-
79- <div :class="`nav ${navOpen ? 'open' : ''}`">
80- <router-link v-for="route in router
81- .getRoutes()
82- .filter(
83- (route) => !route.meta.hidden && !route.meta.child && route.name !== currentRoute.name,
84- )" :key="route.path" :to="{ name: route.name }">
85- [{{ route.name }}]
86- </router-link>
87- </div> -->
8890
8991 <div class =" nav" >
90- <router-link
91- v-for =" route in router
92- .getRoutes()
93- .filter(
94- (route) => !route.meta.hidden && !route.meta.child && route.name !== currentRoute.name,
95- )"
96- :key =" route.path"
97- :to =" { name: route.name }"
98- >
92+ <router-link v-for =" route in navList" :key =" route.path" :to =" route" >
9993 [{{ route.name }}]
10094 </router-link >
10195 </div >
@@ -111,30 +105,19 @@ watch(currentRoute, (): void => {
111105 i will no longer be able to maintain any of my projects for an indefinite period.
112106 </content-section >
113107
114- <!--
115- <div class="breadcrumbs-wrapper" ref="breadcrumbsWrapper">
116- <div class="left-overlay" />
117- <div class="right-overlay" />
118-
119- <div class="breadcrumbs" ref="breadcrumbs" @scroll="breadcrumbsScrollHandler">
120- <span v-for="{ name } in currentRoute.matched" class="breadcrumb" :key="name">
121- {{ name }}
122- </span>
123- </div>
124- </div>
125- -->
126-
127108 <content-section class =" wrapper-main" ref =" mainWrapper" >
128109 <template #header >
129- <span v-for =" { name } in currentRoute.matched" class =" breadcrumb" :key =" name" >
110+ <span class =' breadcrumb' v-for =" name in (!overrideBreadcrumbs ? breadcrumbs : overrideBreadcrumbs.split(','))"
111+ :key =" name" >
130112 {{ name }}
131113 </span >
132114 </template >
133115
134116 <router-view v-slot =" { Component }" >
135117 <template v-if =" Component " >
136118 <suspense >
137- <component :is =" Component" />
119+ <component @overrideBreadcrumbs =" (breadcrumbs) => overrideBreadcrumbs = String(breadcrumbs)"
120+ :is =" Component" />
138121
139122 <template #fallback > loading... </template >
140123 </suspense >
@@ -148,7 +131,7 @@ watch(currentRoute, (): void => {
148131 </div >
149132 <div class =" footer" >
150133 made with <span style =" color : crimson " >{{ 'love <3 ' }}</span> by
151- <span style="color: beige">evie</span>
134+ <span style="color: beige">evie</span>
152135 </div>
153136 </div>
154137</template>
0 commit comments