UNPKG

@gravity-ui/data-source

Version:
88 lines (87 loc) 2.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkMutationObjectsKeys = void 0; var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _core = require("@normy/core"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } var hasFewerKeys = function hasFewerKeys(mutation, existing) { var mutationKeys = Object.keys(mutation); var existingKeys = Object.keys(existing); if (mutationKeys.length >= existingKeys.length) { return false; } for (var _i = 0, _mutationKeys = mutationKeys; _i < _mutationKeys.length; _i++) { var key = _mutationKeys[_i]; if (!existingKeys.includes(key)) { return true; } } return true; }; var extractNormalizableObjects = function extractNormalizableObjects(data, getNormalizationObjectKey) { var objects = []; function extract(item) { if (Array.isArray(item)) { item.forEach(extract); } else if (item !== null && (0, _typeof2.default)(item) === 'object' && !(item instanceof Date)) { var obj = item; if (getNormalizationObjectKey(obj)) { objects.push(obj); } } } extract(data); return objects; }; var checkMutationObjectsKeys = exports.checkMutationObjectsKeys = function checkMutationObjectsKeys(mutationData, normalizer, config) { var getNormalizationObjectKey = (config === null || config === void 0 ? void 0 : config.getNormalizationObjectKey) || function (obj) { return obj.id; }; var normalizedState = normalizer.getNormalizedData(); var mutationObjects = extractNormalizableObjects(mutationData, getNormalizationObjectKey); if (mutationObjects.length === 0) { return { needsRefetch: false, details: [] }; } var details = []; var _iterator = (0, _createForOfIteratorHelper2.default)(mutationObjects), _step; try { var _loop = function _loop() { var obj = _step.value; var objectKey = getNormalizationObjectKey(obj); if (!objectKey) { return 1; // continue } var normalizedKey = (0, _core.getId)(objectKey); var existingObject = normalizedState.objects[normalizedKey]; if (existingObject && hasFewerKeys(obj, existingObject)) { var mutationKeys = Object.keys(obj); var existingKeys = Object.keys(existingObject); details.push({ id: objectKey, missingKeys: existingKeys.filter(function (k) { return !mutationKeys.includes(k); }) }); } }; for (_iterator.s(); !(_step = _iterator.n()).done;) { if (_loop()) continue; } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return { needsRefetch: details.length > 0, details: details }; }; // #sourceMappingURL=checkMutationObjectsKeys.js.map