mirror of
https://github.com/keven1024/015.git
synced 2026-05-26 07:08:02 +00:00
refactor(front): enhance drawer management by introducing DrawerItem type for improved type safety and structure
This commit is contained in:
@@ -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])
|
||||||
|
|
||||||
|
|||||||
@@ -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', () => {
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user