@bareblends/vsf-prismic
Version:
Prismic CMS integration with Vue Storefront
55 lines (52 loc) • 1.38 kB
text/typescript
import { RenderComponent } from '@vue-storefront/core'
import { Component } from '../types'
const buildImageObject = (
items: { image: string }[],
actions: { replace: boolean } = { replace: false }
) => {
return items.map((item: { image }) => {
const { replace } = actions
if (item.image) {
const image = item.image
const itemObject = replace
? { ...item, url: image }
: {
...item,
image: {
url: image
}
}
if (replace) { delete itemObject.image }
return itemObject
}
return item
})
}
export const extractComponents = (
contentData: {} | [] = []
): RenderComponent[] => {
let content = contentData
if (!Array.isArray(contentData)) { content = [content] }
return (content as []).map((component: Component): {
componentName: string
props: any
} => {
const props = Object.keys(component).reduce(
(res: any, key: string) => ({
...res,
[key]: component[key]
}),
{}
)
if (props.items && Array.isArray(props.items)) {
props.items = buildImageObject(props.items)
}
if (props.images && Array.isArray(props.images)) {
props.images = buildImageObject(props.images, { replace: true })
}
return {
componentName: component.component || 'CustomComponent',
props
}
})
}