UNPKG

@prismicio/types-internal

Version:
67 lines (66 loc) 2.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.traverseSection = exports.Sections = exports.DynamicSection = exports.StaticSection = exports.sectionReader = void 0; const tslib_1 = require("tslib"); const t = (0, tslib_1.__importStar)(require("io-ts")); const common_1 = require("../common"); const widgets_1 = require("./widgets"); const Widget_1 = require("./widgets/Widget"); function sectionReader(codec) { return t.record(common_1.WidgetKey, codec); // WidgetId -> Widget Data } exports.sectionReader = sectionReader; exports.StaticSection = sectionReader(Widget_1.StaticWidget); exports.DynamicSection = sectionReader(Widget_1.DynamicWidget); exports.Sections = { toStatic(dynamic, sharedSlices) { const section = Object.entries(dynamic).reduce((acc, [widgetKey, widget]) => { return { ...acc, [widgetKey]: Widget_1.Widgets.toStatic(widget, sharedSlices) }; }, {}); return section; }, }; function traverseSection(args) { const { path: prevPath, section: prevSection, onField } = args; let section; for (const [key, prevModel] of Object.entries(prevSection)) { const path = [...prevPath, key]; let model; switch (prevModel.type) { case "Choice": case "Slices": model = (0, widgets_1.traverseSlices)({ path, slices: prevModel, onField: onField, }); break; case "Group": model = onField({ path, key, field: (0, widgets_1.traverseGroup)({ path, group: prevModel, onField: onField, }), }); break; default: model = onField({ path, key, field: prevModel, }); break; } if (model !== prevModel) { if (!section) section = { ...prevSection }; section[key] = model; } } // returns the traversed model instead of a new one if it didn't change return section !== null && section !== void 0 ? section : prevSection; } exports.traverseSection = traverseSection;