@botonic/plugin-contentful
Version:
## What Does This Plugin Do?
100 lines • 4.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ScheduleDelivery = void 0;
const tslib_1 = require("tslib");
const cms_1 = require("../../cms");
const time = tslib_1.__importStar(require("../../time"));
const delivery_utils_1 = require("../delivery-utils");
const reference_1 = require("./reference");
class ScheduleDelivery extends reference_1.DeliveryWithReference {
constructor(delivery, resumeErrors) {
super(cms_1.ContentType.SCHEDULE, delivery, resumeErrors);
}
schedule(id, context) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const f = yield this.getEntry(id, cms_1.DEFAULT_CONTEXT, {
include: ScheduleDelivery.REFERENCES_INCLUDE,
});
return this.fromEntry(f, context);
});
}
fromEntry(entry, context) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
try {
this.checkEntry(entry);
const schedule = new time.Schedule(time.Schedule.TZ_CET); // TODO allow configuration
this.addDaySchedules(schedule, entry.fields);
this.addExceptions(schedule, entry.fields.exceptions);
const referenceDelivery = {
delivery: this.reference,
context,
};
return yield (0, delivery_utils_1.addCustomFields)(new cms_1.ScheduleContent(delivery_utils_1.ContentfulEntryUtils.commonFieldsFromEntry(entry), schedule), entry.fields, referenceDelivery, [
'exceptions',
'partition',
'mondays',
'tuesdays',
'wednesdays',
'thursdays',
'fridays',
'saturdays',
'sundays',
]);
}
catch (e) {
throw new cms_1.CmsException(`Error loading Scheduler '${entry.sys.id}'`, e);
}
});
}
addDaySchedules(schedule, fields) {
const days = [
fields.sundays,
fields.mondays,
fields.tuesdays,
fields.wednesdays,
fields.thursdays,
fields.fridays,
fields.saturdays,
];
for (const day in days) {
if (!days[day]) {
continue;
}
const daySchedule = this.createDaySchedule(schedule, days[day]);
schedule.addDaySchedule(+day, daySchedule);
}
}
createDaySchedule(sched, hourRanges) {
const timeRanges = hourRanges.map(hr => {
try {
this.checkEntry(hr);
return new time.TimeRange(sched.createHourAndMinute(hr.fields.fromHour, hr.fields.fromMinute), sched.createHourAndMinute(hr.fields.toHour, hr.fields.toMinute));
}
catch (e) {
throw new cms_1.CmsException(`Error loading hour range '${hr.sys.id}'`, e);
}
});
return new time.DaySchedule(timeRanges);
}
addExceptions(schedule, exceptions) {
var _a;
if (!exceptions) {
return;
}
for (const exception of exceptions) {
try {
this.checkEntry(exception);
const timeRanges = this.createDaySchedule(schedule, exception.fields.hourRanges || []);
const dateStr = exception.fields.date.split('-');
const date = new Date(+dateStr[0], +dateStr[1] - 1, +dateStr[2]);
schedule.addException(date, timeRanges);
}
catch (e) {
this.logOrThrow(`Loading Schedule Exception '${exception.sys.id}' (name '${(_a = exception.fields) === null || _a === void 0 ? void 0 : _a.name}')`, {}, e, delivery_utils_1.ContentfulEntryUtils.getContentId(exception));
}
}
}
}
exports.ScheduleDelivery = ScheduleDelivery;
ScheduleDelivery.REFERENCES_INCLUDE = 2;
//# sourceMappingURL=schedule.js.map