import { EditorProperties, getDefaultValue, Infer } from "@iplusplus/y-model" import React from "react" import { GetUserDataFunction, userInteractionInternals } from "./userInteraction" import { PropertyGridDialog } from "../propertygrid" import { checkCanEdit } from "../convention" type UserDataInfo = { title?: string props: T resolve: (data: Infer | undefined) => void initialData?: Infer } export const UserDataDialog = React.memo(function () { const [userDataInfo, setUserDataInfo] = React.useState>() React.useEffect(() => { const getUserData: GetUserDataFunction = (title, props, initialData) => { return new Promise(resolve => { setUserDataInfo({ title, props, resolve, initialData }) }) } userInteractionInternals.getUserDataFromDialog = getUserData return () => (userInteractionInternals.getUserDataFromDialog = undefined) }, [setUserDataInfo]) if (!userDataInfo) return null const disableEditFields = userDataInfo.props.filter(p => !checkCanEdit(p)).map(p => p.name) return ( { userDataInfo.resolve(data) setUserDataInfo(undefined) }} disableEditFields={disableEditFields} props={userDataInfo.props} title={userDataInfo.title} /> ) })