refactor(front): enhance drawer management by introducing DrawerItem type for improved type safety and structure

This commit is contained in:
keven1024
2026-04-09 22:44:50 +08:00
parent 55eb50faab
commit 7ba7af6100
3 changed files with 17 additions and 10 deletions

View File

@@ -3,6 +3,14 @@ import { Drawer, DrawerContent } from '@/components/ui/drawer'
import { createVNode } from 'vue' import { createVNode } from 'vue'
import useStore from '@/composables/useStore' import useStore from '@/composables/useStore'
type DrawerOnclose<T = unknown> = (data?: T) => void
type DrawerRender<T = unknown> = VNode | ((props: { hide: DrawerOnclose<T> }) => VNode)
export type DrawerItem<T = unknown> = {
render?: DrawerRender<T>
onClose: DrawerOnclose<T>
key: string
}
const store = useStore() const store = useStore()
const currentDrawer = computed(() => store.drawer?.[store.drawer?.length - 1]) const currentDrawer = computed(() => store.drawer?.[store.drawer?.length - 1])

View File

@@ -1,10 +1,9 @@
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
import type { DrawerItem } from '@/components/GlobalDrawer.vue'
type renderComponent = Component | ((props: { hide: () => null }) => VNode)
type StoreProps = { type StoreProps = {
tiptapCommandsView?: any tiptapCommandsView?: any
drawer?: { render?: renderComponent; onClose: (data?: any) => void; key: string }[] drawer?: DrawerItem<any>[]
} }
const useStore = defineStore<any, StoreProps>('store', () => { const useStore = defineStore<any, StoreProps>('store', () => {

View File

@@ -1,13 +1,13 @@
interface DrawerProps { import type { DrawerItem } from '~/components/GlobalDrawer.vue'
render: (props: { hide: () => void }) => Component
}
const showDrawer = (props: DrawerProps) => { type DrawerProps<T = unknown> = Pick<DrawerItem<T>, 'render'>
function showDrawer<T = unknown>(props: DrawerProps<T>): Promise<T | undefined> {
const key = Math.random().toString(36).slice(2, 8) const key = Math.random().toString(36).slice(2, 8)
return new Promise<void>((res) => { return new Promise((res) => {
const { render } = props || {} const { render } = props || {}
const onClose = (data?: any) => { const onClose = (data?: T) => {
store.drawer = (store.drawer ?? [])?.filter((item: any) => item.key !== key) store.drawer = (store.drawer ?? [])?.filter((item) => item.key !== key)
res(data) res(data)
} }
const store = useStore() const store = useStore()