import { EditorProperties, Infer } from "@iplusplus/y-model" import { ConfirmInfo, MessageInfo, UserInputValueInfo } from "./types" export type GetUserDataFunction = ( title: string, props: T, initialData?: Infer, ) => Promise | undefined> const getUserDataFromDialog: GetUserDataFunction = ( title: string, props: T, initialData?: Infer, ) => { if (userInteractionInternals.getUserDataFromDialog) { return userInteractionInternals.getUserDataFromDialog(title, props, initialData) } return Promise.resolve(undefined) } export type GetUserInputValueFunction = (info: UserInputValueInfo) => Promise export type GetUserConfirmFunction = (info: ConfirmInfo) => Promise export const userInteractionInternals = { getUserDataFromDialog: undefined as undefined | GetUserDataFunction, showMessage: undefined as undefined | ((info: MessageInfo) => void), getUserInputValue: undefined as undefined | GetUserInputValueFunction, getUserConfirm: undefined as undefined | GetUserConfirmFunction, } const showMessage = (info: MessageInfo | string) => { if (!userInteractionInternals.showMessage) return userInteractionInternals.showMessage(typeof info === "string" ? { content: info } : info) } const getUserInputValue = (info: UserInputValueInfo | string) => { const info2 = typeof info === "string" ? { title: info } : info if (userInteractionInternals.getUserInputValue) { return userInteractionInternals.getUserInputValue(info2) } return Promise.resolve(undefined) } const getUserConfirm = (info: ConfirmInfo | string) => { const info2 = typeof info === "string" ? { content: info } : info if (userInteractionInternals.getUserConfirm) { return userInteractionInternals.getUserConfirm(info2) } return Promise.resolve(false) } const showErrorMessage = (msg: string) => showMessage({ content: msg, color: "error" }) export const userInteractions = { getUserDataFromDialog, showMessage, showErrorMessage, getUserInputValue, getUserConfirm, }