import { NoyaManager } from "../NoyaManager"; import { ParentToEmbeddedMessage } from "./parentFrameMessages"; import { ConnectionMessage } from "./types"; /** * Subscribe to parent-side connection events and forward child-facing messages. * - stateChange → { type: "connection", state: "connected" | "disconnected" } * - receive → forwards the original server message to the child */ export function forwardConnectionEventsToChild< S, M extends object, E extends object, MenuT extends string, I extends Record = Record, >( noyaManager: NoyaManager, send: (message: ParentToEmbeddedMessage) => void ) { return noyaManager.connectionEventManager.events$.subscribe((events) => { if (events.length === 0) return; const last = events[events.length - 1]!; switch (last.type) { case "stateChange": { const connectionMessage: ConnectionMessage = { type: "connection", state: last.state === "OPEN" ? "connected" : "disconnected", }; send(connectionMessage); break; } case "receive": { const msg = last.message; // Suppress sending null document objects to the child. In embedded // mode, a null object is not useful and can clobber the child's own // initial state derived from URL params. Later non-null objects will // still be forwarded normally. if (msg && msg.type === "object" && msg.object === null) { break; } send(msg); break; } } }); }