UNPKG

@mic-rexjs/usecases-react

Version:

React-based solution for use usecases of Clean Architecture

75 lines (74 loc) 2.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.contextUseCase = void 0; var _usecases = require("@mic-rexjs/usecases"); var _ArgumentTypes = require("../../enums/ArgumentTypes"); var _react = require("react"); var _Statuses = require("../../enums/Statuses"); var contextUseCase = exports.contextUseCase = (0, _usecases.createUseCase)(function () { var referenceMap = new Map(); var defaultUseCaseContext = (0, _react.createContext)(null); return function () { var createContextValue = function createContextValue(store, reducers, statuses) { if ((statuses & _Statuses.Statuses.EntityEnabled) === _Statuses.Statuses.EntityEnabled) { return { store: store, reducers: reducers, statuses: statuses }; } return { reducers: reducers, statuses: statuses }; }; var registerUseCase = function registerUseCase(usecase, argumentTypes) { if (referenceMap.has(usecase)) { var reference = referenceMap.get(usecase); var value = reference.value, times = reference.times; referenceMap.set(usecase, { value: value, times: times + 1 }); return value; } if ((argumentTypes & _ArgumentTypes.ArgumentTypes.Entity) !== _ArgumentTypes.ArgumentTypes.Entity) { return defaultUseCaseContext; } var context = (0, _react.createContext)(null); referenceMap.set(usecase, { value: context, times: 1 }); return context; }; var unregisterUseCase = function unregisterUseCase(usecase, argumentTypes) { if ((argumentTypes & _ArgumentTypes.ArgumentTypes.Entity) !== _ArgumentTypes.ArgumentTypes.Entity) { return false; } if (!referenceMap.has(usecase)) { return false; } var reference = referenceMap.get(usecase); var value = reference.value, times = reference.times; if (times === 1) { referenceMap["delete"](usecase); } else { referenceMap.set(usecase, { value: value, times: times - 1 }); } return true; }; return { createContextValue: createContextValue, registerUseCase: registerUseCase, unregisterUseCase: unregisterUseCase }; }; });