From 1b0740eab4755b87447ed97e99a97f851807fa00 Mon Sep 17 00:00:00 2001 From: arnauda-gh <59512940+arnauda-gh@users.noreply.github.com> Date: Thu, 16 Jul 2026 10:15:04 +0200 Subject: [PATCH] fix(composer): prevent duplicate recipients from being added on done/blur action --- src/screens/ComposeScreen.tsx | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/screens/ComposeScreen.tsx b/src/screens/ComposeScreen.tsx index 1dfda9ac..01d55f4b 100644 --- a/src/screens/ComposeScreen.tsx +++ b/src/screens/ComposeScreen.tsx @@ -448,11 +448,33 @@ export default function ComposeScreen({ route, navigation }: Props) { const extraTo = parseRecipients(toInput); const extraCc = parseRecipients(ccInput); if (extraTo.length) { - setToRecipients((prev) => [...prev, ...extraTo]); + setToRecipients((prev) => { + const existing = new Set(prev.map((r) => r.email.toLowerCase())); + const unique: Recipient[] = []; + for (const r of extraTo) { + const emailLower = r.email.toLowerCase(); + if (!existing.has(emailLower)) { + existing.add(emailLower); + unique.push(r); + } + } + return [...prev, ...unique]; + }); setToInput(''); } if (extraCc.length) { - setCcRecipients((prev) => [...prev, ...extraCc]); + setCcRecipients((prev) => { + const existing = new Set(prev.map((r) => r.email.toLowerCase())); + const unique: Recipient[] = []; + for (const r of extraCc) { + const emailLower = r.email.toLowerCase(); + if (!existing.has(emailLower)) { + existing.add(emailLower); + unique.push(r); + } + } + return [...prev, ...unique]; + }); setCcInput(''); } };