Release 2.8.0
This commit is contained in:
@@ -11,6 +11,7 @@ module.exports = function registerAnnouncementRoutes(app, deps) {
|
||||
const { buildPagination } = require('../../../lib/pagination');
|
||||
const announcementData = require('#src/data/announcements');
|
||||
const announcementIcons = require('#src/data/announcement-icons');
|
||||
const { fetchAppSettings } = require('#src/data/app-settings');
|
||||
const { buildDuplicateAnnouncementName, buildDuplicateAnnouncement } = require('./duplicate');
|
||||
|
||||
const LIST_PAGE_SIZE = 25;
|
||||
@@ -30,6 +31,21 @@ module.exports = function registerAnnouncementRoutes(app, deps) {
|
||||
{ value: 'light', label: 'Light' }
|
||||
];
|
||||
const ANNOUNCEMENT_ICONS = announcementIcons.ANNOUNCEMENT_ICON_OPTIONS || [];
|
||||
const ANNOUNCEMENT_ICON_CATALOG = announcementIcons.ANNOUNCEMENT_ICON_CATALOG || ANNOUNCEMENT_ICONS;
|
||||
|
||||
async function fetchSuggestedAnnouncementIcons() {
|
||||
const settings = await fetchAppSettings(pool);
|
||||
const catalogByKey = new Map(ANNOUNCEMENT_ICON_CATALOG.map(function (option) {
|
||||
return [option.value, option];
|
||||
}));
|
||||
const configuredKeys = Array.isArray(settings['announcements.suggested_icons'])
|
||||
? settings['announcements.suggested_icons']
|
||||
: [];
|
||||
const configuredOptions = configuredKeys.map(function (key) {
|
||||
return catalogByKey.get(String(key || '').trim().toLowerCase()) || null;
|
||||
}).filter(Boolean);
|
||||
return configuredOptions.length ? configuredOptions : ANNOUNCEMENT_ICONS;
|
||||
}
|
||||
|
||||
function normalizeDurationUnit(value) {
|
||||
return String(value || 'minutes').trim().toLowerCase() === 'seconds' ? 'seconds' : 'minutes';
|
||||
@@ -269,21 +285,28 @@ module.exports = function registerAnnouncementRoutes(app, deps) {
|
||||
app.get('/announcements/new', requirePermission('announcements.create'), async function (req, res, next) {
|
||||
try {
|
||||
const screens = await fetchAnnouncementScreens();
|
||||
const suggestedAnnouncementIcons = await fetchSuggestedAnnouncementIcons();
|
||||
const settings = await fetchAppSettings(pool);
|
||||
const configuredIcon = String(settings['announcements.default_icon'] || '').trim().toLowerCase();
|
||||
const defaultIcon = ANNOUNCEMENT_ICON_CATALOG.some(function (option) { return option.value === configuredIcon; })
|
||||
? configuredIcon
|
||||
: (suggestedAnnouncementIcons[0] && suggestedAnnouncementIcons[0].value ? suggestedAnnouncementIcons[0].value : announcementIcons.DEFAULT_ANNOUNCEMENT_ICON);
|
||||
res.send(pages.renderAnnouncementAddPage(buildAnnouncementFormData({
|
||||
message: '',
|
||||
short_label: '',
|
||||
announcement_type: 'lower-third',
|
||||
color_key: 'primary',
|
||||
icon_key: announcementIcons.DEFAULT_ANNOUNCEMENT_ICON,
|
||||
icon_key: defaultIcon,
|
||||
durationMode: 'duration',
|
||||
duration_seconds: null,
|
||||
durationValue: 5,
|
||||
durationUnit: 'minutes',
|
||||
durationValue: Number(settings['announcements.default_duration_value']) || 10,
|
||||
durationUnit: String(settings['announcements.default_duration_unit'] || 'seconds'),
|
||||
screen_ids: []
|
||||
}), req.query.message ? String(req.query.message) : '', req.currentUser, {
|
||||
announcementTypes: ANNOUNCEMENT_TYPES,
|
||||
announcementColors: ANNOUNCEMENT_COLORS,
|
||||
announcementIcons: ANNOUNCEMENT_ICONS,
|
||||
announcementIcons: suggestedAnnouncementIcons,
|
||||
announcementIconCatalog: ANNOUNCEMENT_ICON_CATALOG,
|
||||
announcementScreens: buildAnnouncementScreenOptions(screens, [])
|
||||
}));
|
||||
} catch (error) {
|
||||
@@ -301,7 +324,8 @@ module.exports = function registerAnnouncementRoutes(app, deps) {
|
||||
res.send(pages.renderAnnouncementEditPage(buildAnnouncementFormData(announcement), null, req.query.message ? String(req.query.message) : '', req.currentUser, {
|
||||
announcementTypes: ANNOUNCEMENT_TYPES,
|
||||
announcementColors: ANNOUNCEMENT_COLORS,
|
||||
announcementIcons: ANNOUNCEMENT_ICONS,
|
||||
announcementIcons: await fetchSuggestedAnnouncementIcons(),
|
||||
announcementIconCatalog: ANNOUNCEMENT_ICON_CATALOG,
|
||||
announcementScreens: buildAnnouncementScreenOptions(screens, announcement.screen_ids || [])
|
||||
}));
|
||||
} catch (error) {
|
||||
@@ -327,7 +351,8 @@ module.exports = function registerAnnouncementRoutes(app, deps) {
|
||||
res.send(pages.renderAnnouncementAddPage(buildAnnouncementFormData(buildDuplicateAnnouncement(announcement, duplicateName)), req.query.message ? String(req.query.message) : 'Review the copied values and save when ready.', req.currentUser, {
|
||||
announcementTypes: ANNOUNCEMENT_TYPES,
|
||||
announcementColors: ANNOUNCEMENT_COLORS,
|
||||
announcementIcons: ANNOUNCEMENT_ICONS,
|
||||
announcementIcons: await fetchSuggestedAnnouncementIcons(),
|
||||
announcementIconCatalog: ANNOUNCEMENT_ICON_CATALOG,
|
||||
announcementScreens: buildAnnouncementScreenOptions(screens, announcement.screen_ids || []),
|
||||
messageVariant: 'info'
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user