react-obsidian
Version:
Dependency injection framework for React and React Native applications
32 lines • 1.72 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const react_1 = __importDefault(require("react"));
const hoist_non_react_statics_1 = __importDefault(require("hoist-non-react-statics"));
const PropsInjector_1 = __importDefault(require("./PropsInjector"));
const useGraph_1 = __importDefault(require("./useGraph"));
const React_1 = require("../../utils/React");
const graphContext_1 = require("./graphContext");
const useInjectionToken_1 = require("./useInjectionToken");
class ComponentInjector {
inject(Target, Graph) {
const Wrapped = this.wrapComponent(Target, Graph);
(0, hoist_non_react_statics_1.default)(Wrapped, Target);
return Wrapped;
}
wrapComponent(InjectionCandidate, Graph) {
const isMemoized = (0, React_1.isMemoizedComponent)(InjectionCandidate);
const Target = isMemoized ? InjectionCandidate.type : InjectionCandidate;
const compare = isMemoized ? InjectionCandidate.compare : undefined;
return (0, React_1.genericMemo)((passedProps) => {
const injectionToken = (0, useInjectionToken_1.useInjectionToken)(Graph);
const graph = (0, useGraph_1.default)(Graph, Target, passedProps, injectionToken);
const proxiedProps = new PropsInjector_1.default(graph).inject(passedProps);
return (react_1.default.createElement(graphContext_1.GraphContext.Provider, { value: { injectionToken } }, Target(proxiedProps)));
}, compare);
}
}
exports.default = ComponentInjector;
//# sourceMappingURL=ComponentInjector.js.map
;