@expressive/react
Version:
Use classes to define state in React!
62 lines (60 loc) • 1.65 kB
JavaScript
const require_chunk = require('./chunk-BE-pF4vm.js');
let _expressive_state = require("@expressive/state");
let react = require("react");
//#region src/context.ts
const Layers = (0, react.createContext)(new _expressive_state.Context());
_expressive_state.Context.use = (create) => {
const ambient = (0, react.useContext)(Layers);
return create ? (0, react.useMemo)(() => ambient.push(), [ambient]) : ambient;
};
function Consumer(props) {
return props.for.get((i) => props.children(i));
}
function Provider(props) {
const context = _expressive_state.Context.use(true);
(0, react.useEffect)(() => () => context.pop(), [context]);
context.use(props.for, (state) => {
if (props.forEach) {
const cleanup = props.forEach(state);
if (cleanup) state.set(cleanup, null);
}
});
return provide(context, props.children, props.fallback, props.name);
}
function provide(context, children, fallback, name) {
if (fallback !== void 0) children = (0, react.createElement)(react.Suspense, {
fallback,
name
}, children);
return (0, react.createElement)(Layers.Provider, {
key: context.id,
value: context,
children
});
}
//#endregion
Object.defineProperty(exports, 'Consumer', {
enumerable: true,
get: function () {
return Consumer;
}
});
Object.defineProperty(exports, 'Layers', {
enumerable: true,
get: function () {
return Layers;
}
});
Object.defineProperty(exports, 'Provider', {
enumerable: true,
get: function () {
return Provider;
}
});
Object.defineProperty(exports, 'provide', {
enumerable: true,
get: function () {
return provide;
}
});
//# sourceMappingURL=context-DEag_HVs.js.map