Ghost/ghost/announcement-bar-settings/lib/AnnouncementBarSettings.js

55 lines
2.0 KiB
JavaScript
Raw Normal View History

const AnnouncementVisibilityValues = require('./AnnouncementVisibilityValues');
class AnnouncementBarSettings {
#getAnnouncementSettings;
static VisibilityValues = AnnouncementVisibilityValues;
/**
*
* @param {Object} deps
* @param {() => {announcement: string, announcement_visibility: string[], announcement_background: string}} deps.getAnnouncementSettings
*/
constructor(deps) {
this.#getAnnouncementSettings = deps.getAnnouncementSettings;
}
/**
* @param {Object} [member]
* @param {string} member.status
* @returns {{announcement: string, announcement_background: string}}
*/
getAnnouncementSettings(member) {
let announcement = undefined;
// NOTE: combination of 'free_members' & 'paid_members' makes just a 'members' filter
const announcementSettings = this.#getAnnouncementSettings();
if (announcementSettings.announcement) {
const visibilities = announcementSettings.announcement_visibility;
const announcementContent = announcementSettings.announcement;
if (visibilities.length === 0) {
announcement = undefined;
} else {
if (visibilities.includes(AnnouncementVisibilityValues.VISITORS) && !member) {
announcement = announcementContent;
} else if (visibilities.includes(AnnouncementVisibilityValues.FREE_MEMBERS) && (member?.status === 'free')) {
announcement = announcementContent;
} else if (visibilities.includes(AnnouncementVisibilityValues.PAID_MEMBERS) && (member && member.status !== 'free')) {
announcement = announcementContent;
}
}
}
if (announcement !== undefined) {
return {
announcement,
announcement_background: announcementSettings.announcement_background
};
}
}
}
module.exports = AnnouncementBarSettings;