feat(mail): rich text editor for signatures + placeholder variables

- Replace textarea in SignatureManager with TipTap RichTextEditor
- Add placeholder variable buttons: {{user.name}}, {{user.first_name}},
  {{user.last_name}}, {{user.email}}, {{user.role}}, {{tenant.name}}, {{date}}
- Add replaceSignatureVariables() utility in mail API
- ComposeModal now replaces variables with actual user/tenant data when inserting signature
- Variables resolved from auth store (user name, email, role, tenant name)
This commit is contained in:
Agent Zero
2026-07-16 21:55:38 +02:00
parent 178bd84fd6
commit 7cb1341a28
3 changed files with 68 additions and 10 deletions
+25
View File
@@ -417,6 +417,31 @@ export function decodeMimeHeader(value: string | undefined | null): string {
}
}
/**
* Replace placeholder variables in signature HTML with actual user/tenant data.
* Variables: {{user.name}}, {{user.first_name}}, {{user.last_name}},
* {{user.email}}, {{user.role}}, {{tenant.name}}, {{date}}
*/
export function replaceSignatureVariables(
html: string,
user: { name?: string; email?: string; role?: string; first_name?: string; last_name?: string },
tenant?: { name?: string },
): string {
const now = new Date();
const dateStr = now.toLocaleDateString([], { year: 'numeric', month: '2-digit', day: '2-digit' });
const firstName = user.first_name || (user.name ? user.name.split(' ')[0] : '');
const lastName = user.last_name || (user.name ? user.name.split(' ').slice(1).join(' ') : '');
return html
.replace(/\{\{user\.name\}\}/gi, user.name || '')
.replace(/\{\{user\.first_name\}\}/gi, firstName)
.replace(/\{\{user\.last_name\}\}/gi, lastName)
.replace(/\{\{user\.email\}\}/gi, user.email || '')
.replace(/\{\{user\.role\}\}/gi, user.role || '')
.replace(/\{\{tenant\.name\}\}/gi, tenant?.name || '')
.replace(/\{\{date\}\}/gi, dateStr);
}
// ─── Folders ────────────────────────────────────────────────────────────────
export function fetchFolders(accountId: string): Promise<MailFolder[]> {