@gravity-ui/data-source
Version:
A wrapper around data fetching
81 lines • 2.63 kB
JavaScript
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