From 7c12c70f9036b71abc58fe1acd783055d25397e2 Mon Sep 17 00:00:00 2001 From: Nastya Date: Mon, 12 May 2025 18:18:16 +0300 Subject: [PATCH] shown consultant to last message --- package.json | 2 +- src/components/FloatingSupportChat/Chat.tsx | 52 +++++++++++++------ .../FloatingSupportChat.tsx | 26 +++++++++- src/pages/Support/SupportChat.tsx | 39 ++++++++++---- yarn.lock | 8 +-- 5 files changed, 93 insertions(+), 34 deletions(-) diff --git a/package.json b/package.json index 0e88f19..d9b1886 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@emotion/react": "^11.10.5", "@emotion/styled": "^11.10.5", - "@frontend/kitui": "^1.0.99", + "@frontend/kitui": "^1.0.100", "@mui/icons-material": "^5.10.14", "@mui/material": "^5.10.14", "@popperjs/core": "^2.11.8", diff --git a/src/components/FloatingSupportChat/Chat.tsx b/src/components/FloatingSupportChat/Chat.tsx index 188ab27..4a76beb 100644 --- a/src/components/FloatingSupportChat/Chat.tsx +++ b/src/components/FloatingSupportChat/Chat.tsx @@ -159,6 +159,7 @@ export default function Chat({ open = false, onclickArrow, sx }: Props) { process.env.REACT_APP_DOMAIN + `/heruvym/v1.0.0/ticket?ticket=${sessionData?.ticketId}&s=${sessionData?.sessionId}`, onNewData: (ticketMessages) => { + console.log("ticketMessages useSSESubscription " + ticketMessages) const isTicketClosed = ticketMessages.some( (message) => message.session_id === "close" ); @@ -205,7 +206,7 @@ export default function Chat({ open = false, onclickArrow, sx }: Props) { const message = getMessageFromFetchError(error); if (message) enqueueSnackbar(message); }, - onFetchStateChange: () => {}, + onFetchStateChange: () => { }, enabled: Boolean(user), }); @@ -249,16 +250,40 @@ export default function Chat({ open = false, onclickArrow, sx }: Props) { useEffect(() => { if (open) { - if (user !== undefined && messages.length > 1) { - console.log("SHOWN") - console.log("user") - console.log(user) - console.log(messages[messages.length - 1]) - const newMessages = messages.filter(({ shown }) => shown.me !== 1); + console.log("SHOWN") + console.log("messages") + console.log(messages) + console.log("open") + console.log(open) + if (messages.length > 1) { - newMessages.map(async ({ id }) => { - await shownMessage(id); - }); + let last_message + + for (let i = messages.length - 1; i >= 0; i--) { + if (messages[i].ticket_id !== "111") { + last_message = messages[i]; + break; + } + } + + console.log("last_message") + console.log(last_message) + + if (last_message) { + console.log("if") + console.log(((ticket.sessionData?.sessionId || user) !== last_message.user_id) && last_message.shown.me !== 1 && last_message.ticket_id !== "111") + console.log(((ticket.sessionData?.sessionId || user) !== last_message.user_id)) + console.log(last_message.shown.me !== 1) + + if (((ticket.sessionData?.sessionId || user) !== last_message.user_id) && last_message.shown.me !== 1 && last_message.ticket_id !== "111") { + shownMessage(last_message.id); + } + + + console.log("user") + console.log(user) + console.log(messages[messages.length - 1]) + } } } }, [open, messages]); @@ -535,13 +560,6 @@ export default function Chat({ open = false, onclickArrow, sx }: Props) { /> ); } - console.log("isSelf " + message.message) - console.log("ticket.sessionData?.sessionId " + ticket.sessionData?.sessionId) - console.log("user_id ") - console.log("message.user_id " + message.user_id) - console.log("---------boolean result-----------") - console.log((ticket.sessionData?.sessionId || user) === - message.user_id) return ( { + let count = 0; + + // Идём с конца массива к началу + for (let i = messages.length - 1; i >= 0; i--) { + const message = messages[i]; + + // Пропускаем сообщение с id "111" + if (message.id === "111") continue; + + // Если сообщение не прочитано (shown.me !== 1) + if (message.shown.me !== 1) { + count++; + } else { + // Встретили прочитанное сообщение - прекращаем подсчёт + break; + } + } + + return count; + }, [messages]); // Зависимость от messages - пересчитывается при их изменении + useEffect(() => { const onResize = () => { if (document.fullscreenElement) { @@ -153,7 +175,7 @@ export default function FloatingSupportChat() { /> )} shown.me !== 1).length} + badgeContent={unreadMessagesCount} sx={{ "& .MuiBadge-badge": { display: isChatOpened ? "none" : "flex", diff --git a/src/pages/Support/SupportChat.tsx b/src/pages/Support/SupportChat.tsx index c051277..6ccdf79 100644 --- a/src/pages/Support/SupportChat.tsx +++ b/src/pages/Support/SupportChat.tsx @@ -100,8 +100,21 @@ function SupportChat() { process.env.REACT_APP_DOMAIN + `/heruvym/v1.0.0/ticket?ticket=${ticketId}&Authorization=${token}`, onNewData: (ticketMessages) => { - updateSSEValue(ticketMessages); - addOrUpdateMessages(ticketMessages); + console.log("ticketMessages") + console.log(ticketMessages) + const data = ticketMessages.filter(t => { + if (typeof t === "object" && t !== null && "event" in t && t.event !== "ping") { + console.log("---------------------------------------------------") + console.log(t) + console.log(typeof t === "object") + console.log("event" in t) + console.log(t.event !== "ping") + console.log("---------------------------------------------------") + return true + } + }) + updateSSEValue(data); + addOrUpdateMessages(data); }, onDisconnect: useCallback(() => { clearMessageState(); @@ -185,11 +198,11 @@ function SupportChat() { month: "2-digit", day: "2-digit", }) + - " " + - createdAt.toLocaleTimeString(undefined, { - hour: "2-digit", - minute: "2-digit", - }); + " " + + createdAt.toLocaleTimeString(undefined, { + hour: "2-digit", + minute: "2-digit", + }); const sendFile = async (file: File) => { if (file === undefined) return true; @@ -220,6 +233,9 @@ function SupportChat() { setDisableFileButton(false); }; + console.log("messages messmessagesmessagesmessages messages") + console.log(messages) + return ( 0 && isFileImage() ) { + console.log("message NEWNEWNENWNEW _WE__WE_W_EW_E_WENWNEWNENWEWNE") + console.log(message) return ( ); } if ( - message.files !== null && - message.files.length > 0 && + message?.files !== undefined && + message?.files !== null && + message?.files.length > 0 && isFileVideo() ) { return ( diff --git a/yarn.lock b/yarn.lock index f88f553..7481d4e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1516,10 +1516,10 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@frontend/kitui@^1.0.99": - version "1.0.99" - resolved "http://gitea.pena/api/packages/skeris/npm/%40frontend%2Fkitui/-/1.0.99/kitui-1.0.99.tgz#b5f5197f9d10a093d578fb2201f3ea8d12536949" - integrity sha512-FAaIQA2peXqSPEw/uK43XD+GdbTEL2K66nHG/TJE4Nd2IsQjOkDWGMjLR5QLk74xra3YKl0QskF3d3YpT9Y46Q== +"@frontend/kitui@^1.0.100": + version "1.0.100" + resolved "http://gitea.pena/api/packages/skeris/npm/%40frontend%2Fkitui/-/1.0.100/kitui-1.0.100.tgz#36045436d129ca8aaccbe0b2f7065d575eabed9f" + integrity sha512-kt7WqtpAfzOaMH0T9BhUMnn9p5Vb+PxZXuBs8I4YCno4BLmcHMSQ3ZsGYKAZRvpTZx8GIQbi2V83VRe+v5xSmA== dependencies: immer "^10.0.2" reconnecting-eventsource "^1.6.2"