- {active.prop_name ? (
-
{active.prop_name}
+ {p.ui.popup.script.type === "prop" ? (
+ <>>
) : (
<>
{[
diff --git a/app/web/src/nova/ed/panel/side/prop-comp.tsx b/app/web/src/nova/ed/panel/side/prop-comp.tsx
index 8e54b45d..9e814a41 100644
--- a/app/web/src/nova/ed/panel/side/prop-comp.tsx
+++ b/app/web/src/nova/ed/panel/side/prop-comp.tsx
@@ -9,8 +9,10 @@ import { FC } from "react";
import { HTML5Backend } from "react-dnd-html5-backend";
import { useGlobal, useLocal } from "web-utils";
import { IItem } from "../../../../utils/types/item";
+import { FMCompDef } from "../../../../utils/types/meta-fn";
import { EDGlobal, EdMeta } from "../../logic/ed-global";
import { EdPropCompTreeItem, PropItem } from "./prop-comp/tree-item";
+import { propPopover } from "./prop-comp/prop-popover";
const propRef = {
el: null as any,
@@ -111,7 +113,31 @@ export const EdSidePropComp: FC<{ meta: EdMeta }> = ({ meta }) => {
dragPreviewRender={() => <>>}
/>
-
+
{
+ if (mprops) {
+ const indexes: (number | undefined)[] = [];
+ mprops.forEach((e) => indexes.push(e.get("idx")));
+ let idx: any = (indexes.sort().pop() || 0) + 1;
+ const name = `prop_${idx + 1}`;
+ const map = new Y.Map() as FMCompDef;
+ syncronize(map, {
+ idx: idx,
+ name,
+ type: "string",
+ value: '"hello"',
+ valueBuilt: '"hello"',
+ meta: {
+ type: "text",
+ },
+ });
+ mprops.set(name, map);
+ propPopover.name = name;
+ p.render();
+ }
+ }}
+ >
+ New Prop
diff --git a/app/web/src/nova/ed/panel/side/prop-comp/edit-script.tsx b/app/web/src/nova/ed/panel/side/prop-comp/edit-script.tsx
index cc8bbed6..b93d8d84 100644
--- a/app/web/src/nova/ed/panel/side/prop-comp/edit-script.tsx
+++ b/app/web/src/nova/ed/panel/side/prop-comp/edit-script.tsx
@@ -1,5 +1,25 @@
-import { PG } from "../../../logic/ed-global";
+import { MouseEventHandler } from "react";
+import { FMCompDef } from "../../../../../utils/types/meta-fn";
+import { PG, PropFieldKind } from "../../../logic/ed-global";
-export const createEditScript = (p: PG, name: string) => {
- return () => {};
+export const createEditScript = (
+ p: PG,
+ kind: PropFieldKind,
+ mprop: FMCompDef,
+ name: string
+) => {
+ return ((e) => {
+ e.preventDefault();
+ e.stopPropagation();
+
+ const meta = mprop.get("meta");
+ if (meta) {
+ p.ui.popup.script.mode = "js";
+ p.ui.popup.script.open = true;
+ p.ui.popup.script.type = "prop";
+ p.ui.popup.script.prop_kind = kind;
+ p.ui.popup.script.prop_name = name;
+ p.render();
+ }
+ }) as MouseEventHandler
;
};
diff --git a/app/web/src/nova/ed/panel/side/prop-comp/prop-popover.tsx b/app/web/src/nova/ed/panel/side/prop-comp/prop-popover.tsx
index 380d3350..c0e57138 100644
--- a/app/web/src/nova/ed/panel/side/prop-comp/prop-popover.tsx
+++ b/app/web/src/nova/ed/panel/side/prop-comp/prop-popover.tsx
@@ -58,6 +58,7 @@ export const EdPropPopover: FC<{ mprop: FMCompDef; name: string }> = ({
type="text"
className="p-1 outline-none border focus:border-blue-500"
value={local.name}
+ autoFocus
onChange={(e) => {
local.name = e.currentTarget.value
.toLowerCase()
@@ -100,7 +101,7 @@ export const EdPropPopover: FC<{ mprop: FMCompDef; name: string }> = ({
EDIT CODE
@@ -127,7 +128,7 @@ export const EdPropPopover: FC<{ mprop: FMCompDef; name: string }> = ({
@@ -137,7 +138,7 @@ export const EdPropPopover: FC<{ mprop: FMCompDef; name: string }> = ({