UNPKG

@gravity-ui/data-source

Version:
81 lines 2.63 kB
import _createForOfIteratorHelper from "@babel/runtime/helpers/createForOfIteratorHelper"; import _typeof from "@babel/runtime/helpers/typeof"; import { getId } from '@normy/core'; 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 && _typeof(item) === 'object' && !(item instanceof Date)) { var obj = item; if (getNormalizationObjectKey(obj)) { objects.push(obj); } } } extract(data); return objects; }; export var 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 = _createForOfIteratorHelper(mutationObjects), _step; try { var _loop = function _loop() { var obj = _step.value; var objectKey = getNormalizationObjectKey(obj); if (!objectKey) { return 1; // continue } var normalizedKey = 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