From 0e7c9e5adc9736437f387dd3142f7db387dac865 Mon Sep 17 00:00:00 2001 From: Rizky Date: Tue, 5 Mar 2024 12:00:56 +0700 Subject: [PATCH] wip fix --- app/srv/ws/sync/actions/code_edit.ts | 4 ++ .../src/nova/ed/panel/side/prop-instance.tsx | 2 + .../ed/panel/side/prop-instance/prop-code.tsx | 5 ++- .../panel/side/prop-instance/prop-option.tsx | 2 +- .../ed/panel/side/prop-instance/prop-text.tsx | 5 ++- .../src/nova/ed/panel/side/prop-master.tsx | 7 ++-- .../ed/panel/side/prop-master/prop-form.tsx | 40 ++++++++++++++++++- .../ed/panel/side/prop-master/tree-item.tsx | 5 ++- app/web/src/utils/types/meta-fn.ts | 1 + 9 files changed, 59 insertions(+), 12 deletions(-) diff --git a/app/srv/ws/sync/actions/code_edit.ts b/app/srv/ws/sync/actions/code_edit.ts index 31a0e0a9..3a6d472f 100644 --- a/app/srv/ws/sync/actions/code_edit.ts +++ b/app/srv/ws/sync/actions/code_edit.ts @@ -12,6 +12,8 @@ import { parseJs } from "../editor/parser/parse-js"; import { snapshot } from "../entity/snapshot"; import { validate } from "uuid"; import { gzipAsync } from "utils/diff/diff"; +import { user } from "../entity/user"; +import { loadComponent } from "../editor/load-component"; const decoder = new TextDecoder(); const timeout = { @@ -40,6 +42,8 @@ export const code_edit: SAction["code"]["edit"] = async function ( } else if (comp_id) { save_to = "comp"; const ref = docs.comp[comp_id]; + + await loadComponent(comp_id, this); if (ref) { root = ref.doc.getMap("map").get("root"); doc = ref.doc as Doc; diff --git a/app/web/src/nova/ed/panel/side/prop-instance.tsx b/app/web/src/nova/ed/panel/side/prop-instance.tsx index ae07e9b5..565d469e 100644 --- a/app/web/src/nova/ed/panel/side/prop-instance.tsx +++ b/app/web/src/nova/ed/panel/side/prop-instance.tsx @@ -238,6 +238,7 @@ export const EdSidePropInstance: FC<{ meta: IMeta }> = ({ meta }) => { @@ -247,6 +248,7 @@ export const EdSidePropInstance: FC<{ meta: IMeta }> = ({ meta }) => { {type === "text" && ( diff --git a/app/web/src/nova/ed/panel/side/prop-instance/prop-code.tsx b/app/web/src/nova/ed/panel/side/prop-instance/prop-code.tsx index 7bb7a7bf..44fb47a1 100644 --- a/app/web/src/nova/ed/panel/side/prop-instance/prop-code.tsx +++ b/app/web/src/nova/ed/panel/side/prop-instance/prop-code.tsx @@ -5,15 +5,16 @@ import { useGlobal } from "web-utils"; import { EDGlobal, active } from "../../../logic/ed-global"; export const EdPropInstanceCode: FC<{ + label?: string; name: string; mprop: FMCompDef; labelClick?: React.MouseEventHandler | undefined; onEditCode: React.MouseEventHandler | undefined; -}> = ({ name, labelClick, onEditCode }) => { +}> = ({ label, name, labelClick, onEditCode }) => { const p = useGlobal(EDGlobal, "EDITOR"); return (
- +
- +
{mode === "dropdown" && ( <> diff --git a/app/web/src/nova/ed/panel/side/prop-instance/prop-text.tsx b/app/web/src/nova/ed/panel/side/prop-instance/prop-text.tsx index e6425108..a0bf394d 100644 --- a/app/web/src/nova/ed/panel/side/prop-instance/prop-text.tsx +++ b/app/web/src/nova/ed/panel/side/prop-instance/prop-text.tsx @@ -13,9 +13,10 @@ import { EDGlobal } from "../../../logic/ed-global"; export const EdPropInstanceText: FC<{ name: string; + label?: string; mprop: FMCompDef; labelClick?: React.MouseEventHandler | undefined; -}> = ({ name, mprop, labelClick }) => { +}> = ({ label, name, mprop, labelClick }) => { const p = useGlobal(EDGlobal, "EDITOR"); const val = mprop.get("value"); @@ -32,7 +33,7 @@ export const EdPropInstanceText: FC<{ return (
- + { + local.label = mprop.get("label") || local.name.replace(/\_/gi, " "); + local.render(); + }, []); + const rename = () => { const keys = Object.keys(mprop.parent?.toJSON()); if ([...keys, ...invalidKeyword].includes(local.name)) { @@ -113,6 +119,10 @@ export const EdPropPopoverForm: FC<{ .toLowerCase() .replace(/\W/gi, "_"); + if (!local.label) { + local.label = local.name.replace(/\_/gi, " "); + } + local.render(); }} onBlur={() => { @@ -128,6 +138,32 @@ export const EdPropPopoverForm: FC<{ />
+
+
Label
+ { + local.label = e.currentTarget.value; + local.render(); + }} + onBlur={() => { + mprop.set("label", local.label); + if (!local.label) { + local.label = local.name.replace(/\_/gi, " "); + local.render(); + } + }} + onKeyDown={(e) => { + if (e.key === "Enter") { + e.currentTarget.blur(); + } + }} + /> +
+ {type === "content-element" && ( <>
@@ -139,7 +175,7 @@ export const EdPropPopoverForm: FC<{ EDIT CODE
- +
Visible diff --git a/app/web/src/nova/ed/panel/side/prop-master/tree-item.tsx b/app/web/src/nova/ed/panel/side/prop-master/tree-item.tsx index 1a23b112..32efd230 100644 --- a/app/web/src/nova/ed/panel/side/prop-master/tree-item.tsx +++ b/app/web/src/nova/ed/panel/side/prop-master/tree-item.tsx @@ -29,9 +29,12 @@ export const EdPropCompTreeItem: FC<{ if (node.data?.prop.meta?.type === "option") type = "OPT"; else if (node.data?.prop.meta?.type === "content-element") type = "JSX"; + const plabel = node.data?.prop.label; const label = (
-
{node.text}
+
+ {node.text} {plabel && {plabel}} +
{type}
diff --git a/app/web/src/utils/types/meta-fn.ts b/app/web/src/utils/types/meta-fn.ts index 114ad43f..1e7d4a57 100644 --- a/app/web/src/utils/types/meta-fn.ts +++ b/app/web/src/utils/types/meta-fn.ts @@ -29,6 +29,7 @@ export type FNCompDef = { idx: number; typings: string; type: string; + label?: string; value: any; valueBuilt: any; gen?: string;