feature/IO-3048-Fix-Job-Bug-Messaging - Do not allow more than 1 of the same job to be associated with a conversation

Signed-off-by: Dave Richer <dave@imexsystems.ca>
This commit is contained in:
Dave Richer
2024-12-03 10:39:14 -08:00
parent 15ba2a1caf
commit 44721019fa

View File

@@ -353,22 +353,26 @@ export const registerMessagingHandlers = ({ socket, client }) => {
id: client.cache.identify({ __typename: "conversations", id: conversationId }),
fields: {
job_conversations: (existing = []) => {
// Ensure no duplicates based on `jobid`
const existingIds = new Set(
existing.map(
(jc) =>
client.cache.readFragment({
id: client.cache.identify(jc),
fragment: gql`
fragment JobConversationId on job_conversations {
jobid
}
`
})?.jobid
)
// Ensure no duplicates based on both `conversationid` and `jobid`
const existingLinks = new Set(
existing.map((jc) => {
const jobId = client.cache.readFragment({
id: client.cache.identify(jc),
fragment: gql`
fragment JobConversationLink on job_conversations {
jobid
conversationid
}
`
})?.jobid;
return `${jobId}:${conversationId}`; // Unique identifier for a job-conversation link
})
);
const newItems = formattedJobConversations.filter((jc) => !existingIds.has(jc.jobid));
const newItems = formattedJobConversations.filter((jc) => {
const uniqueLink = `${jc.jobid}:${jc.conversationid}`;
return !existingLinks.has(uniqueLink);
});
return [...existing, ...newItems];
}