@prismicio/types-internal
Version:
Prismic types for Custom Types and Prismic Data
119 lines (118 loc) • 4.37 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.traverseSharedSlice = exports.traverseVariation = exports.isDynamicSharedSlice = exports.isStaticSharedSlice = exports.SharedSlice = exports.SharedSliceType = exports.Variation = void 0;
const tslib_1 = require("tslib");
const t = (0, tslib_1.__importStar)(require("io-ts"));
const withFallback_1 = require("io-ts-types/lib/withFallback");
const common_1 = require("../../../common");
const Group_1 = require("../Group");
const NestableWidget_1 = require("../nestable/NestableWidget");
const SlicePrimaryWidget_1 = require("./SlicePrimaryWidget");
const IMAGE_PLACEHOLDER_URL = "https://images.prismic.io/slice-machine/621a5ec4-0387-4bc5-9860-2dd46cbc07cd_default_ss.png?auto=compress,format";
exports.Variation = t.exact(t.intersection([
t.type({
id: t.string,
name: t.string,
description: t.string,
imageUrl: (0, withFallback_1.withFallback)(t.string, IMAGE_PLACEHOLDER_URL),
docURL: t.string,
version: t.string,
}),
t.partial({
display: t.string,
primary: t.record(common_1.WidgetKey, SlicePrimaryWidget_1.SlicePrimaryWidget),
items: t.record(common_1.WidgetKey, NestableWidget_1.NestableWidget),
}),
]));
exports.SharedSliceType = "SharedSlice";
const LegacyPath = t.string;
const VariationId = t.string;
exports.SharedSlice = t.exact(t.intersection([
t.type({
id: t.string,
type: t.literal(exports.SharedSliceType),
name: t.string,
variations: t.readonlyArray(exports.Variation),
}),
t.partial({
description: t.string,
legacyPaths: t.record(LegacyPath, VariationId),
}),
]));
function isStaticSharedSlice(slice) {
return slice.type === "SharedSlice";
}
exports.isStaticSharedSlice = isStaticSharedSlice;
function isDynamicSharedSlice(slice) {
return slice.type === "SharedSlice";
}
exports.isDynamicSharedSlice = isDynamicSharedSlice;
function traverseVariation(args) {
var _a, _b;
const { path: prevPath, variation, onField } = args;
let primary;
for (const [key, prevField] of Object.entries((_a = variation.primary) !== null && _a !== void 0 ? _a : {})) {
const path = [...prevPath, "primary", key];
let field;
switch (prevField.type) {
case "Group":
field = (0, Group_1.traverseGroup)({
path,
group: prevField,
onField: onField,
});
break;
default:
field = prevField;
break;
}
const newField = onField({ path, key, field });
if (field !== newField) {
if (!primary)
primary = { ...variation.primary };
primary[key] = newField;
}
}
let items;
for (const [key, prevField] of Object.entries((_b = variation.items) !== null && _b !== void 0 ? _b : {})) {
const path = [...prevPath, "items", key];
const newField = onField({
path,
key,
field: prevField,
});
if (prevField !== newField) {
if (!items)
items = { ...variation.items };
items[key] = newField;
}
}
// returns the traversed model instead of a new one if it didn't change
return primary || items
? { ...variation, ...(primary && { primary }), ...(items && { items }) }
: variation;
}
exports.traverseVariation = traverseVariation;
function traverseSharedSlice(args) {
const { path: prevPath, slice, onField } = args;
let variations;
for (let i = 0; i < slice.variations.length; i++) {
const variation = slice.variations[i];
if (!variation)
continue;
const path = [...prevPath, variation.id];
const newVariation = traverseVariation({
path,
variation,
onField,
});
if (newVariation !== variation) {
if (!variations)
variations = [...slice.variations];
variations[i] = newVariation;
}
}
// returns the traversed model instead of a new one if it didn't change
return variations ? { ...slice, variations } : slice;
}
exports.traverseSharedSlice = traverseSharedSlice;