@botonic/plugin-contentful
Version:
## What Does This Plugin Do?
102 lines • 4.51 kB
JavaScript
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