@expressive/react
Version:
Use classes to define state in React!
98 lines (95 loc) • 3.11 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
Consumer: () => Consumer,
Context: () => import_mvc.Context,
Fragment: () => import_react3.Fragment,
Model: () => import_mvc2.Model,
Observable: () => import_mvc2.Observable,
Provider: () => Provider,
createElement: () => import_react3.createElement,
default: () => import_mvc2.Model,
get: () => import_mvc2.get,
has: () => import_mvc2.has,
ref: () => import_mvc2.ref,
set: () => import_mvc2.set,
use: () => import_mvc2.use
});
module.exports = __toCommonJS(src_exports);
var import_react2 = require("react");
var import_adapter = require("./adapter");
// src/context.ts
var import_mvc = require("@expressive/mvc");
var import_react = require("react");
var Lookup = (0, import_react.createContext)(new import_mvc.Context());
import_mvc.Context.use = (create) => {
const ambient = (0, import_react.useContext)(Lookup);
return create ? (0, import_react.useMemo)(() => ambient.push(), []) : ambient;
};
function Consumer(props) {
return props.for.get((i) => props.children(i));
}
function Provider(props) {
const context = import_mvc.Context.use(true);
(0, import_react.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 (0, import_react.createElement)(Lookup.Provider, {
key: context.id,
value: context,
children
});
}
// src/index.ts
var import_mvc2 = require("@expressive/mvc");
var import_react3 = require("react");
import_adapter.Pragma.useContext = () => import_mvc.Context.use();
import_adapter.Pragma.useLifecycle = (callback) => (0, import_react2.useEffect)(() => callback(), []);
import_adapter.Pragma.useFactory = (factory) => {
const state = (0, import_react2.useState)(() => factory(() => {
state[1]((x) => x.bind(null));
}));
return state[0];
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
Consumer,
Context,
Fragment,
Model,
Observable,
Provider,
createElement,
get,
has,
ref,
set,
use
});
//# sourceMappingURL=index.js.map