ultisuite-client/lib/compose/identity-map.ts
2026-05-25 13:52:40 +02:00

58 lines
1.9 KiB
TypeScript

'use client'
import type { ApiIdentity, ApiMailSignature } from '@/lib/api/types'
import type { Identity } from '@/lib/compose-context'
import { insertSignatureHtml } from '@/components/gmail/compose/compose-shared'
import { getSignatureHtmlById } from '@/lib/stores/mail-signatures-store'
export function resolveIdentitySignatureHtml(
identity: ApiIdentity,
signaturesById?: Map<string, ApiMailSignature>
): string | null {
const fromLibrary = identity.default_signature_id
? (signaturesById?.get(identity.default_signature_id)?.html ??
getSignatureHtmlById(identity.default_signature_id))
: null
if (fromLibrary?.trim()) return fromLibrary
const inline = identity.signature_html?.trim()
return inline || null
}
export function apiIdentityToCompose(
identity: ApiIdentity,
signaturesById?: Map<string, ApiMailSignature>
): Identity {
const defaultSignatureId = identity.default_signature_id ?? null
const signatureHtml = resolveIdentitySignatureHtml(identity, signaturesById)
return {
id: identity.id,
accountId: identity.account_id,
name: identity.name,
email: identity.email,
defaultSignatureId,
signatureHtml,
isDefault: identity.is_default,
}
}
export function buildBodyWithSignature(bodyHtml: string, identity: Identity): string {
const html = identity.signatureHtml ?? null
if (!html?.trim()) return bodyHtml
return insertSignatureHtml(bodyHtml, html)
}
export function myEmailsFromIdentities(identities: Identity[]): Set<string> {
return new Set(identities.map((i) => i.email.trim().toLowerCase()).filter(Boolean))
}
export function defaultComposeIdentity(
identities: Identity[],
accountId?: string | null
): Identity | null {
if (accountId) {
const scoped = identities.filter((i) => i.accountId === accountId)
return scoped.find((i) => i.isDefault) ?? scoped[0] ?? null
}
return identities.find((i) => i.isDefault) ?? identities[0] ?? null
}