UNPKG

@airplane/views

Version:

A React library for building Airplane views. Views components are optimized in style and functionality to produce internal apps that are easy to build and maintain.

58 lines (57 loc) 1.6 kB
import { jsx } from "react/jsx-runtime"; import { useState, useEffect, useCallback } from "react"; import { sanitizeMessage } from "../../message/sanitizeMessage.js"; import { sendViewMessage } from "../../message/sendViewMessage.js"; import { ComponentStateContext } from "./context.js"; const ComponentStateProvider = ({ children }) => { const [components, setComponents] = useState({}); useEffect(() => { try { const state = sanitizeMessage(components); sendViewMessage({ type: "component_state", state }); } catch (e) { if (e instanceof DOMException && e.name === "DataCloneError") { sendViewMessage({ type: "component_state", state: {}, error: e.message }); return; } throw e; } }, [components]); const updateComponent = useCallback((id, state) => { setComponents((currentComponents) => ({ ...currentComponents, [id]: state })); }, []); const removeComponent = useCallback((id) => { setComponents((currentComponents) => { const hasComponent = currentComponents[id]; if (!hasComponent) return currentComponents; const newComponents = { ...currentComponents }; delete newComponents[id]; return newComponents; }); }, []); const context = { components, updateComponent, removeComponent }; return /* @__PURE__ */ jsx(ComponentStateContext.Provider, { value: context, children }); }; export { ComponentStateProvider }; //# sourceMappingURL=ComponentStateProvider.js.map