From 21b0220f5b089836468b8d29d0476907f6f8eb56 Mon Sep 17 00:00:00 2001 From: Rizky Date: Mon, 17 Jun 2024 05:44:43 +0700 Subject: [PATCH] fix --- .../panel/side/prop-instance/prop-option.tsx | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/app/web/src/nova/ed/panel/side/prop-instance/prop-option.tsx b/app/web/src/nova/ed/panel/side/prop-instance/prop-option.tsx index 92c3cdf6..565ac2db 100644 --- a/app/web/src/nova/ed/panel/side/prop-instance/prop-option.tsx +++ b/app/web/src/nova/ed/panel/side/prop-instance/prop-option.tsx @@ -35,13 +35,14 @@ export const EdPropInstanceOptions: FC<{ loading: true, isOpen: false, val: "", + metaFnInit: false, metaFn: null as null | (() => Promise), checkbox: { width: 0, }, options: [] as MetaOption[], optDeps: [] as any[], - resetOnDeps: false, + resetOnDeps: false as boolean | (() => any[]), }); const p = useGlobal(EDGlobal, "EDITOR"); @@ -112,7 +113,7 @@ export const EdPropInstanceOptions: FC<{ "" ).trim(); - const final = ` + const final_src = ` try { 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') { local.metaFn = resOpt.fn; local.optDeps = resOpt.deps; - local.optResetOnDeps = resOpt.reset; + local.resetOnDeps = resOpt.reset; } else { local.options = resOpt; } } } 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); } catch (e) { console.error(e); @@ -136,6 +137,7 @@ export const EdPropInstanceOptions: FC<{ } } + useEffect(() => { if (local.metaFn) { local.loading = true; @@ -146,18 +148,22 @@ export const EdPropInstanceOptions: FC<{ local.options = e; if (local.resetOnDeps) { - const val = meta.item.component?.props?.[name]?.value; - const valBuilt = meta.item.component?.props?.[name]?.valueBuilt; - if (val && valBuilt) { + if (!local.metaFnInit) { + local.metaFnInit = true; + } else { + + let reset = '[]'; + if (typeof local.resetOnDeps === 'function') { + reset = JSON.stringify(local.resetOnDeps()); + } mprop.doc?.transact(() => { - mprop.set("value", val); - mprop.set("valueBuilt", valBuilt); + mprop.set("value", reset); + mprop.set("valueBuilt", reset); }); treeRebuild(p); p.render(); } - } local.render(); };