nitropage
Version:
A free and open source, extensible visual page builder based on SolidStart.
44 lines (37 loc) • 1.09 kB
text/typescript
import { isEqual, uniq } from "es-toolkit";
import { ElementDataRecord } from "../../../../../types";
import { logger } from "../../log";
import { DEBUG_PAGE_UPDATE } from "../../util";
export const omitDisabledElementData = function (
elementData: ElementDataRecord,
) {
const filteredData: ElementDataRecord = {};
for (const [key, data] of Object.entries(elementData)) {
if (!data.override) {
continue;
}
filteredData[key] = data;
}
return filteredData;
};
export const mergeElementData = (
target: ElementDataRecord = {},
next: ElementDataRecord,
prev: ElementDataRecord = {},
logTag: string,
) => {
let dirty = false;
const result: ElementDataRecord = {};
const keys = uniq([...Object.keys(next), ...Object.keys(prev)]);
for (const key of keys) {
const nextItem = next[key];
if (isEqual(nextItem, prev[key])) {
result[key] = target[key];
continue;
}
dirty = true;
if (DEBUG_PAGE_UPDATE) logger.info(`Update ${logTag} element data`, key);
result[key] = nextItem;
}
return [result, dirty] as const;
};