UNPKG

@expressive/react

Version:
37 lines 992 B
// src/context.ts import { Context } from "@expressive/mvc"; import { createContext, createElement, useContext, useEffect, useMemo } from "react"; var Lookup = createContext(new Context()); Context.use = (create) => { const ambient = useContext(Lookup); return create ? useMemo(() => ambient.push(), []) : ambient; }; function Consumer(props) { return props.for.get((i) => props.children(i)); } function Provider(props) { const context = Context.use(true); useEffect(() => () => context.pop(), [context]); context.include(props.for, (model) => { if (props.forEach) { const cleanup = props.forEach(model); if (cleanup) model.set(cleanup, null); } }); return createProvider(context, props.children); } function createProvider(context, children) { return createElement(Lookup.Provider, { key: context.id, value: context, children }); } export { Consumer, Context, Provider, createProvider }; //# sourceMappingURL=context.js.map