diff --git a/app/web/src/nova/ed/logic/ed-global.ts b/app/web/src/nova/ed/logic/ed-global.ts index ebccbd02..d8cded83 100644 --- a/app/web/src/nova/ed/logic/ed-global.ts +++ b/app/web/src/nova/ed/logic/ed-global.ts @@ -223,7 +223,7 @@ export const EDGlobal = { list: {} as Record, }, page: { - go: () => {}, + open: null as null | ((page_id: string) => void), form: null as null | {}, }, script: { 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 fad88f86..e08a2b90 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 @@ -7,7 +7,12 @@ export const EdPagePicker = () => { return ( {}} + onClick={(e) => { + p.ui.popup.page.open = (page_id) => { + navigate(`/ed/${p.site.id}/${page_id}`); + }; + p.render(); + }} innerClassName="flex items-center justify-center space-x-2" >
{ - return
Hello world
; + const p = useGlobal(EDGlobal, "EDITOR"); + const local = useLocal({}); + const TypedTree = DNDTree; + pagePicker.render = local.render; + + useEffect(() => { + p.ui.popup.page.open = () => {}; + + (async () => { + if (pagePicker.status === "ready") { + reloadPagePicker(p); + } + })(); + }, [p.site.id]); + + if (!p.ui.popup.page.open) return null; + + return ( + <> + {pagePicker.status === "loading" && } + { + if (!open) { + p.ui.popup.page.open = null; + p.render(); + } + }} + > +
+
+ + {}} + render={edPageTreeRender} + /> + +
+
+
+ + ); }; diff --git a/app/web/src/nova/ed/panel/popup/page/page-reload.ts b/app/web/src/nova/ed/panel/popup/page/page-reload.ts new file mode 100644 index 00000000..6cf8f817 --- /dev/null +++ b/app/web/src/nova/ed/panel/popup/page/page-reload.ts @@ -0,0 +1,34 @@ +import { NodeModel } from "@minoru/react-dnd-treeview"; +import { PageItem } from "./page-tree"; +import { PG } from "../../../logic/ed-global"; + +export const pagePicker = { + tree: [] as NodeModel[], + status: "ready" as "loading" | "ready", + render: () => {}, +}; + +export const reloadPagePicker = async (p: PG) => { + pagePicker.status = "loading"; + pagePicker.render(); + + const pages = await db.page.findMany({ + where: { id_site: p.site.id, is_deleted: false }, + select: { + id: true, + name: true, + id_layout: true, + is_default_layout: true, + id_folder: true, + url: true, + }, + }); + + const folders = await db.page_folder.findMany({ + where: { id_site: p.site.id }, + select: { id: true, is_deleted: false, name: true, parent_id: true }, + }); + + pagePicker.status = "ready"; + pagePicker.render(); +}; diff --git a/app/web/src/nova/ed/panel/popup/page/page-tree.tsx b/app/web/src/nova/ed/panel/popup/page/page-tree.tsx new file mode 100644 index 00000000..e402f6e7 --- /dev/null +++ b/app/web/src/nova/ed/panel/popup/page/page-tree.tsx @@ -0,0 +1,6 @@ +export type PageItem = { + id: string; +}; +export const edPageTreeRender = () => { + return <>; +};