UNPKG

@nwebui/react-niagara-core

Version:
71 lines 2.16 kB
import { useEffect, useState } from "react"; import * as baja from "@nwebui/bajascript"; export default function useComponent(ordOrComp, base, subscribe = true) { const [comp, setComp] = useState(); const [update, setUpdate] = useState(0); useEffect(() => { async function resolve(ord, base) { ord = await convertOrd(ord, base); const bord = new baja.Ord(ord); const comp = (await bord.get()); await comp.loadSlots(); setComp(comp); } if (!ordOrComp) { return; } if (typeof ordOrComp == "string") { resolve(ordOrComp, base); } else { setComp(ordOrComp); } }, [base, ordOrComp]); useEffect(() => { function onChange() { setUpdate((v) => v + 1); } async function doSubscribe(comp) { await comp.loadSlots(); if (subscribe) { await sub.subscribe(comp); } comp.addListener("changed", onChange); } if (!comp) { return; } const sub = new baja.Subscriber(); doSubscribe(comp); return () => { comp.removeListener("changed", onChange); sub.unsubscribeAll(); }; }, [comp, subscribe]); return [comp, update]; } async function convertOrd(ord, base) { if (base) { if (typeof base === "string") { return [base, ord].join("|"); } else { for (const b of base) { let joined = [b, ord].join("|").replace("|slot:", "/"); if (joined.startsWith("slot:/")) { joined = "station:|" + joined; } try { await new baja.Ord(joined).resolve(); return joined; } catch (e) { // empty } } return ord; } } return ord; } //# sourceMappingURL=useComponent.js.map