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

102 lines 4.51 kB
import { __awaiter } from "tslib"; import * as cms from '../../cms'; import { ContentType } from '../../cms'; import { TopContentDelivery } from '../content-delivery'; import { ContentfulEntryUtils, } from '../delivery-utils'; export class DeliveryWithReference extends TopContentDelivery { // cannot be set in constructor because there's a circular dependency Model <-> Reference setReference(reference) { this.reference = reference; } getReference() { console.assert(this.reference, 'you need to call setReference from Contentful constructor'); return this.reference; } } export class ReferenceDelivery { constructor(delivery, carousel, text, image, startUp, video, document, url, handoff, queue, schedule, input, payload, dateRange) { this.delivery = delivery; this.carousel = carousel; this.text = text; this.image = image; this.startUp = startUp; this.video = video; this.document = document; this.url = url; this.handoff = handoff; this.queue = queue; this.schedule = schedule; this.input = input; this.payload = payload; this.dateRange = dateRange; } fromEntry(reference, context) { return __awaiter(this, void 0, void 0, function* () { if (!reference) { return Promise.resolve(undefined); } try { return this.fromEntryCore(reference, context); } catch (e) { throw new cms.CmsException(`Error loading reference with id '${reference.sys.id}'`, e); } }); } commonFields(entry, context) { return __awaiter(this, void 0, void 0, function* () { const reference = yield this.getReference(entry, context); return ContentfulEntryUtils.commonFieldsFromEntry(entry, reference); }); } fromEntryCore(reference, context) { return __awaiter(this, void 0, void 0, function* () { if (!reference.sys.contentType) { reference = yield this.delivery.getEntry(reference.sys.id, context); } switch (ContentfulEntryUtils.getContentModel(reference)) { case ContentType.CAROUSEL: // here followUp already has its fields set, but not yet its element fields return this.carousel.carousel(reference.sys.id, context); case cms.ContentType.TEXT: return this.text.fromEntry(reference, context); case cms.ContentType.IMAGE: return this.image.fromEntry(reference, context); case cms.ContentType.STARTUP: return this.startUp.fromEntry(reference, context); case cms.ContentType.VIDEO: return this.video.fromEntry(reference, context); case cms.ContentType.DOCUMENT: return this.document.fromEntry(reference, context); case cms.ContentType.URL: return this.url.fromEntry(reference, context); case cms.ContentType.HANDOFF: return this.handoff.fromEntry(reference, context); case cms.ContentType.QUEUE: return this.queue.fromEntry(reference, context); case cms.ContentType.SCHEDULE: return this.schedule.fromEntry(reference, context); case cms.ContentType.INPUT: return this.input.fromEntry(reference, context); case cms.ContentType.PAYLOAD: return this.payload.fromEntry(reference, context); case cms.ContentType.DATE_RANGE: return this.dateRange.fromEntry(reference, context); default: throw new Error(`Unexpected reference type ${reference.sys.type}`); } }); } getReference(entry, context) { return __awaiter(this, void 0, void 0, function* () { if (entry.fields.followup) { const followUp = entry.fields.followup.sys.contentType ? entry.fields.followup : yield this.delivery.getEntry(entry.fields.followup.sys.id, context); return (yield this.fromEntry(followUp, context)); } return undefined; }); } } //# sourceMappingURL=reference.js.map