shown consultant to last message
All checks were successful
Deploy / CreateImage (push) Successful in 4m15s
Deploy / DeployService (push) Successful in 22s

This commit is contained in:
Nastya 2025-05-12 18:18:16 +03:00
parent b989b55426
commit df45ce96d5
5 changed files with 68 additions and 25 deletions

@ -16,7 +16,7 @@
"@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@babel/plugin-proposal-private-property-in-object": "^7.21.11",
"@emotion/react": "^11.10.5", "@emotion/react": "^11.10.5",
"@emotion/styled": "^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/icons-material": "^5.10.14",
"@mui/material": "^5.10.14", "@mui/material": "^5.10.14",
"@popperjs/core": "^2.11.8", "@popperjs/core": "^2.11.8",

@ -159,6 +159,7 @@ export default function Chat({ open = false, onclickArrow, sx }: Props) {
process.env.REACT_APP_DOMAIN + process.env.REACT_APP_DOMAIN +
`/heruvym/v1.0.0/ticket?ticket=${sessionData?.ticketId}&s=${sessionData?.sessionId}`, `/heruvym/v1.0.0/ticket?ticket=${sessionData?.ticketId}&s=${sessionData?.sessionId}`,
onNewData: (ticketMessages) => { onNewData: (ticketMessages) => {
console.log("ticketMessages useSSESubscription " + ticketMessages)
const isTicketClosed = ticketMessages.some( const isTicketClosed = ticketMessages.some(
(message) => message.session_id === "close" (message) => message.session_id === "close"
); );
@ -205,7 +206,7 @@ export default function Chat({ open = false, onclickArrow, sx }: Props) {
const message = getMessageFromFetchError(error); const message = getMessageFromFetchError(error);
if (message) enqueueSnackbar(message); if (message) enqueueSnackbar(message);
}, },
onFetchStateChange: () => {}, onFetchStateChange: () => { },
enabled: Boolean(user), enabled: Boolean(user),
}); });
@ -249,16 +250,40 @@ export default function Chat({ open = false, onclickArrow, sx }: Props) {
useEffect(() => { useEffect(() => {
if (open) { if (open) {
if (user !== undefined && messages.length > 1) { console.log("SHOWN")
console.log("SHOWN") console.log("messages")
console.log("user") console.log(messages)
console.log(user) console.log("open")
console.log(messages[messages.length - 1]) console.log(open)
const newMessages = messages.filter(({ shown }) => shown.me !== 1); if (messages.length > 1) {
newMessages.map(async ({ id }) => { let last_message
await shownMessage(id);
}); 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]); }, [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 ( return (
<ChatMessage <ChatMessage
unAuthenticated unAuthenticated

@ -1,4 +1,4 @@
import { useState, useEffect, forwardRef } from "react"; import { useState, useEffect, forwardRef, useMemo } from "react";
import { import {
Box, Box,
Fab, Fab,
@ -71,6 +71,28 @@ export default function FloatingSupportChat() {
}, },
}; };
const unreadMessagesCount = useMemo(() => {
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(() => { useEffect(() => {
const onResize = () => { const onResize = () => {
if (document.fullscreenElement) { if (document.fullscreenElement) {
@ -153,7 +175,7 @@ export default function FloatingSupportChat() {
/> />
)} )}
<Badge <Badge
badgeContent={messages.filter(({ shown }) => shown.me !== 1).length} badgeContent={unreadMessagesCount}
sx={{ sx={{
"& .MuiBadge-badge": { "& .MuiBadge-badge": {
display: isChatOpened ? "none" : "flex", display: isChatOpened ? "none" : "flex",

@ -220,6 +220,7 @@ function SupportChat() {
setDisableFileButton(false); setDisableFileButton(false);
}; };
return ( return (
<Box <Box
sx={{ sx={{
@ -335,11 +336,13 @@ function SupportChat() {
message?.files?.length > 0 && message?.files?.length > 0 &&
isFileImage() isFileImage()
) { ) {
console.log("message NEWNEWNENWNEW _WE__WE_W_EW_E_WENWNEWNENWEWNE")
console.log(message)
return ( return (
<ChatImage <ChatImage
unAuthenticated unAuthenticated
key={message.id} key={message.id}
file={message.files[0]} file={message?.files[0]}
createdAt={message.created_at} createdAt={message.created_at}
isSelf={ticket.user === message.user_id} isSelf={ticket.user === message.user_id}
/> />

@ -1516,10 +1516,10 @@
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2"
integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==
"@frontend/kitui@^1.0.99": "@frontend/kitui@^1.0.100":
version "1.0.99" version "1.0.100"
resolved "http://gitea.pena/api/packages/skeris/npm/%40frontend%2Fkitui/-/1.0.99/kitui-1.0.99.tgz#b5f5197f9d10a093d578fb2201f3ea8d12536949" resolved "http://gitea.pena/api/packages/skeris/npm/%40frontend%2Fkitui/-/1.0.100/kitui-1.0.100.tgz#c9c9d11a8dfe0d0c72fb8806147127faf869905f"
integrity sha512-FAaIQA2peXqSPEw/uK43XD+GdbTEL2K66nHG/TJE4Nd2IsQjOkDWGMjLR5QLk74xra3YKl0QskF3d3YpT9Y46Q== integrity sha512-82fnvlp9+ST8/oXIjAa8F7AJxCIkbdhd6xvFB4UpYxZ49Q9yEP9PueUG9MJRs3AX09OnO5iJoYnFTjy1tbX9dA==
dependencies: dependencies:
immer "^10.0.2" immer "^10.0.2"
reconnecting-eventsource "^1.6.2" reconnecting-eventsource "^1.6.2"