devextreme-react
Version:
DevExtreme React UI and Visualization Components
108 lines (106 loc) • 4.64 kB
JavaScript
/*!
* devextreme-react
* Version: 25.1.5
* Build date: Wed Sep 03 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file in the root of the project for details.
*
* https://github.com/DevExpress/devextreme-react
*/
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.compareValues = exports.getChanges = void 0;
const config_node_1 = require("./config-node");
const tree_1 = require("./tree");
const utils_1 = require("./utils");
function compareValues(value1, value2) {
return value1 === value2;
}
exports.compareValues = compareValues;
function compareTemplates(current, currentFullName, prev, changesAccum) {
const currentTemplatesOptions = {};
const currentTemplates = {};
const prevTemplatesOptions = {};
const prevTemplates = {};
(0, tree_1.buildTemplates)(current, currentTemplatesOptions, currentTemplates);
(0, tree_1.buildTemplates)(prev, prevTemplatesOptions, prevTemplates);
changesAccum.addRemovedValues(currentTemplatesOptions, prevTemplatesOptions, currentFullName);
// TODO: support switching to default templates
// appendRemovedValues(currentTemplates, prevTemplates, "", changesAccum.templates);
Object.keys(currentTemplatesOptions).forEach((key) => {
if (compareValues(currentTemplatesOptions[key], prevTemplatesOptions[key])) {
return;
}
changesAccum.options[(0, utils_1.mergeNameParts)(currentFullName, key)] = currentTemplatesOptions[key];
});
Object.keys(currentTemplates).forEach((key) => {
const currentTemplate = currentTemplates[key];
const prevTemplate = prevTemplates[key];
if (prevTemplate && compareValues(currentTemplate.content, prevTemplate.content)) {
return;
}
changesAccum.templates[key] = currentTemplate;
});
}
function compare(current, prev, changesAccum) {
const fullName = (0, config_node_1.buildNodeFullName)(current);
if (!prev) {
changesAccum.options[fullName] = (0, tree_1.buildNode)(current, changesAccum.templates, true);
return;
}
changesAccum.addRemovedValues(current.options, prev.options, fullName);
changesAccum.addRemovedValues(current.configCollections, prev.configCollections, fullName);
changesAccum.addRemovedValues(current.configs, prev.configs, fullName);
// eslint-disable-next-line @typescript-eslint/no-use-before-define
compareCollections(current, fullName, prev, changesAccum);
Object.keys(current.configs).forEach((key) => {
compare(current.configs[key], prev.configs[key], changesAccum);
});
Object.keys(current.options).forEach((key) => {
if (compareValues(current.options[key], prev.options[key])) {
return;
}
changesAccum.options[(0, utils_1.mergeNameParts)(fullName, key)] = current.options[key];
});
compareTemplates(current, fullName, prev, changesAccum);
}
function appendRemovedValues(current, prev, path, changesAccum) {
const removedKeys = Object.keys(prev).filter((key) => !Object.keys(current).includes(key));
removedKeys.forEach((key) => {
changesAccum.push((0, utils_1.mergeNameParts)(path, key));
});
}
function getChanges(current, prev) {
const changesAccum = {
options: {},
removedOptions: [],
templates: {},
addRemovedValues(currentOptions, prevOptions, path) {
appendRemovedValues(currentOptions, prevOptions, path, this.removedOptions);
},
};
compare(current, prev, changesAccum);
return changesAccum;
}
exports.getChanges = getChanges;
function compareCollections(current, currentFullName, prev, changesAccum) {
Object.keys(current.configCollections).forEach((key) => {
const currentCollection = current.configCollections[key];
const prevCollection = prev.configCollections[key] || [];
if (!currentCollection || currentCollection.length !== prevCollection.length) {
const updatedCollection = [];
currentCollection.forEach((item) => {
const config = (0, tree_1.buildNode)(item, changesAccum.templates, true);
updatedCollection.push(config);
});
changesAccum.options[(0, utils_1.mergeNameParts)(currentFullName, key)] = updatedCollection;
return;
}
for (let i = 0; i < currentCollection.length; i += 1) {
compare(currentCollection[i], prevCollection[i], changesAccum);
}
});
}