UNPKG

@botonic/plugin-contentful

Version:

Botonic Plugin Contentful is one of the **[available](https://github.com/hubtype/botonic/tree/master/packages)** plugins for Botonic. **[Contentful](http://www.contentful.com)** is a CMS (Content Management System) which manages contents of a great variet

166 lines 7.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getFieldsForContentType = exports.I18nField = exports.contentFieldByCmsName = exports.CONTENT_FIELDS = exports.ContentField = exports.ContentFieldValueType = exports.ContentFieldType = void 0; const cms_1 = require("../cms"); const enums_1 = require("../util/enums"); var ContentFieldType; (function (ContentFieldType) { ContentFieldType["TEXT"] = "Text"; ContentFieldType["SHORT_TEXT"] = "Short text"; ContentFieldType["KEYWORDS"] = "Keywords"; ContentFieldType["TITLE"] = "Title"; ContentFieldType["SUBTITLE"] = "Subtitle"; ContentFieldType["BUTTONS"] = "Buttons"; ContentFieldType["ELEMENTS"] = "Elements"; ContentFieldType["IMAGE"] = "Image"; ContentFieldType["PIC"] = "pic"; ContentFieldType["URL"] = "URL"; ContentFieldType["PAYLOAD"] = "payload"; ContentFieldType["NAME"] = "Name"; ContentFieldType["BUTTONS_STYLE"] = "Buttons Style"; ContentFieldType["FOLLOW_UP"] = "FollowUp"; ContentFieldType["TARGET"] = "Target"; ContentFieldType["QUEUE"] = "Queue"; ContentFieldType["HANDOFF_QUEUE"] = "Handoff Queue"; ContentFieldType["MESSAGE"] = "Message"; ContentFieldType["FAIL_MESSAGE"] = "Fail Message"; ContentFieldType["AGENT_EMAIL"] = "Agent Email"; ContentFieldType["AGENT_ID"] = "Agent Id"; ContentFieldType["ON_FINISH"] = "On Finish"; ContentFieldType["SHADOWING"] = "Shadowing"; ContentFieldType["INPUT_TYPE"] = "Input Type"; })(ContentFieldType = exports.ContentFieldType || (exports.ContentFieldType = {})); var ContentFieldValueType; (function (ContentFieldValueType) { ContentFieldValueType["STRING"] = "string"; ContentFieldValueType["STRING_ARRAY"] = "string[]"; ContentFieldValueType["REFERENCE"] = "reference"; ContentFieldValueType["REFERENCE_ARRAY"] = "reference[]"; ContentFieldValueType["ASSET"] = "asset"; ContentFieldValueType["BOOLEAN"] = "boolean"; })(ContentFieldValueType = exports.ContentFieldValueType || (exports.ContentFieldValueType = {})); class ContentField { constructor(fieldType, cmsName, valueType, isLocalized) { this.fieldType = fieldType; this.cmsName = cmsName; this.valueType = valueType; this.isLocalized = isLocalized; } parse(fieldValue) { switch (this.valueType) { case ContentFieldValueType.STRING: return fieldValue; case ContentFieldValueType.STRING_ARRAY: return fieldValue .split(ContentField.STRING_ARRAY_SEPARATOR) .map(kw => kw.trim()); default: throw new cms_1.CmsException(`${this.valueType} cannot be parsed yet`); } } getValue(content) { if (this.fieldType == ContentFieldType.SHORT_TEXT) { return content.common.shortText; } else if (this.fieldType == ContentFieldType.KEYWORDS) { return content.common.keywords; } return content[this.cmsName]; } isNotEmptyAt(content) { const val = this.getValue(content); if (Array.isArray(val)) { return val.length > 0; } return val; } } exports.ContentField = ContentField; /** * Used for keywords. * Maybe we should use instead a comma, since it's error prone that in Excel * the array values are ; separated, but in contentful dashboard they must be * separated by commas (a workaround is adding a validation on contentful dashboard * to prevent ; on array fields) */ ContentField.STRING_ARRAY_SEPARATOR = ';'; exports.CONTENT_FIELDS = new Map(pairs([ new ContentField(ContentFieldType.TEXT, 'text', ContentFieldValueType.STRING, true), new ContentField(ContentFieldType.SHORT_TEXT, 'shortText', ContentFieldValueType.STRING, true), new ContentField(ContentFieldType.KEYWORDS, 'keywords', ContentFieldValueType.STRING_ARRAY, true), new ContentField(ContentFieldType.TITLE, 'title', ContentFieldValueType.STRING, true), new ContentField(ContentFieldType.SUBTITLE, 'subtitle', ContentFieldValueType.STRING, true), new ContentField(ContentFieldType.BUTTONS, 'buttons', ContentFieldValueType.REFERENCE_ARRAY, true), new ContentField(ContentFieldType.ELEMENTS, 'elements', ContentFieldValueType.REFERENCE_ARRAY, true), new ContentField(ContentFieldType.IMAGE, 'image', ContentFieldValueType.ASSET, true), new ContentField(ContentFieldType.PIC, 'pic', ContentFieldValueType.ASSET, true), new ContentField(ContentFieldType.URL, 'url', ContentFieldValueType.STRING, true), new ContentField(ContentFieldType.PAYLOAD, 'payload', ContentFieldValueType.STRING, true), new ContentField(ContentFieldType.NAME, 'name', ContentFieldValueType.STRING, true), new ContentField(ContentFieldType.BUTTONS_STYLE, 'buttonsStyle', ContentFieldValueType.STRING, true), new ContentField(ContentFieldType.FOLLOW_UP, 'followup', ContentFieldValueType.REFERENCE, true), new ContentField(ContentFieldType.TARGET, 'target', ContentFieldValueType.REFERENCE, true), new ContentField(ContentFieldType.QUEUE, 'queue', ContentFieldValueType.STRING, true), new ContentField(ContentFieldType.HANDOFF_QUEUE, 'queue', ContentFieldValueType.REFERENCE, true), new ContentField(ContentFieldType.MESSAGE, 'message', ContentFieldValueType.REFERENCE, true), new ContentField(ContentFieldType.FAIL_MESSAGE, 'failMessage', ContentFieldValueType.REFERENCE, true), new ContentField(ContentFieldType.AGENT_EMAIL, 'agentEmail', ContentFieldValueType.STRING, true), new ContentField(ContentFieldType.AGENT_ID, 'agentId', ContentFieldValueType.STRING, true), new ContentField(ContentFieldType.ON_FINISH, 'onFinish', ContentFieldValueType.REFERENCE, true), new ContentField(ContentFieldType.SHADOWING, 'shadowing', ContentFieldValueType.BOOLEAN, true), new ContentField(ContentFieldType.INPUT_TYPE, 'type', ContentFieldValueType.STRING, true), ])); function pairs(cfs) { return cfs.map(cf => [cf.fieldType, cf]); } function contentFieldByCmsName(cmsName) { for (const cf of exports.CONTENT_FIELDS.values()) { if (cf.cmsName == cmsName) { return cf; } } throw new cms_1.CmsException(`No ContentField found for cmsName ${cmsName}`); } exports.contentFieldByCmsName = contentFieldByCmsName; class I18nField { constructor(name, value) { this.name = name; this.value = value; } } exports.I18nField = I18nField; /** * Only contains i18nalizable fields (used by tools to detect which fields need to be imported/deleted) * TODO add all fields */ const FIELDS_PER_CONTENT_TYPE = { [cms_1.ContentType.BUTTON]: [ContentFieldType.TEXT], [cms_1.ContentType.CAROUSEL]: [], [cms_1.ContentType.ELEMENT]: [ ContentFieldType.TITLE, ContentFieldType.SUBTITLE, ContentFieldType.BUTTONS, ], [cms_1.ContentType.STARTUP]: [ContentFieldType.TEXT, ContentFieldType.BUTTONS], [cms_1.ContentType.TEXT]: [ContentFieldType.TEXT, ContentFieldType.BUTTONS], [cms_1.ContentType.URL]: [ContentFieldType.URL], [cms_1.ContentType.PAYLOAD]: [ContentFieldType.PAYLOAD], }; /** * Adds common fields to FIELDS_PER_CONTENT_TYPE * IMPORTANT @see FIELDS_PER_CONTENT_TYPE */ function getFieldsForContentType(contentType) { let fields = FIELDS_PER_CONTENT_TYPE[contentType]; if (!fields) { throw new cms_1.CmsException(`Invalid content type ${contentType}`); } fields = [...fields]; if ((0, enums_1.isOfType)(contentType, cms_1.TopContentType)) { fields.push(ContentFieldType.KEYWORDS); fields.push(ContentFieldType.SHORT_TEXT); } return fields; } exports.getFieldsForContentType = getFieldsForContentType; //# sourceMappingURL=fields.js.map