/** * Source-of-truth: project-updated email template. * * Uses the shared email layout wrapper. Body content is built from * per-language translated strings so that only text differs between locales. */ const { wrapEmailLayout } = require('../../_shared/emailLayout.cjs'); const { BRAND_PRIMARY, INFO_BOX_BG, INFO_BOX_BORDER, BRAND_DARK, } = require('../../_shared/constants.cjs'); const TEMPLATE_NAME = 'project-updated'; const SUBTYPE_NAME = 'Project Updated'; const SUBJECTS = { en: 'Project Updated: {{project.name}}', fr: 'Projet mis \u00e0 jour : {{project.name}}', es: 'Proyecto actualizado: {{project.name}}', de: 'Projekt aktualisiert: {{project.name}}', nl: 'Project bijgewerkt: {{project.name}}', it: 'Progetto aggiornato: {{project.name}}', pl: 'Projekt zaktualizowany: {{project.name}}', }; /* eslint-disable max-len */ const COPY = { en: { headerLabel: 'Project Updated', intro: 'A project has been updated:', projectName: 'Project Name', status: 'Status', changes: 'Changes', updatedBy: 'Updated By', viewButton: 'View Project', footer: 'Powered by Alga PSA · Keeping teams aligned', textHeader: 'Project Updated', textIntro: 'A project has been updated:', textView: 'View project at', }, fr: { headerLabel: 'Projet mis \u00e0 jour', intro: 'Un projet a \u00e9t\u00e9 mis \u00e0 jour :', projectName: 'Nom du projet', status: 'Statut', changes: 'Modifications', updatedBy: 'Mis \u00e0 jour par', viewButton: 'Voir le projet', footer: 'Powered by Alga PSA · Gardons les \u00e9quipes align\u00e9es', textHeader: 'Projet mis \u00e0 jour', textIntro: 'Un projet a \u00e9t\u00e9 mis \u00e0 jour :', textView: 'Voir le projet sur', }, es: { headerLabel: 'Proyecto actualizado', intro: 'Se ha actualizado un proyecto:', projectName: 'Nombre del proyecto', status: 'Estado', changes: 'Cambios', updatedBy: 'Actualizado por', viewButton: 'Ver proyecto', footer: 'Powered by Alga PSA · Manteniendo a los equipos alineados', textHeader: 'Proyecto actualizado', textIntro: 'Se ha actualizado un proyecto:', textView: 'Ver proyecto en', }, de: { headerLabel: 'Projekt aktualisiert', intro: 'Ein Projekt wurde aktualisiert:', projectName: 'Projektname', status: 'Status', changes: '\u00c4nderungen', updatedBy: 'Aktualisiert von', viewButton: 'Projekt anzeigen', footer: 'Powered by Alga PSA · Teams auf Kurs halten', textHeader: 'Projekt aktualisiert', textIntro: 'Ein Projekt wurde aktualisiert:', textView: 'Projekt anzeigen unter', }, nl: { headerLabel: 'Project bijgewerkt', intro: 'Een project is bijgewerkt:', projectName: 'Projectnaam', status: 'Status', changes: 'Wijzigingen', updatedBy: 'Bijgewerkt door', viewButton: 'Project bekijken', footer: 'Powered by Alga PSA · Teams op \u00e9\u00e9n lijn houden', textHeader: 'Project bijgewerkt', textIntro: 'Een project is bijgewerkt:', textView: 'Project bekijken op', }, it: { headerLabel: 'Progetto aggiornato', intro: '\u00c8 stato aggiornato un progetto:', projectName: 'Nome del progetto', status: 'Stato', changes: 'Modifiche', updatedBy: 'Aggiornato da', viewButton: 'Visualizza progetto', footer: 'Powered by Alga PSA · Manteniamo i team allineati', textHeader: 'Progetto aggiornato', textIntro: '\u00c8 stato aggiornato un progetto:', textView: 'Visualizza progetto su', }, pl: { headerLabel: 'Projekt zaktualizowany', intro: 'Projekt zosta\u0142 zaktualizowany:', projectName: 'Nazwa projektu', status: 'Status', changes: 'Zmiany', updatedBy: 'Zaktualizowa\u0142(a)', viewButton: 'Zobacz projekt', footer: 'Powered by Alga PSA', textHeader: 'Projekt zaktualizowany', textIntro: 'Projekt zosta\u0142 zaktualizowany:', textView: 'Zobacz projekt pod adresem', }, }; /* eslint-enable max-len */ function buildBodyHtml(c) { return `

${c.intro}

${c.projectName} {{project.name}}
${c.status} {{project.status}}
${c.updatedBy} {{project.updatedBy}}
${c.changes}
{{{project.changes}}}
${c.viewButton}`; } function buildText(c) { return `${c.textHeader} ${c.textIntro} ${c.projectName}: {{project.name}} ${c.status}: {{project.status}} ${c.changes}: {{project.changes}} ${c.updatedBy}: {{project.updatedBy}} ${c.textView}: {{project.url}}`; } function getTemplate() { return { templateName: TEMPLATE_NAME, subtypeName: SUBTYPE_NAME, translations: Object.entries(COPY).map(([lang, copy]) => ({ language: lang, subject: SUBJECTS[lang], htmlContent: wrapEmailLayout({ language: lang, headerLabel: copy.headerLabel, headerTitle: '{{project.name}}', bodyHtml: buildBodyHtml(copy), footerText: copy.footer, }), textContent: buildText(copy), })), }; } module.exports = { TEMPLATE_NAME, SUBTYPE_NAME, getTemplate };