diff --git a/app/web/src/render/live/elements/l-render.tsx b/app/web/src/render/live/elements/l-render.tsx
index 8473af3e..f9b0b10b 100644
--- a/app/web/src/render/live/elements/l-render.tsx
+++ b/app/web/src/render/live/elements/l-render.tsx
@@ -1,5 +1,5 @@
import { FC, ReactNode, useEffect, useState } from "react";
-import { useGlobal } from "web-utils";
+import { useGlobal, useLocal } from "web-utils";
import { produceCSS } from "../../../utils/css/gen";
import { IContent } from "../../../utils/types/general";
import { FNAdv, FNCompDef, FNLinkTag } from "../../../utils/types/meta-fn";
@@ -27,12 +27,10 @@ export const LRender: FC<{
mode: p.mode,
});
- const className = meta.className;
- return
;
+ return ;
} else {
- const el = document.getElementById(meta.item.name);
- if (!el) return null;
- return createPortal(
+ if (!p.portal[meta.item.name]) return null;
+ p.portal[meta.item.name].el = (
,
- el
+ />
);
+ return null;
}
}
}
@@ -234,3 +232,16 @@ export const renderHTML = (className: string, adv: FNAdv) => {
}
return null;
};
+
+const PrasiPortal = ({ name }: { name: string }) => {
+ const p = useGlobal(LiveGlobal, "LIVE");
+ const local = useLocal({});
+
+ if (!p.portal[name]) {
+ p.portal[name] = { render: local.render, el: null };
+ } else {
+ p.portal[name].render = local.render;
+ }
+
+ return p.portal[name].el;
+};
diff --git a/app/web/src/render/live/logic/global.ts b/app/web/src/render/live/logic/global.ts
index f0e2640d..ebdc94f8 100644
--- a/app/web/src/render/live/logic/global.ts
+++ b/app/web/src/render/live/logic/global.ts
@@ -1,7 +1,7 @@
-import { FC } from "react";
import { createRouter } from "radix3";
+import { FC, ReactNode } from "react";
import { CompDoc } from "../../../base/global/content-editor";
-import { IContent, MContent, MPage } from "../../../utils/types/general";
+import { IContent, MPage } from "../../../utils/types/general";
import { IItem, MItem } from "../../../utils/types/item";
import { PRASI_COMPONENT } from "../../../utils/types/render";
import { IRoot } from "../../../utils/types/root";
@@ -106,6 +106,7 @@ export const LiveGlobal = {
}>(),
treePending: null as null | Promise,
treeMeta: {} as Record,
+ portal: {} as Record void }>,
comps: {
pending: {} as Record>,
resolve: {} as Record void>,
diff --git a/app/web/src/render/live/logic/route.ts b/app/web/src/render/live/logic/route.ts
index 15290744..d98c93cd 100644
--- a/app/web/src/render/live/logic/route.ts
+++ b/app/web/src/render/live/logic/route.ts
@@ -35,6 +35,7 @@ export const routeLive = (p: PG, pathname: string) => {
if (page_id !== p.page?.id) {
p.page = p.pages[page_id];
p.treeMeta = {};
+ p.portal = {};
}
if (!p.page || !p.page.content_tree) {
promises.push(loadNpmPage(p, page_id));