mirror of https://github.com/nocodb/nocodb
braks
2 years ago
3 changed files with 53 additions and 66 deletions
@ -1,20 +1,20 @@ |
|||||||
<script lang="ts" setup> |
<script lang="ts" setup> |
||||||
import { useExpandedFormDetached } from '#imports' |
import { useExpandedFormDetached } from '#imports' |
||||||
|
|
||||||
const { isOpen, state, row, rowId, loadRow: shouldLoadRow, meta, useMetaFields, view, close } = useExpandedFormDetached() |
const { states } = useExpandedFormDetached() |
||||||
</script> |
</script> |
||||||
|
|
||||||
<template> |
<template> |
||||||
<LazySmartsheetExpandedForm |
<template v-for="(state, i) of states" :key="`expanded-form-${i}`"> |
||||||
v-if="!!row && !!meta" |
<LazySmartsheetExpandedForm |
||||||
v-model="isOpen" |
v-model="state.isOpen" |
||||||
:row="row" |
:row="state.row" |
||||||
:load-row="shouldLoadRow" |
:load-row="state.loadRow" |
||||||
:meta="meta" |
:meta="state.meta" |
||||||
:row-id="rowId" |
:row-id="state.rowId" |
||||||
:state="state" |
:state="state.state" |
||||||
:use-meta-fields="useMetaFields" |
:use-meta-fields="state.useMetaFields" |
||||||
:view="view" |
:view="state.view" |
||||||
@cancel="close" |
/> |
||||||
/> |
</template> |
||||||
</template> |
</template> |
||||||
|
@ -1,58 +1,41 @@ |
|||||||
import type { TableType, ViewType } from 'nocodb-sdk' |
import type { TableType, ViewType } from 'nocodb-sdk' |
||||||
import { reactive, toRefs, useInjectionState } from '#imports' |
import { ref, useInjectionState } from '#imports' |
||||||
import type { Row } from '~/lib' |
import type { Row } from '~/lib' |
||||||
|
|
||||||
interface UseExpandedFormDetachedProps { |
interface UseExpandedFormDetachedProps { |
||||||
isOpen?: boolean |
'isOpen'?: boolean |
||||||
row: Row | null |
'row': Row | null |
||||||
state?: Record<string, any> | null |
'state'?: Record<string, any> | null |
||||||
meta: TableType |
'meta': TableType |
||||||
loadRow?: boolean |
'loadRow'?: boolean |
||||||
useMetaFields?: boolean |
'useMetaFields'?: boolean |
||||||
rowId?: string |
'rowId'?: string |
||||||
view?: ViewType |
'view'?: ViewType |
||||||
|
'onCancel'?: Function |
||||||
|
'onUpdate:modelValue'?: Function |
||||||
} |
} |
||||||
|
|
||||||
const [setup, use] = useInjectionState(() => { |
const [setup, use] = useInjectionState(() => { |
||||||
const state = reactive<UseExpandedFormDetachedProps>({ |
return ref<UseExpandedFormDetachedProps[]>([]) |
||||||
isOpen: false, |
}) |
||||||
state: null, |
|
||||||
loadRow: false, |
|
||||||
useMetaFields: false, |
|
||||||
row: null, |
|
||||||
meta: null as any, |
|
||||||
}) |
|
||||||
|
|
||||||
const open = (props: UseExpandedFormDetachedProps) => { |
export function useExpandedFormDetached() { |
||||||
state.state = props.state |
let states = use()! |
||||||
state.loadRow = props.loadRow |
|
||||||
state.useMetaFields = props.useMetaFields |
|
||||||
state.rowId = props.rowId |
|
||||||
state.row = props.row |
|
||||||
state.loadRow = props.loadRow |
|
||||||
state.meta = props.meta |
|
||||||
state.isOpen = props.isOpen |
|
||||||
|
|
||||||
state.isOpen = true |
|
||||||
} |
|
||||||
|
|
||||||
const close = () => { |
if (!states) { |
||||||
state.isOpen = false |
states = setup() |
||||||
} |
} |
||||||
|
|
||||||
return { |
const index = ref(-1) |
||||||
...toRefs(state), |
|
||||||
open, |
|
||||||
close, |
|
||||||
} |
|
||||||
}) |
|
||||||
|
|
||||||
export function useExpandedFormDetached() { |
const open = (props: UseExpandedFormDetachedProps) => { |
||||||
const state = use() |
states.value.push(props) |
||||||
|
index.value = states.value.length - 1 |
||||||
|
} |
||||||
|
|
||||||
if (!state) { |
const close = () => { |
||||||
return setup() |
states.value.splice(index.value, 1) |
||||||
} |
} |
||||||
|
|
||||||
return state |
return { states, open, close } |
||||||
} |
} |
||||||
|
Loading…
Reference in new issue