Skip to content

Commit a69babf

Browse files
committed
feat(drawer): adds item drawer view
1 parent a58d9db commit a69babf

File tree

5 files changed

+82
-44
lines changed

5 files changed

+82
-44
lines changed

src/components/AppComponent.vue

+12-11
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@ import { RouterView, useRouter } from 'vue-router';
66
import { NavbarComponent } from '~/components/common';
77
import GridBackground from '~/components/common/background/GridBackground.vue';
88
import PageLoading from '~/components/common/loading/PageLoading.vue';
9-
import DrawerHeader from '~/components/views/drawer/DrawerHeader.vue';
109
import { useAuthSettingsStoreRefs } from '~/stores/settings/auth.store';
1110
1211
const { isAuthenticated } = useAuthSettingsStoreRefs();
13-
const { currentRoute, push } = useRouter();
12+
const { currentRoute, push, getRoutes } = useRouter();
1413
1514
const origin = ref();
1615
const drawer = ref(false);
@@ -20,6 +19,7 @@ watch(
2019
(_next, _prev) => {
2120
const isDrawer = !!_next.meta?.drawer;
2221
drawer.value = isDrawer;
22+
if (origin.value && isDrawer) return;
2323
origin.value = isDrawer ? _prev : undefined;
2424
},
2525
{
@@ -29,11 +29,15 @@ watch(
2929
3030
const asideRef = ref();
3131
32-
const onClose = () => {
32+
const onAfterLeave = () => {
3333
if (!origin.value) return;
3434
push(origin.value);
3535
origin.value = undefined;
3636
};
37+
38+
const onClose = () => {
39+
drawer.value = false;
40+
};
3741
</script>
3842

3943
<template>
@@ -66,16 +70,13 @@ const onClose = () => {
6670
:to="asideRef"
6771
width="100%"
6872
close-on-esc
69-
:on-after-leave="onClose"
73+
:on-after-leave="onAfterLeave"
7074
auto-focus
7175
>
72-
<NDrawerContent closable>
73-
<template #header> <DrawerHeader /> </template>
74-
<template #default>
75-
<KeepAlive>
76-
<component :is="DrawerComponent" />
77-
</KeepAlive>
78-
</template>
76+
<NDrawerContent>
77+
<KeepAlive>
78+
<component :is="DrawerComponent" @close="onClose" />
79+
</KeepAlive>
7980
</NDrawerContent>
8081
</NDrawer>
8182
</RouterView>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<script setup lang="ts">
2+
import { NButton } from 'naive-ui';
3+
import { onActivated } from 'vue';
4+
5+
const props = defineProps({
6+
movieId: {
7+
type: String,
8+
required: false,
9+
},
10+
personId: {
11+
type: String,
12+
required: false,
13+
},
14+
showId: {
15+
type: String,
16+
required: false,
17+
},
18+
seasonId: {
19+
type: String,
20+
required: false,
21+
},
22+
episodeId: {
23+
type: String,
24+
required: false,
25+
},
26+
});
27+
28+
const emit = defineEmits<{
29+
(event: 'close'): void;
30+
}>();
31+
32+
onActivated(() => {
33+
console.info('MovieDrawer activated', JSON.stringify(props, null, 2));
34+
});
35+
</script>
36+
37+
<template>
38+
<NButton quaternary @click="emit('close')"> Default </NButton>
39+
<div>Movie Drawer</div>
40+
<div>movie {{ movieId }}</div>
41+
<div>person {{ personId }}</div>
42+
<div>show {{ showId }}</div>
43+
<div>season {{ seasonId }}</div>
44+
<div>episode {{ episodeId }}</div>
45+
</template>

src/router/create-router.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export const createRouter = ({ baseName = '', baseUrl = import.meta.env.BASE_URL
6262
});
6363

6464
restoreLastRoute().then(async _route => {
65-
await router.push(_route?.name && _route?.name !== Route.Login ? _route : { name: Route.Progress });
65+
await router.push(_route?.name !== Route.Login ? _route : { name: Route.Progress });
6666
});
6767

6868
return router;

src/router/routes.ts

+23-31
Original file line numberDiff line numberDiff line change
@@ -10,46 +10,34 @@ export enum Route {
1010
Login = 'login',
1111
}
1212

13+
const listItemDrawerRoute = {
14+
component: () => import('../components/views/drawer/ListItemDrawer.vue'),
15+
props: true,
16+
meta: { drawer: true },
17+
};
18+
1319
const drawerRoutes: RouteRecordRaw[] = [
1420
{
21+
...listItemDrawerRoute,
1522
path: 'movie/:movieId',
16-
component: () => import('../components/views/drawer/MovieDrawer.vue'),
17-
props: true,
18-
meta: {
19-
drawer: true,
20-
},
2123
},
2224
{
25+
...listItemDrawerRoute,
2326
path: 'person/:personId',
24-
component: () => import('../components/views/drawer/MovieDrawer.vue'),
25-
props: true,
26-
meta: {
27-
drawer: true,
28-
},
2927
},
3028
{
29+
...listItemDrawerRoute,
3130
path: 'show/:showId',
32-
component: () => import('../components/views/drawer/MovieDrawer.vue'),
33-
props: true,
34-
meta: {
35-
drawer: true,
36-
},
37-
},
38-
{
39-
path: 'show/:showId/season/:seasonId',
40-
component: () => import('../components/views/drawer/MovieDrawer.vue'),
41-
props: true,
42-
meta: {
43-
drawer: true,
44-
},
45-
},
46-
{
47-
path: 'show/:showId/episode/:episodeId',
48-
component: () => import('../components/views/drawer/MovieDrawer.vue'),
49-
props: true,
50-
meta: {
51-
drawer: true,
52-
},
31+
children: [
32+
{
33+
...listItemDrawerRoute,
34+
path: 'season/:seasonId',
35+
},
36+
{
37+
...listItemDrawerRoute,
38+
path: 'episode/:episodeId',
39+
},
40+
],
5341
},
5442
];
5543

@@ -76,6 +64,7 @@ export const routes: RouteRecordRaw[] = [
7664
default: () => import('../components/views/calendar/CalendarComponent.vue'),
7765
navbar: () => import('../components/views/calendar/CalendarNavbar.vue'),
7866
},
67+
meta: { navbar: true },
7968
children: drawerRoutes,
8069
},
8170
{
@@ -85,6 +74,7 @@ export const routes: RouteRecordRaw[] = [
8574
default: () => import('../components/views/history/HistoryComponent.vue'),
8675
navbar: () => import('../components/views/history/HistoryNavbar.vue'),
8776
},
77+
meta: { navbar: true },
8878
children: drawerRoutes,
8979
},
9080
{
@@ -94,6 +84,7 @@ export const routes: RouteRecordRaw[] = [
9484
default: () => import('../components/views/watchlist/WatchlistComponent.vue'),
9585
navbar: () => import('../components/views/watchlist/WatchlistNavbar.vue'),
9686
},
87+
meta: { navbar: true },
9788
children: drawerRoutes,
9889
},
9990
{
@@ -103,6 +94,7 @@ export const routes: RouteRecordRaw[] = [
10394
default: () => import('../components/views/search/SearchComponent.vue'),
10495
navbar: () => import('../components/views/search/SearchNavbar.vue'),
10596
},
97+
meta: { navbar: true },
10698
children: drawerRoutes,
10799
},
108100
{

src/stores/router.store.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,4 @@ export const useRouterStore = defineStore('router', () => {
5050
return { baseName, setBaseName, baseUrl, setBaseUrl, initialLocation, routeParam, setRouteParam, lastRoute, setLastRoute, restoreLastRoute };
5151
});
5252

53-
export const useRouterStoreRefs = () => storeToRefs(useRouterStore());
53+
export const useRouterStoreRefs: () => ReturnType<typeof storeToRefs<ReturnType<typeof useRouterStore>>> = () => storeToRefs(useRouterStore());

0 commit comments

Comments
 (0)