From 7ba7af61002d9218c7cfc46d92632c4f6103ca54 Mon Sep 17 00:00:00 2001 From: keven1024 Date: Thu, 9 Apr 2026 22:44:50 +0800 Subject: [PATCH] refactor(front): enhance drawer management by introducing DrawerItem type for improved type safety and structure --- front/components/GlobalDrawer.vue | 8 ++++++++ front/composables/useStore.ts | 5 ++--- front/lib/showDrawer.ts | 14 +++++++------- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/front/components/GlobalDrawer.vue b/front/components/GlobalDrawer.vue index a99c289..9a19b2b 100644 --- a/front/components/GlobalDrawer.vue +++ b/front/components/GlobalDrawer.vue @@ -3,6 +3,14 @@ import { Drawer, DrawerContent } from '@/components/ui/drawer' import { createVNode } from 'vue' import useStore from '@/composables/useStore' +type DrawerOnclose = (data?: T) => void +type DrawerRender = VNode | ((props: { hide: DrawerOnclose }) => VNode) +export type DrawerItem = { + render?: DrawerRender + onClose: DrawerOnclose + key: string +} + const store = useStore() const currentDrawer = computed(() => store.drawer?.[store.drawer?.length - 1]) diff --git a/front/composables/useStore.ts b/front/composables/useStore.ts index 69926a1..cb31036 100644 --- a/front/composables/useStore.ts +++ b/front/composables/useStore.ts @@ -1,10 +1,9 @@ import { defineStore } from 'pinia' - -type renderComponent = Component | ((props: { hide: () => null }) => VNode) +import type { DrawerItem } from '@/components/GlobalDrawer.vue' type StoreProps = { tiptapCommandsView?: any - drawer?: { render?: renderComponent; onClose: (data?: any) => void; key: string }[] + drawer?: DrawerItem[] } const useStore = defineStore('store', () => { diff --git a/front/lib/showDrawer.ts b/front/lib/showDrawer.ts index be1acfb..9293456 100644 --- a/front/lib/showDrawer.ts +++ b/front/lib/showDrawer.ts @@ -1,13 +1,13 @@ -interface DrawerProps { - render: (props: { hide: () => void }) => Component -} +import type { DrawerItem } from '~/components/GlobalDrawer.vue' -const showDrawer = (props: DrawerProps) => { +type DrawerProps = Pick, 'render'> + +function showDrawer(props: DrawerProps): Promise { const key = Math.random().toString(36).slice(2, 8) - return new Promise((res) => { + return new Promise((res) => { const { render } = props || {} - const onClose = (data?: any) => { - store.drawer = (store.drawer ?? [])?.filter((item: any) => item.key !== key) + const onClose = (data?: T) => { + store.drawer = (store.drawer ?? [])?.filter((item) => item.key !== key) res(data) } const store = useStore()