prasi-bun/app/web/src/nova/vi/meta/comp/init-comp-load.tsx

51 lines
1.1 KiB
TypeScript

import { IItem } from "../../../../utils/types/item";
import { GenMetaP } from "../../utils/types";
import { genMeta } from "../meta";
export const initLoadComp = async (
p: GenMetaP,
item: IItem,
load: (comp_ids: string[]) => Promise<void>,
_loaded?: Set<string>
) => {
const comp_ids = new Set<string>();
genMeta(
{
...p,
on: {
visit_component: ({ component }) => {
if (component) {
const { id } = component;
if (!p.comps[id]) {
if (!_loaded || (_loaded && !_loaded.has(id))) {
comp_ids.add(id);
}
}
}
},
},
set_meta: false,
note: "init-load-comp",
},
{ item, ignore_first_component: true }
);
if (comp_ids.size > 0) {
await load([...comp_ids]);
let loaded = _loaded;
if (!loaded) {
loaded = new Set<string>();
}
comp_ids.forEach((id) => {
if (loaded) loaded.add(id);
});
for (const id of [...loaded]) {
const comp = p.comps[id];
if (comp) {
await initLoadComp(p, comp, load, loaded);
}
}
}
};