feature/IO-3048-Fix-Job-Bug-Messaging - Fix tag weirdness and a vite error

Signed-off-by: Dave Richer <dave@imexsystems.ca>
This commit is contained in:
Dave Richer
2024-12-03 09:48:52 -08:00
parent 11b906103a
commit 15ba2a1caf
4 changed files with 59 additions and 47 deletions

View File

@@ -334,12 +334,47 @@ export const registerMessagingHandlers = ({ socket, client }) => {
break;
case "tag-added":
// Ensure `job_conversations` is properly formatted
const formattedJobConversations = job_conversations.map((jc) => ({
__typename: "job_conversations",
jobid: jc.jobid || jc.job?.id,
conversationid: conversationId,
job: jc.job || {
__typename: "jobs",
id: data.selectedJob.id,
ro_number: data.selectedJob.ro_number,
ownr_co_nm: data.selectedJob.ownr_co_nm,
ownr_fn: data.selectedJob.ownr_fn,
ownr_ln: data.selectedJob.ownr_ln
}
}));
client.cache.modify({
id: client.cache.identify({ __typename: "conversations", id: conversationId }),
fields: {
job_conversations: (existing = []) => [...existing, ...job_conversations]
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
)
);
const newItems = formattedJobConversations.filter((jc) => !existingIds.has(jc.jobid));
return [...existing, ...newItems];
}
}
});
break;
case "tag-removed":

View File

@@ -1,4 +1,4 @@
import React, { useEffect, useRef, useState } from "react";
import React, { useCallback, useEffect, useRef, useState } from "react";
import { Virtuoso } from "react-virtuoso";
import { renderMessage } from "./renderMessage";
import "./chat-message-list.styles.scss";
@@ -16,7 +16,7 @@ export default function ChatMessageListComponent({ messages }) {
loadedImagesRef.current = 0;
};
const preloadImages = (imagePaths, onComplete) => {
const preloadImages = useCallback((imagePaths, onComplete) => {
resetImageLoadState();
if (imagePaths.length === 0) {
@@ -34,7 +34,7 @@ export default function ChatMessageListComponent({ messages }) {
}
};
});
};
}, []);
// Ensure all images are loaded on initial render
useEffect(() => {
@@ -51,7 +51,7 @@ export default function ChatMessageListComponent({ messages }) {
});
}
});
}, [messages]);
}, [messages, preloadImages]);
// Handle scrolling when new messages are added
useEffect(() => {
@@ -69,7 +69,7 @@ export default function ChatMessageListComponent({ messages }) {
});
}
});
}, [messages, atBottom]);
}, [messages, atBottom, preloadImages]);
return (
<div className="chat">

View File

@@ -52,20 +52,26 @@ export function ChatTagRoContainer({ conversation, bodyshop }) {
// Find the job details from the search data
const selectedJob = data?.search_jobs.find((job) => job.id === option.key);
if (!selectedJob) return;
const newJobConversation = {
__typename: "job_conversations",
jobid: selectedJob.id,
conversationid: conversation.id,
job: {
__typename: "jobs",
...selectedJob
}
};
socket.emit("conversation-modified", {
conversationId: conversation.id,
bodyshopId: bodyshop.id,
type: "tag-added",
job_conversations: [newJobConversation]
selectedJob,
job_conversations: [
{
__typename: "job_conversations",
jobid: selectedJob.id,
conversationid: conversation.id,
job: {
__typename: "jobs",
id: selectedJob.id,
ro_number: selectedJob.ro_number,
ownr_co_nm: selectedJob.ownr_co_nm,
ownr_fn: selectedJob.ownr_fn,
ownr_ln: selectedJob.ownr_ln
}
}
]
});
}