This commit is contained in:
Rizky 2024-06-17 05:44:43 +07:00
parent a36873a808
commit 21b0220f5b
1 changed files with 16 additions and 10 deletions

View File

@ -35,13 +35,14 @@ export const EdPropInstanceOptions: FC<{
loading: true, loading: true,
isOpen: false, isOpen: false,
val: "", val: "",
metaFnInit: false,
metaFn: null as null | (() => Promise<MetaOption[]>), metaFn: null as null | (() => Promise<MetaOption[]>),
checkbox: { checkbox: {
width: 0, width: 0,
}, },
options: [] as MetaOption[], options: [] as MetaOption[],
optDeps: [] as any[], optDeps: [] as any[],
resetOnDeps: false, resetOnDeps: false as boolean | (() => any[]),
}); });
const p = useGlobal(EDGlobal, "EDITOR"); const p = useGlobal(EDGlobal, "EDITOR");
@ -112,7 +113,7 @@ export const EdPropInstanceOptions: FC<{
"" ""
).trim(); ).trim();
const final = ` const final_src = `
try { try {
const resOpt = ${src.endsWith(";") ? src : `${src};`} const resOpt = ${src.endsWith(";") ? src : `${src};`}
@ -121,13 +122,13 @@ export const EdPropInstanceOptions: FC<{
if (typeof resOpt === 'object' && Array.isArray(resOpt.deps) && typeof resOpt.fn === 'function') { if (typeof resOpt === 'object' && Array.isArray(resOpt.deps) && typeof resOpt.fn === 'function') {
local.metaFn = resOpt.fn; local.metaFn = resOpt.fn;
local.optDeps = resOpt.deps; local.optDeps = resOpt.deps;
local.optResetOnDeps = resOpt.reset; local.resetOnDeps = resOpt.reset;
} else { } else {
local.options = resOpt; local.options = resOpt;
} }
} }
} catch(e) { console.error(e); }`; } catch(e) { console.error(e); }`;
fn = new Function(...Object.keys(arg), "local", final); fn = new Function(...Object.keys(arg), "local", final_src);
fn(...Object.values(arg), local); fn(...Object.values(arg), local);
} catch (e) { } catch (e) {
console.error(e); console.error(e);
@ -136,6 +137,7 @@ export const EdPropInstanceOptions: FC<{
} }
} }
useEffect(() => { useEffect(() => {
if (local.metaFn) { if (local.metaFn) {
local.loading = true; local.loading = true;
@ -146,18 +148,22 @@ export const EdPropInstanceOptions: FC<{
local.options = e; local.options = e;
if (local.resetOnDeps) { if (local.resetOnDeps) {
const val = meta.item.component?.props?.[name]?.value; if (!local.metaFnInit) {
const valBuilt = meta.item.component?.props?.[name]?.valueBuilt; local.metaFnInit = true;
if (val && valBuilt) { } else {
let reset = '[]';
if (typeof local.resetOnDeps === 'function') {
reset = JSON.stringify(local.resetOnDeps());
}
mprop.doc?.transact(() => { mprop.doc?.transact(() => {
mprop.set("value", val); mprop.set("value", reset);
mprop.set("valueBuilt", valBuilt); mprop.set("valueBuilt", reset);
}); });
treeRebuild(p); treeRebuild(p);
p.render(); p.render();
} }
} }
local.render(); local.render();
}; };