wip fix master prop

This commit is contained in:
Rizky 2024-01-24 12:12:10 +07:00
parent 2f74afcd30
commit 51c9df4954
7 changed files with 48 additions and 33 deletions

View File

@ -1,6 +1,5 @@
FROM oven/bun:1.0.18-debian as base
WORKDIR /app/prasi/repo
COPY . .
RUN apt-get update
RUN apt-get install git curl gnupg zip unzip -yq
@ -12,6 +11,8 @@ RUN apt-get install nodejs -yq
RUN npm i -g @parcel/watcher node-gyp-build-optional-packages node-gyp pnpm
RUN PATH="/usr/lib/node_modules/npm/bin:$PATH"
COPY . .
RUN bun install
RUN bun run build

View File

@ -40,7 +40,7 @@ export const prepCodeSnapshot = async (id_site: string, mode: CodeMode) => {
doc.on("update", async (e, origin) => {
const bin = Y.encodeStateAsUpdate(doc);
if (snap && snap.type === "code") {
if (typeof snap !== "undefined" && snap.type === "code") {
snap.build[mode].bin = bin;
snapshot.update({
id: id_site,

View File

@ -10,6 +10,7 @@ import { pushTreeNode } from "../tree/build/push-tree";
import { isTextEditing } from "../active/is-editing";
import { assignMitem } from "../tree/assign-mitem";
import { createId } from "@paralleldrive/cuid2";
import { waitUntil } from "web-utils";
export const loadcomp = {
timeout: 0 as any,
@ -45,6 +46,8 @@ export const loadCompSnapshot = async (
comp_id: string,
snapshot: Uint8Array
) => {
if (p.comp.list[comp_id]) return;
const doc = new Y.Doc() as DComp;
Y.applyUpdate(doc as any, decompress(snapshot));
const mitem = doc.getMap("map").get("root");
@ -102,8 +105,6 @@ export const loadCompSnapshot = async (
if (isTextEditing()) {
return;
}
treeRebuild(p, { note: "load-comp" });
p.render();
}
},
};
@ -142,7 +143,7 @@ export const updateComponentMeta = async (
let result = Object.entries(comps);
for (const [id_comp, comp] of result) {
if (comp && comp.snapshot) {
if (comp && comp.snapshot && !p.comp.list[id_comp]) {
await loadCompSnapshot(p, id_comp, comp.snapshot);
}
}
@ -156,7 +157,7 @@ export const updateComponentMeta = async (
meta,
mode: "comp",
on: {
visit(m) {
async visit(m) {
pushTreeNode(p, m, meta, tree);
assignMitem({

View File

@ -58,12 +58,14 @@ export const treeRebuild = async (p: PG, arg?: { note?: string }) => {
mitem,
meta,
new_prop_jsx(meta, mprops, prop_name, prop_val) {
transact.list.push(() => {
const map = new Y.Map();
if (prop_val.content) prop_val.content.id = createId();
syncronize(map, prop_val);
mprops.set(prop_name, map as any);
});
// if (prop_val.meta?.type === "content-element") {
// transact.list.push(() => {
// const map = new Y.Map();
// if (prop_val.content) prop_val.content.id = createId();
// syncronize(map, prop_val);
// mprops.set(prop_name, map as any);
// });
// }
},
});
}

View File

@ -5,7 +5,7 @@ import {
PlaceholderRender,
getBackendOptions,
} from "@minoru/react-dnd-treeview";
import { FC } from "react";
import { FC, useState } from "react";
import { HTML5Backend } from "react-dnd-html5-backend";
import { useGlobal, useLocal } from "web-utils";
import { IItem } from "../../../../utils/types/item";
@ -20,14 +20,19 @@ const propRef = {
export const EdSidePropComp: FC<{ meta: IMeta }> = ({ meta }) => {
const p = useGlobal(EDGlobal, "EDITOR");
const local = useLocal({});
const item = meta?.item as IItem;
const [_, set] = useState({});
const render = () => {
set({});
};
propPopover.render = render;
if (!item) return null;
const TypedTree = DNDTree<PropItem>;
let filtered = [] as NodeModel<PropItem>[];
let mprops = meta.mitem?.get("component")?.get("props");
if (!mprops) {
const mcomp = meta.mitem?.get("component");
if (mcomp) {
@ -119,8 +124,8 @@ export const EdSidePropComp: FC<{ meta: IMeta }> = ({ meta }) => {
render={(node, params) => (
<EdPropCompTreeItem
node={node}
render={render}
params={params}
render={local.render}
/>
)}
rootId={"root"}

View File

@ -11,7 +11,7 @@ import { fillID } from "../../../logic/tree/fill-id";
export const propPopover = {
name: "",
render: {} as Record<string, () => void>,
render: () => {},
};
export const EdPropPopoverForm: FC<{
@ -23,10 +23,30 @@ export const EdPropPopoverForm: FC<{
const mmeta = mprop.get("meta");
const local = useLocal({
name,
rename_timeout: null as any,
});
if (!mmeta) return null;
const type = mmeta.get("type");
const rename = () => {
const keys = Object.keys(mprop.parent?.toJSON());
if ([...keys, ...invalidKeyword].includes(local.name)) {
alert(`Cannot use "${local.name}" as name`);
local.name = name;
local.render();
return;
}
mprop.doc?.transact(() => {
const parent = mprop.parent as TypedMap<Record<string, FMCompDef>>;
parent.set(local.name, parent.get(name)?.clone() as any);
parent.delete(name);
});
propPopover.name = local.name;
propPopover.render();
};
return (
<div
className={cx(
@ -72,6 +92,7 @@ export const EdPropPopoverForm: FC<{
} else {
mmeta.set("type", e.type as any);
}
propPopover.render();
}}
>
{e.label}
@ -91,26 +112,12 @@ export const EdPropPopoverForm: FC<{
local.name = e.currentTarget.value
.toLowerCase()
.replace(/\W/gi, "_");
local.render();
}}
onBlur={() => {
if (local.name !== name) {
const keys = Object.keys(mprop.parent?.toJSON());
if ([...keys, ...invalidKeyword].includes(local.name)) {
alert(`Cannot use "${local.name}" as name`);
local.name = name;
local.render();
return;
}
mprop.doc?.transact(() => {
const parent = mprop.parent as TypedMap<
Record<string, FMCompDef>
>;
parent.set(local.name, parent.get(name)?.clone() as any);
parent.delete(name);
});
propPopover.name = local.name;
local.render();
rename();
}
}}
onKeyDown={(e) => {

View File

@ -20,7 +20,6 @@ export const EdPropCompTreeItem: FC<{
render: () => void;
}> = ({ node, params, render }) => {
const local = useLocal({ closing: false });
propPopover.render[node.text] = local.render;
if (node.id === "root") {
return <></>;