// Shared slide form view-model builder. const { getRegionEditorScripts } = require('../../../lib/region-scripts'); function buildDefaultSlide() { return { title: '', template_id: null, content: {} }; } function buildTemplates(templates, templateRegions) { const regions = Array.isArray(templateRegions) ? templateRegions : []; return (Array.isArray(templates) ? templates : []).map((template) => Object.assign({}, template, { canvas_size_width: template.canvas_size_width, canvas_size_height: template.canvas_size_height, regions: regions.filter((region) => Number(region.template_id) === Number(template.id)) })); } function buildSlideFormViewModel(data, slide, message, currentUser, isEdit) { const assetVersion = Date.now().toString(36); const templateRegions = data && data.templateRegions ? data.templateRegions : []; const rssFeeds = data && data.rssFeeds ? data.rssFeeds : []; const apiSources = data && data.apiSources ? data.apiSources : []; const timetableGroups = data && data.timetableGroups ? data.timetableGroups : []; const fontLibrary = data && data.fontLibrary ? data.fontLibrary : null; const templates = buildTemplates(data && data.templates ? data.templates : [], templateRegions); const viewSlide = slide || buildDefaultSlide(); return { title: isEdit ? 'Edit slide' : 'Create slide', active: 'slides', message: message, isEdit: Boolean(isEdit), inUse: Boolean(viewSlide && viewSlide.inUse), action: isEdit && viewSlide.id ? '/slides/' + viewSlide.id : '/slides', formAttrs: isEdit ? 'data-async-save data-async-save-close-url="/slides" data-async-save-new-url="/slides/new"' : 'data-async-save data-async-save-close-url="/slides" data-async-save-new-redirect="response-url" data-async-save-new-url="/slides/new"', slide: viewSlide, templates: templates, stylesheets: fontLibrary && fontLibrary.stylesheetHref ? [fontLibrary.stylesheetHref] : [], slideEditorData: { templates: templates, rssFeeds: rssFeeds, apiSources: apiSources, timetableGroups: timetableGroups, fontStylesheetHref: fontLibrary && fontLibrary.stylesheetHref ? fontLibrary.stylesheetHref : '', fontFamilyFormats: fontLibrary && fontLibrary.fontFamilyFormats ? fontLibrary.fontFamilyFormats : '', existingTemplateId: viewSlide && viewSlide.template_id ? viewSlide.template_id : null, existingContent: viewSlide && viewSlide.content ? viewSlide.content : {} }, assetVersion: assetVersion, slideEditorScripts: ['vendor/qrcode-generator/qrcode.js?v=' + assetVersion].concat(getRegionEditorScripts(assetVersion)), currentUser: currentUser || null }; } module.exports = { buildSlideFormViewModel: buildSlideFormViewModel };