import type { GroupItemContent } from "../content/group" import type { SharedSliceContent } from "../content/slice" import type { CompositeSliceItemContent, LegacySliceItemContent, SharedSliceItemContent, } from "../content/slices" import type { SharedSliceVariationContentModel } from "../model/slice" export const legacyToShared = ( content: LegacySliceItemContent, model: SharedSliceVariationContentModel, ): SharedSliceItemContent => { const sliceUUID = content.key.split("$")[1] const primary: SharedSliceContent["primary"] = {} const items: SharedSliceContent["items"] = [] if (content.widget.__TYPE__ === "GroupContentType") { // Group content for (const item of content.widget.value) { const value: GroupItemContent["value"] = [] for (const [key, nestable] of item.value) { if (model.fields.items?.[key]) { value.push([key, nestable]) } } items.push({ ...item, value }) } } else if (model.fields.primary?.[content.name]) { // Nestable content primary[content.name] = content.widget } return { key: `${model.sliceName}$${sliceUUID}`, name: model.sliceName, maybeLabel: content.maybeLabel, widget: { __TYPE__: "SharedSliceContent", variation: model.variationID, primary, items, }, } } export const compositeToShared = ( content: CompositeSliceItemContent, model: SharedSliceVariationContentModel, ): SharedSliceItemContent => { const sliceUUID = content.key.split("$")[1] const primary: SharedSliceContent["primary"] = {} for (const [key, value] of Object.entries(content.widget.nonRepeat)) { if (model.fields.primary?.[key]) { primary[key] = value } } const items: SharedSliceContent["items"] = [] for (const item of content.widget.repeat) { const value: GroupItemContent["value"] = [] for (const [key, nestable] of item.value) { if (model.fields.items?.[key]) { value.push([key, nestable]) } } items.push({ ...item, value }) } return { key: `${model.sliceName}$${sliceUUID}`, name: model.sliceName, maybeLabel: content.maybeLabel, widget: { __TYPE__: "SharedSliceContent", variation: model.variationID, primary, items, }, } }