67 lines
2.2 KiB
TypeScript
67 lines
2.2 KiB
TypeScript
import { ChatRoom, fetchChatRooms } from '@/lib/api';
|
|
|
|
const ACTIVE_ROOM_STORAGE_PREFIX = 'lendry-family-active-room:';
|
|
|
|
export function readStoredActiveRoomId(groupId: string) {
|
|
if (typeof window === 'undefined') return null;
|
|
return localStorage.getItem(`${ACTIVE_ROOM_STORAGE_PREFIX}${groupId}`);
|
|
}
|
|
|
|
export function storeActiveRoomId(groupId: string, roomId: string | null) {
|
|
if (typeof window === 'undefined') return;
|
|
const key = `${ACTIVE_ROOM_STORAGE_PREFIX}${groupId}`;
|
|
if (!roomId) {
|
|
localStorage.removeItem(key);
|
|
return;
|
|
}
|
|
localStorage.setItem(key, roomId);
|
|
}
|
|
|
|
export function findMemberRoom(
|
|
rooms: ChatRoom[],
|
|
memberUserId: string,
|
|
currentUserId: string,
|
|
options?: { isBot?: boolean; e2e?: boolean }
|
|
) {
|
|
const targetType = options?.isBot ? 'BOT' : options?.e2e ? 'E2E' : 'DIRECT';
|
|
return rooms.find(
|
|
(room) =>
|
|
room.type === targetType &&
|
|
room.members.some((member) => member.userId === memberUserId) &&
|
|
room.members.some((member) => member.userId === currentUserId)
|
|
);
|
|
}
|
|
|
|
export async function findOrCreateMemberChat(
|
|
groupId: string,
|
|
memberUserId: string,
|
|
_memberName: string,
|
|
currentUserId: string,
|
|
token: string
|
|
) {
|
|
const response = await fetchChatRooms(groupId, token);
|
|
const rooms = response.rooms ?? [];
|
|
const member = rooms.find(
|
|
(room) =>
|
|
(room.type === 'DIRECT' || room.type === 'BOT') &&
|
|
room.members.some((item) => item.userId === memberUserId) &&
|
|
room.members.some((item) => item.userId === currentUserId)
|
|
);
|
|
if (member) return member;
|
|
throw new Error('Чат ещё не создан. Обновите страницу семьи.');
|
|
}
|
|
|
|
export function roomDisplayLabel(room: ChatRoom, currentUserId: string) {
|
|
if (room.type === 'GENERAL') return room.name;
|
|
if (room.type === 'BOT') return room.name;
|
|
if (room.type === 'E2E') {
|
|
const other = room.members.find((member) => member.userId !== currentUserId);
|
|
return other ? `🔒 ${other.displayName}` : '🔒 Секретный чат';
|
|
}
|
|
if (room.type === 'DIRECT' || room.members.length === 2) {
|
|
const other = room.members.find((member) => member.userId !== currentUserId);
|
|
if (other) return other.displayName;
|
|
}
|
|
return room.name;
|
|
}
|