front-hub/src/support/hooks/useMessageOwnership.ts
Nastya 0948e41294
All checks were successful
Deploy / CreateImage (push) Successful in 4m6s
Deploy / DeployService (push) Successful in 21s
fix chat
2025-05-18 15:34:21 +03:00

73 lines
2.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { TicketMessage } from "@frontend/kitui";
import { useUserStore } from "@root/stores/user";
interface UseMessageOwnershipProps {
message: TicketMessage;
sessionId?: string;
ticketUserId?: string;
}
interface UseMessageOwnershipResult {
isOwnMessage: boolean;
isUnread: boolean;
}
export const useMessageOwnership = ({
message,
sessionId,
ticketUserId
}: UseMessageOwnershipProps): UseMessageOwnershipResult => {
const userId = useUserStore((state) => state.user?._id);
// Определяем владельца сообщения
const isOwnMessage = (sessionId || userId || ticketUserId) === message.user_id;
// Сообщение считается непрочитанным если:
// 1. Оно не моё
// 2. Не отмечено как прочитанное (shown.me !== 1)
// 3. Не является системным (ticket_id !== "111")
const isUnread = !isOwnMessage && message.shown?.me !== 1 && message.ticket_id !== "111";
return {
isOwnMessage,
isUnread
};
};
interface UseUnreadMessagesCountProps {
messages: TicketMessage[];
sessionId?: string;
ticketUserId?: string;
}
export const useUnreadMessagesCount = ({
messages,
sessionId,
ticketUserId
}: UseUnreadMessagesCountProps): number => {
const userId = useUserStore((state) => state.user?._id);
// Считаем непрочитанные сообщения до первого прочитанного или своего
let unreadCount = 0;
for (const message of messages) {
const isOwnMessage = (sessionId || userId || ticketUserId) === message.user_id;
// Если это моё сообщение - прерываем подсчет
if (isOwnMessage) {
break;
}
// Если это чужое сообщение и оно не прочитано и не системное - увеличиваем счетчик
if (!isOwnMessage && message.shown?.me !== 1 && message.ticket_id !== "111") {
unreadCount++;
}
// Если встретили прочитанное сообщение - прерываем подсчет
if (message.shown?.me === 1) {
break;
}
}
return unreadCount;
};