UNPKG

@mic-rexjs/usecases-react

Version:

React-based solution for use usecases of Clean Architecture

219 lines (218 loc) 8.79 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.valueUseCase = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _usecases = require("@mic-rexjs/usecases"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var valueUseCase = exports.valueUseCase = (0, _usecases.createUseCase)(function () { return function () { var entityReducers = (0, _usecases.entityUseCase)(); var _utilsUseCase = (0, _usecases.utilsUseCase)(), createKey = _utilsUseCase.createKey; var prevKeyIndex = createKey(); var isObjectValue = function isObjectValue(entity) { if ((0, _typeof2["default"])(entity) !== 'object' || entity === null) { return false; } return true; }; var hasField = function hasField(entity, field) { var isObject = isObjectValue(entity); if (isObject) { return Object.hasOwn(entity, field); } return false; }; var isValueChanged = function isValueChanged(entity, value) { return entity !== value; }; var matchValue = function matchValue(entity, value, onMatchPropertyFailed) { if (entity === value) { return true; } var isObject1 = isObjectValue(entity); var isObject2 = isObjectValue(value); var keys1 = isObject1 ? Object.keys(entity) : []; var keys2 = isObject2 ? Object.keys(value) : []; var hasCallback = typeof onMatchPropertyFailed === 'function'; if (!isObject1 && !isObject2) { return false; } var allMatched = true; var length1 = keys1.length; var keys = [].concat((0, _toConsumableArray2["default"])(keys1), (0, _toConsumableArray2["default"])(keys2)); for (var i = 0, length = keys.length; i < length; i++) { var key = keys[i]; var isInKey1 = keys1.includes(key); var isFromKeys2 = i >= length1; var isUsed = isFromKeys2 && isInKey1; if (isUsed) { continue; } var hasField1 = hasField(entity, key); var hasField2 = hasField(value, key); var value1 = hasField1 ? entity[key] : void 0; var value2 = hasField2 ? value[key] : void 0; var matched = value1 === value2; if (hasField1 && hasField2 && matched) { continue; } allMatched = false; if (hasCallback) { onMatchPropertyFailed(key, value2, value1); continue; } break; } return allMatched; }; var matchProperty = function matchProperty(entity, value, fieldPath, onFailed) { var allMatched = true; var currentFieldPath = fieldPath; var list = [{ fieldPaths: [], newEntity: value, newValue: value, oldEntity: entity, oldValue: entity }]; do { var _list$shift = list.shift(), oldValue = _list$shift.oldValue, newValue = _list$shift.newValue, fieldPaths = _list$shift.fieldPaths; var _ref = currentFieldPath.match(/^([^.]+)\.(.+)$/) || [], _ref2 = (0, _slicedToArray2["default"])(_ref, 3), _ref2$ = _ref2[1], key = _ref2$ === void 0 ? currentFieldPath : _ref2$, _ref2$2 = _ref2[2], subFieldPath = _ref2$2 === void 0 ? '' : _ref2$2; var hasOldField = hasField(oldValue, key); var hasNewField = hasField(newValue, key); if (hasOldField || hasNewField) { var _ref3 = hasOldField ? [oldValue[key]] : [], _ref4 = (0, _slicedToArray2["default"])(_ref3, 1), oldSubValue = _ref4[0]; var _ref5 = hasNewField ? [newValue[key]] : [], _ref6 = (0, _slicedToArray2["default"])(_ref5, 1), newSubValue = _ref6[0]; var result = { fieldPaths: [].concat((0, _toConsumableArray2["default"])(fieldPaths), [key]), newEntity: value, newValue: newSubValue, oldEntity: entity, oldValue: oldSubValue }; if (subFieldPath) { currentFieldPath = subFieldPath; list.push(result); continue; } if (newSubValue === oldSubValue) { continue; } allMatched = false; onFailed === null || onFailed === void 0 || onFailed(result); continue; } if (/^\d+^/.test(key)) { continue; } var oldArray = Array.isArray(oldValue) ? oldValue : []; var newArray = Array.isArray(newValue) ? newValue : []; var oldLength = oldArray.length; var newLength = newArray.length; var length = Math.max(oldLength, newLength); for (var i = 0; i < length; i++) { list.push({ fieldPaths: [].concat((0, _toConsumableArray2["default"])(fieldPaths), ["".concat(i)]), newEntity: value, newValue: newArray[i], oldEntity: entity, oldValue: oldArray[i] }); } } while (list.length > 0); return allMatched; }; var recordValue = /*#__PURE__*/_regenerator["default"].mark(function recordValue(entity, value) { var changed; return _regenerator["default"].wrap(function (_context) { while (1) switch (_context.prev = _context.next) { case 0: changed = isValueChanged(entity, value); if (changed) { _context.next = 1; break; } return _context.abrupt("return", false); case 1: _context.next = 2; return value; case 2: return _context.abrupt("return", true); case 3: case "end": return _context.stop(); } }, recordValue); }); var recordValueMatch = /*#__PURE__*/_regenerator["default"].mark(function recordValueMatch(entity, value) { var matched; return _regenerator["default"].wrap(function (_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: matched = matchValue(entity, value); if (!matched) { _context2.next = 1; break; } return _context2.abrupt("return", true); case 1: _context2.next = 2; return value; case 2: return _context2.abrupt("return", false); case 3: case "end": return _context2.stop(); } }, recordValueMatch); }); var recordValueMatchWith = /*#__PURE__*/_regenerator["default"].mark(function recordValueMatchWith(entity, value, key) { var matched; return _regenerator["default"].wrap(function (_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: return _context3.delegateYield(recordValueMatch(entity, value), "t0", 1); case 1: matched = _context3.t0; if (!matched) { prevKeyIndex = key !== null && key !== void 0 ? key : createKey(); } return _context3.abrupt("return", prevKeyIndex); case 2: case "end": return _context3.stop(); } }, recordValueMatchWith); }); return _objectSpread(_objectSpread({}, entityReducers), {}, { isObjectValue: isObjectValue, isValueChanged: isValueChanged, matchValue: matchValue, matchProperty: matchProperty, recordValue: recordValue, recordValueMatch: recordValueMatch, recordValueMatchWith: recordValueMatchWith }); }; });