@mic-rexjs/usecases-react
Version:
React-based solution for use usecases of Clean Architecture
219 lines (218 loc) • 8.79 kB
JavaScript
;
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
});
};
});