@prismicio/types-internal
Version:
Prismic types for Custom Types and Prismic Data
67 lines (66 loc) • 2.41 kB
JavaScript
;
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;