@maxpike/vue
Version:
Vue VariantJS: Fully configurable Vue 3 components styled with TailwindCSS
52 lines (37 loc) • 1.48 kB
text/typescript
import { DialogResponse, DialogType } from '@variantjs/core';
import { createApp } from 'vue';
import { TDialogOptions } from '../types/components/t-dialog';
import { VariantJSConfiguration } from '../types/variantCore';
import TDialog from '../components/TDialog.vue';
const createDialogProgramatically = (configuration: VariantJSConfiguration, type: DialogType, titleOrDialogOptions: TDialogOptions | string, text?: string, icon?: string) : Promise<DialogResponse> => {
const { props } = TDialog;
if (typeof titleOrDialogOptions === 'string') {
props.title.default = titleOrDialogOptions;
} else {
Object.keys(titleOrDialogOptions).forEach((key) => {
props[key].default = titleOrDialogOptions[key];
});
}
if (typeof text === 'string') {
props.text.default = text;
}
if (typeof icon === 'string') {
props.icon.default = icon;
}
props.type.default = type;
const instance = createApp(TDialog);
instance.provide('configuration', configuration);
const dialogInstance = instance.mount(document.createElement('div'));
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const promise = (dialogInstance as any).show() as Promise<DialogResponse>;
return promise
.then((response) => {
instance.unmount();
return Promise.resolve(response);
})
.catch((error) => {
instance.unmount();
return Promise.reject(error);
});
};
export default createDialogProgramatically;