From 9236073e19a84216aea4d5975900f2701a6d2342 Mon Sep 17 00:00:00 2001 From: Rizky Date: Wed, 29 Nov 2023 11:26:53 +0700 Subject: [PATCH] wip fix popup --- app/srv/api/site-export.ts | 1 - app/srv/ws/sync/editor/load-page.ts | 4 - .../nova/ed/panel/popup/comp/comp-popup.tsx | 125 +++++++++++------- .../nova/ed/panel/popup/comp/comp-preview.tsx | 77 ++++++++--- .../nova/ed/panel/popup/comp/comp-reload.ts | 2 + .../nova/ed/panel/popup/comp/comp-tree.tsx | 75 +++++++++-- 6 files changed, 200 insertions(+), 84 deletions(-) diff --git a/app/srv/api/site-export.ts b/app/srv/api/site-export.ts index 493c1a4d..f46e8798 100644 --- a/app/srv/api/site-export.ts +++ b/app/srv/api/site-export.ts @@ -128,7 +128,6 @@ function readDirectoryRecursively( result[[...(baseDir || []), item].join("/")] = content; } else if (stats.isDirectory()) { if (item !== "node_modules") { - console.log(itemPath); const subdirResult = readDirectoryRecursively(itemPath, [ ...(baseDir || []), item, diff --git a/app/srv/ws/sync/editor/load-page.ts b/app/srv/ws/sync/editor/load-page.ts index f7141d01..6e42f99a 100644 --- a/app/srv/ws/sync/editor/load-page.ts +++ b/app/srv/ws/sync/editor/load-page.ts @@ -260,10 +260,6 @@ export const serverWalkMap = ( let id = item.originalId || item.id; const pcomp = p.scope_comps[arg.parent_mcomp.id]; - if (!pcomp) { - console.log(arg.parent_mcomp.id); - } - if (pcomp) { pcomp.scope[id] = { p: arg.parent_mcomp.parent_ids, diff --git a/app/web/src/nova/ed/panel/popup/comp/comp-popup.tsx b/app/web/src/nova/ed/panel/popup/comp/comp-popup.tsx index ef50a265..fe980f0f 100644 --- a/app/web/src/nova/ed/panel/popup/comp/comp-popup.tsx +++ b/app/web/src/nova/ed/panel/popup/comp/comp-popup.tsx @@ -18,13 +18,14 @@ export const EdPopComp = () => { const p = useGlobal(EDGlobal, "EDITOR"); const local = useLocal({ tree: null as TreeMethods | null, + tab: "Components", }); const TypedTree = DNDTree; compPicker.render = local.render; useEffect(() => { local.tree?.openAll(); - }, [p.ui.popup.comp.open, compPicker.site_id]); + }, [p.ui.popup.comp.open, compPicker.site_id, local.tab]); if (!p.ui.popup.comp.open) return null; @@ -37,6 +38,11 @@ export const EdPopComp = () => { reloadCompPicker(p); } + let tree = compPicker.tree; + if (local.tab === "Trash") { + tree = compPicker.trash; + } + return ( <> { )} {compPicker.status !== "loading" && ( <> -
-
.tree-root > .listitem > .container { - display: flex; - flex-direction: row; - flex-wrap: wrap; - position: relative; - } - ` - )} - > - {compPicker.ref && compPicker.status === "ready" && ( - - { - if (local.tree !== ref) { - local.tree = ref; - } - }} - tree={compPicker.tree} - initialOpen={true} - rootId={"comp-root"} - onDrop={() => {}} - dragPreviewRender={() => <>} - canDrag={() => true} - classes={{ - root: "tree-root flex-1", - listItem: "listitem", - container: "container", - }} - render={edPageTreeRender} - /> - - )} +
+
+
+ {["Components", "Trash"].map((e) => { + return ( +
{ + local.tab = e; + p.render(); + }} + > + {e} +
+ ); + })} +
+
+
+
.tree-root > .listitem:first-child > div { + border-top: 0; + } + > .tree-root > .listitem > .container { + display: flex; + flex-direction: row; + flex-wrap: wrap; + position: relative; + } + ` + )} + > + {compPicker.ref && compPicker.status === "ready" && ( + + { + if (local.tree !== ref) { + local.tree = ref; + } + }} + tree={tree} + initialOpen={true} + rootId={"comp-root"} + onDrop={() => {}} + dragPreviewRender={() => <>} + canDrag={() => true} + classes={{ + root: "tree-root flex-1", + listItem: "listitem", + container: "container", + }} + render={edPageTreeRender} + /> + + )} +
diff --git a/app/web/src/nova/ed/panel/popup/comp/comp-preview.tsx b/app/web/src/nova/ed/panel/popup/comp/comp-preview.tsx index 076560e0..ceff1456 100644 --- a/app/web/src/nova/ed/panel/popup/comp/comp-preview.tsx +++ b/app/web/src/nova/ed/panel/popup/comp/comp-preview.tsx @@ -6,7 +6,7 @@ import { IText } from "../../../../../utils/types/text"; import { EDGlobal, PG, active } from "../../../logic/ed-global"; import { loadComponent } from "../../../logic/tree/sync-walk"; import { EdCompPreviewTree } from "./comp-preview-tree"; -import { compPicker } from "./comp-reload"; +import { compPicker, reloadCompPicker } from "./comp-reload"; export const EdCompPreview = () => { const p = useGlobal(EDGlobal, "EDITOR"); @@ -25,10 +25,12 @@ export const EdCompPreview = () => { } }, [comp_id]); + const isTrashed = !!compPicker.trash.find((e) => e.id === comp_id); + return (
{comp_id && item && ( -
+
Preview
@@ -37,41 +39,72 @@ export const EdCompPreview = () => {
{ e.stopPropagation(); - if (p.ui.popup.comp.open) { - p.ui.popup.comp.open(item.id); - } - p.ui.popup.comp.open = null; + if (isTrashed) { + p.ui.popup.comp_group = { + mouse_event: e, + async on_pick(group_id) { + await db.component.update({ + where: { id: comp_id }, + data: { id_component_group: group_id }, + }); + await reloadCompPicker(p); + p.render(); + }, + }; + } else { + if (p.ui.popup.comp.open) { + p.ui.popup.comp.open(item.id); + } + p.ui.popup.comp.open = null; - active.item_id = compPicker.active_id; - compPicker.active_id = ""; + active.item_id = compPicker.active_id; + compPicker.active_id = ""; + } p.render(); }} > - Select Component + {isTrashed ? "Restore Component" : "Select Component"}
{ e.stopPropagation(); - if (confirm("Are you sure to delete this component?")) { - await db.component.delete({ - where: { id: p.ui.popup.comp.preview_id }, - }); - const idx = - compPicker.tree.findIndex((e) => e.id === comp_id) + 1; + if (isTrashed) { + if (confirm("Permanently delete this component?")) { + await db.component.delete({ + where: { id: p.ui.popup.comp.preview_id }, + }); + const idx = + compPicker.tree.findIndex((e) => e.id === comp_id) + 1; - if (idx >= 0 && compPicker.tree[idx]) - p.ui.popup.comp.preview_id = compPicker.tree[idx].id as any; + if (idx >= 0 && compPicker.tree[idx]) + p.ui.popup.comp.preview_id = compPicker.tree[idx] + .id as any; - compPicker.tree = compPicker.tree.filter( - (e) => e.id !== comp_id - ); - p.render(); + compPicker.tree = compPicker.tree.filter( + (e) => e.id !== comp_id + ); + p.render(); + } + } else { + if (confirm("Move component to trash?")) { + await db.component.update({ + where: { id: comp_id }, + data: { id_component_group: compPicker.trash_id }, + }); + await reloadCompPicker(p); + p.render(); + } } }} > diff --git a/app/web/src/nova/ed/panel/popup/comp/comp-reload.ts b/app/web/src/nova/ed/panel/popup/comp/comp-reload.ts index 28e0d421..bc087909 100644 --- a/app/web/src/nova/ed/panel/popup/comp/comp-reload.ts +++ b/app/web/src/nova/ed/panel/popup/comp/comp-reload.ts @@ -9,6 +9,7 @@ export const compPicker = { tab: "all" as "all" | "trash", tree: [] as NodeModel[], trash: [] as NodeModel[], + trash_id: "", status: "ready" as "loading" | "ready", active_id: "", render: () => {}, @@ -32,6 +33,7 @@ export const reloadCompPicker = async (p: PG) => { if (v.name === "__TRASH__") { trash_id = k; + compPicker.trash_id = k; } tree.push({ id: k, diff --git a/app/web/src/nova/ed/panel/popup/comp/comp-tree.tsx b/app/web/src/nova/ed/panel/popup/comp/comp-tree.tsx index 0478d905..2c5c05e6 100644 --- a/app/web/src/nova/ed/panel/popup/comp/comp-tree.tsx +++ b/app/web/src/nova/ed/panel/popup/comp/comp-tree.tsx @@ -18,6 +18,8 @@ export const edPageTreeRender: NodeRender = ( const item = node.data; if (!item) return <>; + const isTrashed = !!compPicker.trash.find((e) => e.id === item.id); + return (
= ( {item.type === "component" && (
{ e.stopPropagation(); - if (p.ui.popup.comp.open) { - p.ui.popup.comp.open(item.id); + if (isTrashed) { + p.ui.popup.comp.preview_id = item.id; + p.ui.popup.comp_group = { + mouse_event: e, + async on_pick(group_id) { + await db.component.update({ + where: { id: item.id }, + data: { id_component_group: group_id }, + }); + await reloadCompPicker(p); + p.render(); + }, + }; + p.render(); + } else { + if (p.ui.popup.comp.open) { + p.ui.popup.comp.open(item.id); + } + p.ui.popup.comp.open = null; + active.item_id = compPicker.active_id; + compPicker.active_id = ""; + + p.page.render(); } - p.ui.popup.comp.open = null; - - console.log(active.item_id, compPicker.active_id); - active.item_id = compPicker.active_id; - compPicker.active_id = ""; - - p.page.render(); }} > - +
+ +
+
+ {isTrashed ? : } +
)}
@@ -149,13 +182,31 @@ const Name: FC<{ name: string }> = ({ name }) => { return
{name}
; }; -const ImageIcon = () => ( + +const CheckIcon = () => ( +
`, + }} + >
+); + +const ResetIcon = () => ( +
`, + }} + >
+); + +const PlayIcon = () => (
`, }} >
); + const DeleteIcon = () => (