chore: make duplicate recipients work for remplates

This commit is contained in:
Catalin Pit
2025-02-07 14:29:38 +02:00
parent 2896673a23
commit 64964f420a
5 changed files with 64 additions and 22 deletions

View File

@ -101,13 +101,15 @@ export const setTemplateRecipients = async ({
},
});
const removedRecipients = existingRecipients.filter(
(existingRecipient) =>
!normalizedRecipients.find(
(recipient) =>
recipient.id === existingRecipient.id || recipient.email === existingRecipient.email,
),
);
const removedRecipients = existingRecipients.filter((existingRecipient) => {
// Keep direct template recipients from being removed
if (template.directLink?.directTemplateRecipientId === existingRecipient.id) {
return false;
}
// Check if this recipient still exists in the normalized recipients
return !normalizedRecipients.some((recipient) => recipient.id === existingRecipient.id);
});
if (template.directLink !== null) {
const updatedDirectRecipient = recipients.find(
@ -132,15 +134,24 @@ export const setTemplateRecipients = async ({
}
const linkedRecipients = normalizedRecipients.map((recipient) => {
const existing = existingRecipients.find(
(existingRecipient) =>
existingRecipient.id === recipient.id || existingRecipient.email === recipient.email,
);
// For direct template recipients, match by ID only
if (template.directLink?.directTemplateRecipientId === recipient.id) {
const existing = existingRecipients.find(
(existingRecipient) => existingRecipient.id === recipient.id,
);
return { ...recipient, _persisted: existing };
}
return {
...recipient,
_persisted: existing,
};
// For other recipients, match by ID if it exists
if (recipient.id) {
const existing = existingRecipients.find(
(existingRecipient) => existingRecipient.id === recipient.id,
);
return { ...recipient, _persisted: existing };
}
// For new recipients, create a new entry
return { ...recipient, _persisted: undefined };
});
const persistedRecipients = await prisma.$transaction(async (tx) => {