@expressive/react
Version:
Use classes to define state in React!
37 lines • 992 B
JavaScript
// 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