import { Err, Ok, type Result } from "~~/types/result"; export enum DialogType { Settings = 'settings', Textbox = 'textbox', Confirm = 'confirm', } interface DialogOptions { title?: string; initialValue?: string; [key: string]: any; } let actionCallback: ((value: any) => void) | undefined; export const useDialog = () => { const page = useState('dialog:page', () => null); const open = useState('dialog:open', () => false); const data = useState('dialog:data', () => ({})); const openDialog = (type: DialogType, cb?: (value: Result) => void, options: DialogOptions = {}) => { page.value = type; data.value = options; open.value = true; actionCallback = cb; }; const setOptions = (options: DialogOptions) => { data.value = options; }; const confirm = (result: any) => { open.value = false; if (actionCallback === undefined) return; actionCallback?.(Ok(result)); actionCallback = undefined; }; const close = () => { open.value = false; if (actionCallback === undefined) return; actionCallback?.(Err('closed')); actionCallback = undefined; }; return { open: readonly(open), page: readonly(page), data: readonly(data), openDialog, setOptions, confirm, close, }; };