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"
)}
>
-
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;
+ }
};