payload-plugin-scheduler
Version:
Scheduled posts plugin for PayloadCMS
122 lines (121 loc) • 3.95 kB
JavaScript
import { publishDateFieldCustomKey } from './lib.js';
const publishDateComponents = {
afterInput: [
'payload-plugin-scheduler/rsc#PublishDateAfterInputServer'
],
Cell: 'payload-plugin-scheduler/client#PublishDateCell'
};
const reservedPublishDateComponentSlots = Object.keys(publishDateComponents);
export const defaultOpts = {
collections: [],
globals: [],
interval: 5,
publishDate: {
name: 'publish_date',
label: 'Publish Date',
index: true,
type: 'date',
admin: {
date: {
pickerAppearance: 'dayAndTime',
timeIntervals: 5
},
position: 'sidebar',
components: publishDateComponents
},
custom: {
[publishDateFieldCustomKey]: true
}
}
};
export const normalizeScheduleConfig = (scheduleConfig, incomingConfig)=>{
const interval = scheduleConfig.interval ?? defaultOpts.interval;
const incomingPublishDate = scheduleConfig.publishDate ?? {};
const defaultDateAdmin = defaultOpts.publishDate.admin;
const incomingDateAdmin = incomingPublishDate.admin;
reservedPublishDateComponentSlots.forEach((slot)=>{
const componentSlot = slot;
const components = incomingDateAdmin?.components;
const component = components?.[componentSlot];
if (component && component !== publishDateComponents[componentSlot]) {
throw new Error(`[payload-plugin-scheduler] publishDate.admin.components.${slot} is managed by the plugin`);
}
});
return {
collections: scheduleConfig.collections ? [
...scheduleConfig.collections
] : [
...defaultOpts.collections
],
globals: scheduleConfig.globals ? [
...scheduleConfig.globals
] : [
...defaultOpts.globals
],
interval,
publishDate: {
...defaultOpts.publishDate,
...incomingPublishDate,
type: 'date',
admin: {
...defaultDateAdmin,
...incomingDateAdmin,
date: {
...defaultDateAdmin?.date,
...incomingDateAdmin?.date,
pickerAppearance: 'dayAndTime',
timeIntervals: interval
},
components: {
...incomingDateAdmin?.components,
...publishDateComponents
}
},
custom: {
...incomingPublishDate.custom,
[publishDateFieldCustomKey]: true
},
...incomingConfig?.admin?.timezones ? {
timezone: true
} : {}
}
};
};
export const resolvePublishDateField = (scheduleConfig, overrides = {})=>{
const publishDate = {
...scheduleConfig.publishDate,
...overrides,
admin: {
...scheduleConfig.publishDate.admin,
...overrides.admin,
date: {
...scheduleConfig.publishDate.admin?.date,
...overrides.admin?.date
},
components: {
...scheduleConfig.publishDate.admin?.components,
...overrides.admin?.components
}
},
custom: {
...scheduleConfig.publishDate.custom,
...overrides.custom
}
};
const resolvedField = normalizeScheduleConfig({
...scheduleConfig,
publishDate
}).publishDate;
const fieldWithoutTimezone = {
...resolvedField
};
delete fieldWithoutTimezone.timezone;
return {
...fieldWithoutTimezone,
name: scheduleConfig.publishDate.name,
...scheduleConfig.publishDate.timezone ? {
timezone: scheduleConfig.publishDate.timezone
} : {}
};
};
//# sourceMappingURL=config.js.map