@botonic/plugin-contentful
Version:
## What Does This Plugin Do?
107 lines • 4.85 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReferenceDelivery = exports.DeliveryWithReference = void 0;
const tslib_1 = require("tslib");
const cms = tslib_1.__importStar(require("../../cms"));
const cms_1 = require("../../cms");
const content_delivery_1 = require("../content-delivery");
const delivery_utils_1 = require("../delivery-utils");
class DeliveryWithReference extends content_delivery_1.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;
}
}
exports.DeliveryWithReference = DeliveryWithReference;
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 tslib_1.__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 tslib_1.__awaiter(this, void 0, void 0, function* () {
const reference = yield this.getReference(entry, context);
return delivery_utils_1.ContentfulEntryUtils.commonFieldsFromEntry(entry, reference);
});
}
fromEntryCore(reference, context) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
if (!reference.sys.contentType) {
reference = yield this.delivery.getEntry(reference.sys.id, context);
}
switch (delivery_utils_1.ContentfulEntryUtils.getContentModel(reference)) {
case cms_1.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 tslib_1.__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;
});
}
}
exports.ReferenceDelivery = ReferenceDelivery;
//# sourceMappingURL=reference.js.map