diff options
Diffstat (limited to 'packages/client/src/widgets/widget.ts')
| -rw-r--r-- | packages/client/src/widgets/widget.ts | 73 |
1 files changed, 0 insertions, 73 deletions
diff --git a/packages/client/src/widgets/widget.ts b/packages/client/src/widgets/widget.ts deleted file mode 100644 index 8bd56a5966..0000000000 --- a/packages/client/src/widgets/widget.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { reactive, watch } from 'vue'; -import { throttle } from 'throttle-debounce'; -import { Form, GetFormResultType } from '@/scripts/form'; -import * as os from '@/os'; -import { deepClone } from '@/scripts/clone'; - -export type Widget<P extends Record<string, unknown>> = { - id: string; - data: Partial<P>; -}; - -export type WidgetComponentProps<P extends Record<string, unknown>> = { - widget?: Widget<P>; -}; - -export type WidgetComponentEmits<P extends Record<string, unknown>> = { - (ev: 'updateProps', props: P); -}; - -export type WidgetComponentExpose = { - name: string; - id: string | null; - configure: () => void; -}; - -export const useWidgetPropsManager = <F extends Form & Record<string, { default: any; }>>( - name: string, - propsDef: F, - props: Readonly<WidgetComponentProps<GetFormResultType<F>>>, - emit: WidgetComponentEmits<GetFormResultType<F>>, -): { - widgetProps: GetFormResultType<F>; - save: () => void; - configure: () => void; -} => { - const widgetProps = reactive(props.widget ? deepClone(props.widget.data) : {}); - - const mergeProps = () => { - for (const prop of Object.keys(propsDef)) { - if (typeof widgetProps[prop] === 'undefined') { - widgetProps[prop] = propsDef[prop].default; - } - } - }; - watch(widgetProps, () => { - mergeProps(); - }, { deep: true, immediate: true }); - - const save = throttle(3000, () => { - emit('updateProps', widgetProps); - }); - - const configure = async () => { - const form = deepClone(propsDef); - for (const item of Object.keys(form)) { - form[item].default = widgetProps[item]; - } - const { canceled, result } = await os.form(name, form); - if (canceled) return; - - for (const key of Object.keys(result)) { - widgetProps[key] = result[key]; - } - - save(); - }; - - return { - widgetProps, - save, - configure, - }; -}; |