import {markRaw} from 'vue'; import {FormHook, useFormBuilder} from '@myparcel/vue-form-builder'; import {StopActionHandler} from '../stopActionHandler'; import {type ActionContext} from '../executors'; import {type ActionParameters, type PrintAction} from '../../types'; import {useModalStore} from '../../stores'; import {AdminModalKey} from '../../data'; export const waitForLabelPrompt = ({ parameters, }: ActionContext): Promise> => { const formBuilder = useFormBuilder(); const modalStore = useModalStore(); return new Promise((resolve, reject) => { formBuilder.on('afterRegister', (form) => { modalStore.context ??= {}; // @ts-expect-error infinitely deep instantiation modalStore.context.form = markRaw(form); if (form.name !== AdminModalKey.PrintOptions) { return; } form.on(FormHook.AfterSubmit, (instance) => { resolve({ ...parameters, ...instance.getValues(), } as ActionParameters); }); }); modalStore.onClose(() => { reject(new StopActionHandler()); }); modalStore.open(AdminModalKey.PrintOptions); }); };