diff --git a/src/app/admin/contract-management/components/mailTemplatesManager.tsx b/src/app/admin/contract-management/components/mailTemplatesManager.tsx new file mode 100644 index 0000000..e36fbb3 --- /dev/null +++ b/src/app/admin/contract-management/components/mailTemplatesManager.tsx @@ -0,0 +1,247 @@ +'use client'; + +import { useState } from 'react'; + +type MailTemplate = { + id: string; + name: string; + subject: string; + html: string; + updatedAt: string; +}; + +const MOCK_MAIL_TEMPLATES: MailTemplate[] = [ + { + id: 'welcome', + name: 'Welcome Mail', + subject: 'Welcome to Profit Planet', + html: '

Welcome {{firstName}}

Thanks for joining Profit Planet. We are happy to have you onboard.

Best regards,
Profit Planet Team

', + updatedAt: '2026-05-04T09:00:00.000Z', + }, + { + id: 'invoice-reminder', + name: 'Invoice Reminder', + subject: 'Friendly reminder: invoice {{invoiceNumber}}', + html: '

Invoice Reminder

Hello {{companyName}},

your invoice {{invoiceNumber}} is due on {{dueDate}}.

Thank you!

', + updatedAt: '2026-05-03T14:30:00.000Z', + }, +]; + +export default function MailTemplatesManager() { + const [mailTemplates, setMailTemplates] = useState(MOCK_MAIL_TEMPLATES); + const [selectedMailTemplateId, setSelectedMailTemplateId] = useState(MOCK_MAIL_TEMPLATES[0]?.id ?? ''); + const [isCreatingMailTemplate, setIsCreatingMailTemplate] = useState(false); + const [mailTemplateSavedMessage, setMailTemplateSavedMessage] = useState(null); + const [mailEditor, setMailEditor] = useState<{ name: string; subject: string; html: string }>({ + name: MOCK_MAIL_TEMPLATES[0]?.name ?? '', + subject: MOCK_MAIL_TEMPLATES[0]?.subject ?? '', + html: MOCK_MAIL_TEMPLATES[0]?.html ?? '', + }); + + const selectedMailTemplate = mailTemplates.find((template) => template.id === selectedMailTemplateId) ?? null; + + const startCreateMailTemplate = () => { + setIsCreatingMailTemplate(true); + setSelectedMailTemplateId(''); + setMailEditor({ + name: 'New Mail Template', + subject: '', + html: '

New Template

Edit this HTML content.

', + }); + }; + + const selectExistingMailTemplate = (id: string) => { + const template = mailTemplates.find((item) => item.id === id); + if (!template) return; + setIsCreatingMailTemplate(false); + setSelectedMailTemplateId(id); + setMailEditor({ + name: template.name, + subject: template.subject, + html: template.html, + }); + }; + + const saveMailTemplate = () => { + const nowIso = new Date().toISOString(); + + if (isCreatingMailTemplate) { + const generatedId = `mail-${Date.now()}`; + const nextTemplate: MailTemplate = { + id: generatedId, + name: mailEditor.name.trim() || 'Untitled Template', + subject: mailEditor.subject, + html: mailEditor.html, + updatedAt: nowIso, + }; + setMailTemplates((current) => [nextTemplate, ...current]); + setSelectedMailTemplateId(generatedId); + setIsCreatingMailTemplate(false); + setMailTemplateSavedMessage('Mail template created (mock).'); + return; + } + + if (!selectedMailTemplateId) return; + + setMailTemplates((current) => + current.map((template) => + template.id === selectedMailTemplateId + ? { + ...template, + name: mailEditor.name.trim() || template.name, + subject: mailEditor.subject, + html: mailEditor.html, + updatedAt: nowIso, + } + : template + ) + ); + setMailTemplateSavedMessage('Mail template updated (mock).'); + }; + + const deleteSelectedMailTemplate = () => { + if (!selectedMailTemplateId) return; + + setMailTemplates((current) => { + const next = current.filter((template) => template.id !== selectedMailTemplateId); + const nextSelected = next[0] ?? null; + setSelectedMailTemplateId(nextSelected?.id ?? ''); + setIsCreatingMailTemplate(false); + setMailEditor({ + name: nextSelected?.name ?? '', + subject: nextSelected?.subject ?? '', + html: nextSelected?.html ?? '', + }); + return next; + }); + + setMailTemplateSavedMessage('Mail template removed (mock).'); + }; + + return ( +
+
+

+ + Mail Templates +

+
+ + + +
+
+ +

+ Frontend-only mock editor. Data is stored in local component state and resets on page reload. +

+ + {mailTemplateSavedMessage && ( +
+ {mailTemplateSavedMessage} +
+ )} + +
+ + +
+
+
+ + + + +