UNPKG

@bareblends/vsf-prismic

Version:

Prismic CMS integration with Vue Storefront

123 lines (113 loc) 4.49 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var tslib = require('tslib'); var PrismicDOM = require('prismic-dom'); var core = require('@vue-storefront/core'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var PrismicDOM__default = /*#__PURE__*/_interopDefaultLegacy(PrismicDOM); var getType = function (block) { if (!block) { return undefined; } if (typeof block === 'string' || typeof block === 'number') { return 'text'; } if (Array.isArray(block)) { return 'html'; } if (block.dimensions && block.url) { return 'image'; } if (block.embed_url) { return 'embed'; } if (block.link_type) { return block.kind === 'image' ? 'image' : 'link'; } return undefined; }; var getElement = function (block) { if (typeof block === 'object') { return block; } return [{ type: 'paragraph', text: block, spans: [] }]; }; var transformBlock = function (block) { var blockType = getType(block); var element = getElement(block); switch (blockType) { case 'html': return PrismicDOM__default['default'].RichText.asHtml(element.map(function (elem) { return (tslib.__assign(tslib.__assign({}, elem), { type: elem.type || 'paragraph', text: elem.text || '', spans: Array.isArray(elem.spans) ? elem.spans : [] })); })); case 'image': var height = element.height, width = element.width, url = element.url, alt = element.alt, name_1 = element.name; return "<img src=\"" + (url || '') + "\" height=\"" + (height || '') + "\" width=\"" + (width || '') + "\" alt=\"" + (alt || name_1 || '') + "\" />"; case 'text': return PrismicDOM__default['default'].RichText.asText(element); case 'embed': return element.html || ''; case 'link': return PrismicDOM__default['default'].Link.url(element, function (doc) { return "<a href=\"" + doc.url + "\">" + doc.url + "</a>"; }); default: return ''; } }; var search = function (context, params) { return tslib.__awaiter(void 0, void 0, void 0, function () { return tslib.__generator(this, function (_a) { return [2 /*return*/, context.$pris.api.getContent(params)]; }); }); }; var useContent = core.useContentFactory({ search: search }); var buildImageObject = function (items, actions) { if (actions === void 0) { actions = { replace: false }; } return items.map(function (item) { var replace = actions.replace; if (item.image) { var image = item.image; var itemObject = replace ? tslib.__assign(tslib.__assign({}, item), { url: image }) : tslib.__assign(tslib.__assign({}, item), { image: { url: image } }); if (replace) { delete itemObject.image; } return itemObject; } return item; }); }; var extractComponents = function (contentData) { if (contentData === void 0) { contentData = []; } var content = contentData; if (!Array.isArray(contentData)) { content = [content]; } return content.map(function (component) { var props = Object.keys(component).reduce(function (res, key) { var _a; return (tslib.__assign(tslib.__assign({}, res), (_a = {}, _a[key] = component[key], _a))); }, {}); 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: props }; }); }; var getContent = function (prismicContent) { return (prismicContent === null || prismicContent === void 0 ? void 0 : prismicContent.results[0]) || []; }; var contentGetters = { getContent: getContent }; exports.contentGetters = contentGetters; exports.extractComponents = extractComponents; exports.transformBlock = transformBlock; exports.useContent = useContent; //# sourceMappingURL=index.cjs.js.map