UNPKG

@prismicio/types-internal

Version:
114 lines (113 loc) 5.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VariationComparator = void 0; const utils_1 = require("../../utils"); const Group_1 = require("../widgets/Group"); const Changes_1 = require("./Changes"); function compareVariationMeta(variationA, variationB) { const zippedVariations = utils_1.Objects.zipObjects(variationA, variationB); return Object.entries(zippedVariations).reduce((acc, [key, value]) => { if (key === `primary` || key === "items") return acc; if ((value === null || value === void 0 ? void 0 : value.left) === (value === null || value === void 0 ? void 0 : value.right)) return acc; return { ...acc, [key]: value === null || value === void 0 ? void 0 : value.right }; }, {}); } function compareWidgets(widgetsA, widgetsB) { const zippedWidgets = utils_1.Objects.zipObjects(widgetsA, widgetsB); const diffWidgets = Object.entries(zippedWidgets).reduce((acc, [widgetKey, widgetValue]) => { if (JSON.stringify(widgetValue === null || widgetValue === void 0 ? void 0 : widgetValue.left) === JSON.stringify(widgetValue === null || widgetValue === void 0 ? void 0 : widgetValue.right)) return acc; const changes = (() => { var _a, _b, _c, _d, _e, _f, _g; if (!(widgetValue === null || widgetValue === void 0 ? void 0 : widgetValue.left) && !(widgetValue === null || widgetValue === void 0 ? void 0 : widgetValue.right)) return; if ((widgetValue === null || widgetValue === void 0 ? void 0 : widgetValue.left) && !widgetValue.right) { return { op: Changes_1.DiffOperation.Removed, }; } if (!(widgetValue === null || widgetValue === void 0 ? void 0 : widgetValue.left) && (widgetValue === null || widgetValue === void 0 ? void 0 : widgetValue.right)) { if (((_a = widgetValue.right) === null || _a === void 0 ? void 0 : _a.type) === Group_1.GroupFieldType) { const group = { ...widgetValue.right, config: { ...widgetValue.right.config, fields: {}, }, }; // On added groups, this basically marks all fields in the group as added group.config.fields = compareWidgets(undefined, (_b = widgetValue.right.config) === null || _b === void 0 ? void 0 : _b.fields) || {}; return { op: Changes_1.DiffOperation.Added, value: group, }; } return { op: Changes_1.DiffOperation.Added, value: widgetValue.right, }; } if (((_c = widgetValue.right) === null || _c === void 0 ? void 0 : _c.type) === Group_1.GroupFieldType) { const group = { ...widgetValue.right, config: { ...widgetValue.right.config, fields: {}, }, }; // On updated groups, this also compares the fields inside the group group.config.fields = compareWidgets(((_d = widgetValue.left) === null || _d === void 0 ? void 0 : _d.type) === Group_1.GroupFieldType ? (_f = (_e = widgetValue.left) === null || _e === void 0 ? void 0 : _e.config) === null || _f === void 0 ? void 0 : _f.fields : undefined, (_g = widgetValue.right.config) === null || _g === void 0 ? void 0 : _g.fields) || {}; return { op: Changes_1.DiffOperation.Updated, value: group, }; } return { op: Changes_1.DiffOperation.Updated, value: widgetValue.right, }; })(); if (!changes) return acc; return { ...acc, [widgetKey]: changes, }; }, {}); return utils_1.Objects.isNotEmpty(diffWidgets) ? diffWidgets : undefined; } exports.VariationComparator = { compare(variationA, variationB) { if (variationA && !variationB) return { op: Changes_1.DiffOperation.Removed, }; if (!variationA && variationB) { return { op: Changes_1.DiffOperation.Added, value: variationB, }; } const diffMeta = compareVariationMeta(variationA, variationB); const diffPrimary = compareWidgets(variationA === null || variationA === void 0 ? void 0 : variationA.primary, variationB === null || variationB === void 0 ? void 0 : variationB.primary); const diffItems = compareWidgets(variationA === null || variationA === void 0 ? void 0 : variationA.items, variationB === null || variationB === void 0 ? void 0 : variationB.items); const diffVariation = { ...diffMeta, ...(diffPrimary ? { primary: diffPrimary } : {}), ...(diffItems ? { items: diffItems } : {}), }; if (utils_1.Objects.isNotEmpty(diffVariation)) { return { op: Changes_1.DiffOperation.Updated, value: diffVariation, }; } return undefined; }, };