UNPKG

react-obsidian

Version:

Dependency injection framework for React and React Native applications

32 lines 1.72 kB
"use strict"; 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