|
|
|
import type { TableType, ViewType } from 'nocodb-sdk'
|
|
|
|
import { createEventHook, ref, useInjectionState } from '#imports'
|
|
|
|
import type { Row } from '~/lib'
|
|
|
|
|
|
|
|
interface UseExpandedFormDetachedProps {
|
|
|
|
'isOpen'?: boolean
|
|
|
|
'row': Row | null
|
|
|
|
'state'?: Record<string, any> | null
|
|
|
|
'meta': TableType
|
|
|
|
'loadRow'?: boolean
|
|
|
|
'useMetaFields'?: boolean
|
|
|
|
'rowId'?: string
|
|
|
|
'view'?: ViewType
|
|
|
|
'onCancel'?: Function
|
|
|
|
'onUpdate:modelValue'?: Function
|
|
|
|
}
|
|
|
|
|
|
|
|
const [setup, use] = useInjectionState(() => {
|
|
|
|
return ref<UseExpandedFormDetachedProps[]>([])
|
|
|
|
})
|
|
|
|
|
|
|
|
export function useExpandedFormDetached() {
|
|
|
|
let states = use()!
|
|
|
|
|
|
|
|
if (!states) {
|
|
|
|
states = setup()
|
|
|
|
}
|
|
|
|
|
|
|
|
const closeHook = createEventHook<void>()
|
|
|
|
|
|
|
|
const index = ref(-1)
|
|
|
|
|
|
|
|
const open = (props: UseExpandedFormDetachedProps) => {
|
|
|
|
states.value.push(props)
|
|
|
|
index.value = states.value.length - 1
|
|
|
|
}
|
|
|
|
|
|
|
|
const close = (i?: number) => {
|
|
|
|
states.value.splice(i || index.value, 1)
|
|
|
|
if (index.value === i || !i) closeHook.trigger()
|
|
|
|
}
|
|
|
|
|
|
|
|
return { states, open, close, onClose: closeHook.on }
|
|
|
|
}
|