import type { Component } from "vue"; import ConfirmationModal from "../components/ConfirmationModal.vue"; export type ModalCallbackType = ( event: ModalEvents[T], close: () => void ) => Promise | void; export interface ModalStackElement { component: Component; type: T; callback: ModalCallbackType; loading: Ref; data: ModalDatas[T]; } export enum ModalType { Confirmation, } export type ModalEvents = { [ModalType.Confirmation]: "confirm" | "cancel"; }; export type ModalDatas = { [ModalType.Confirmation]: { title: string; description: string; }; }; const modalComponents: { [key in ModalType]: Component } = { [ModalType.Confirmation]: ConfirmationModal, }; export function createModal( type: T, data: ModalDatas[T], callback: ModalCallbackType ) { const modalStack = useModalStack(); modalStack.value.push({ type, component: modalComponents[type], data, callback, loading: ref(false), }); } export const useModalStack = () => useState>>("modal-stack", () => []);