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

55 lines
2.0 KiB
JavaScript
Raw Normal View History

class AnnouncementBarSettings {
#getAnnouncementSettings;
/**
*
* @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;
// Available visibilities:
// 'visitors', // Logged out visitors
// 'free_members', // Free members
// 'paid_members' // Paid members (aka non-free members)
if (visibilities.length === 0) {
announcement = undefined;
} else {
if (visibilities.includes('visitors') && !member) {
announcement = announcementContent;
} else if (visibilities.includes('free_members') && (member?.status === 'free')) {
announcement = announcementContent;
} else if (visibilities.includes('paid_members') && (member?.status !== 'free')) {
announcement = announcementContent;
}
}
}
if (announcement !== undefined) {
return {
announcement,
announcement_background: announcementSettings.announcement_background
};
}
}
}
module.exports = AnnouncementBarSettings;