ditox-react
Version:
Dependency injection container for React.js
39 lines • 1.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useOptionalDependency = exports.useDependency = exports.useDependencyContainer = void 0;
const react_1 = require("react");
const DependencyContainer_1 = require("./DependencyContainer");
/**
* @internal
*/
function useDependencyContainer(mode) {
const container = (0, react_1.useContext)(DependencyContainer_1.DependencyContainerContext);
if (!container && mode === 'strict') {
throw new Error('Container is not provided by DependencyContainer component');
}
return container;
}
exports.useDependencyContainer = useDependencyContainer;
/**
* @category Hook
*
* Returns a dependency by token, or fails with an error.
*/
function useDependency(token) {
const container = useDependencyContainer('strict');
const value = (0, react_1.useMemo)(() => container.resolve(token), [container, token]);
return value;
}
exports.useDependency = useDependency;
/**
* @category Hook
*
* Returns a dependency by token, or `undefined` in case the dependency is not provided.
*/
function useOptionalDependency(token) {
const container = useDependencyContainer();
const value = (0, react_1.useMemo)(() => container === null || container === void 0 ? void 0 : container.get(token), [container, token]);
return value;
}
exports.useOptionalDependency = useOptionalDependency;
//# sourceMappingURL=hooks.js.map