@gravity-ui/data-source
Version:
A wrapper around data fetching
88 lines (87 loc) • 2.96 kB
JavaScript
;
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