@mic-rexjs/usecases-react
Version:
React-based solution for use usecases of Clean Architecture
84 lines (83 loc) • 2.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.contextUseCase = void 0;
var _usecases = require("@mic-rexjs/usecases");
var _react = require("react");
var _ArgumentTypes = require("../../enums/ArgumentTypes");
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 getUseCaseContext = function getUseCaseContext(usecase) {
if (!referenceMap.has(usecase)) {
return defaultUseCaseContext;
}
var _referenceMap$get = referenceMap.get(usecase),
value = _referenceMap$get.value;
return value;
};
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,
getUseCaseContext: getUseCaseContext,
registerUseCase: registerUseCase,
unregisterUseCase: unregisterUseCase
};
};
});