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:
@@ -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[]> {
|
||||
|
||||
Reference in New Issue
Block a user