73 lines
2.2 KiB
TypeScript
73 lines
2.2 KiB
TypeScript
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;
|
||
};
|