diff --git a/app/web/src/nova/ed/ed-mid.tsx b/app/web/src/nova/ed/ed-mid.tsx index d7eb6231..351799ff 100644 --- a/app/web/src/nova/ed/ed-mid.tsx +++ b/app/web/src/nova/ed/ed-mid.tsx @@ -2,6 +2,7 @@ import { FC } from "react"; import { EdCompPicker } from "./panel/header/mid/comp-picker"; import { EdPagePicker } from "./panel/header/mid/page-picker"; import { EdMain } from "./panel/main/main"; +import { TopBtn } from "./panel/header/top-btn"; export const EdMid: FC<{}> = () => { return ( @@ -11,14 +12,18 @@ export const EdMid: FC<{}> = () => { "h-[35px] border-b flex p-1 items-stretch text-[12px] justify-between" )} > -
+
-
+
-
+
+ + PREVIEW + +
diff --git a/app/web/src/nova/ed/panel/header/mid/page-picker.tsx b/app/web/src/nova/ed/panel/header/mid/page-picker.tsx index 33121e0e..d244b280 100644 --- a/app/web/src/nova/ed/panel/header/mid/page-picker.tsx +++ b/app/web/src/nova/ed/panel/header/mid/page-picker.tsx @@ -14,7 +14,7 @@ export const EdPagePicker = () => { }; p.render(); }} - innerClassName="flex items-center justify-center space-x-2" + style="slim" >
{ compPicker.render = local.render; useEffect(() => { - // waitUntil(() => local.tree).then(() => {}); + local.tree?.openAll(); }, [p.ui.popup.comp.open, compPicker.site_id]); if (!p.ui.popup.comp.open) return null; 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 8b0d95e7..d5dc5622 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 @@ -5,7 +5,9 @@ import { CompItem } from "./comp-tree"; export const compPicker = { site_id: "", ref: null as any, + tab: "all" as "all" | "trash", tree: [] as NodeModel[], + trash: [] as NodeModel[], status: "ready" as "loading" | "ready", render: () => {}, }; @@ -13,6 +15,54 @@ export const compPicker = { export const reloadCompPicker = async (p: PG) => { compPicker.status = "loading"; + compPicker.site_id = p.site.id; + p.comp.group[p.site.id] = await p.sync.comp.group(p.site.id); + + const group = p.comp.group[p.site.id]; + + compPicker.tree = []; + compPicker.trash = []; + const comp_ids: string[] = []; + let trash_id = ""; + for (const [k, v] of Object.entries(group)) { + const tree: NodeModel[] = + v.name !== "__TRASH__" ? compPicker.tree : compPicker.trash; + + if (v.name === "__TRASH__") { + trash_id = k; + } + tree.push({ + id: k, + parent: "comp-root", + text: v.name, + data: { id: k, name: v.name, type: "folder" }, + }); + comp_ids.push(k); + } + + const comps = await db.component.findMany({ + where: { id_component_group: { in: comp_ids } }, + select: { id: true, id_component_group: true, name: true }, + }); + + for (const comp of Object.values(comps)) { + if (comp.id_component_group) { + const tree: NodeModel[] = + comp.id_component_group !== trash_id + ? compPicker.tree + : compPicker.trash; + + tree.push({ + id: comp.id, + parent: comp.id_component_group, + text: comp.name, + data: { id: comp.id, name: comp.name, type: "component" }, + }); + } + } + + console.log(compPicker.tree); + compPicker.status = "ready"; compPicker.render(); }; 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 5f91bc65..47b23bf4 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 @@ -7,7 +7,7 @@ import { compPicker, reloadCompPicker } from "./comp-reload"; export type CompItem = { id: string; name: string; - type: "page" | "folder"; + type: "component" | "folder"; }; export const edPageTreeRender: NodeRender = ( node: NodeModel, diff --git a/app/web/src/render/live/dev-loader.tsx b/app/web/src/render/live/dev-loader.tsx index a7f4c726..568b5dd2 100644 --- a/app/web/src/render/live/dev-loader.tsx +++ b/app/web/src/render/live/dev-loader.tsx @@ -111,7 +111,11 @@ export const devLoader: Loader = { const load = async (url: string) => { const res = await fetch(url); - const text = await res.text(); - const json = JSON.parse(text); - return json; + try { + const text = await res.text(); + const json = JSON.parse(text); + return json; + } catch (e) { + return null; + } }; diff --git a/app/web/src/render/site/mobile-loader.tsx b/app/web/src/render/site/mobile-loader.tsx index f593e261..ab47ca8f 100644 --- a/app/web/src/render/site/mobile-loader.tsx +++ b/app/web/src/render/site/mobile-loader.tsx @@ -56,7 +56,11 @@ export const mobileLoader: Loader = { const load = async (url: string) => { const res = await fetch(`${w.mobilepath}${url}`); - const text = await res.text(); - const json = JSON.parse(text); - return json; + try { + const text = await res.text(); + const json = JSON.parse(text); + return json; + } catch (e) { + return null; + } }; diff --git a/app/web/src/render/site/site-loader.tsx b/app/web/src/render/site/site-loader.tsx index dddf065d..e9ce6cc8 100644 --- a/app/web/src/render/site/site-loader.tsx +++ b/app/web/src/render/site/site-loader.tsx @@ -49,7 +49,11 @@ export const siteLoader: Loader = { const load = async (url: string) => { const res = await fetch(`${base}${url}`); - const text = await res.text(); - const json = JSON.parse(text); - return json; + try { + const text = await res.text(); + const json = JSON.parse(text); + return json; + } catch (e) { + return null; + } };