| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import { computed, type ComputedRef, type Ref } from 'vue' |
| | | |
| | | import { ImConversationType } from '../../utils/constants' |
| | | import { getSenderAvatar, getSenderDisplayName } from '../../utils/user' |
| | | import { useRtcStore } from '../store/rtcStore' |
| | | |
| | | /** 群éè¯æåè§å¾æ¨¡åï¼å·²å å
¥ + æ¥å
¥ä¸ï¼pending 头å UI åéæï¼joined ä¸éæ */ |
| | | export interface GroupCallMember { |
| | | userId: number |
| | | nickname: string |
| | | avatar?: string |
| | | pending: boolean |
| | | } |
| | | |
| | | /** |
| | | * 群éè¯æåå表 computedï¼joined å¨åï¼æª joined ç invitee å¨åï¼ |
| | | * ç¼åä¸ºç©ºï¼æ¥çµé¦å±æ¸²ææ©äº syncGroupActiveCall ååï¼æ¶ç¨ fallback 主å«å
åºï¼é¿å
ç©ºç½ |
| | | * |
| | | * @param groupId 群ç¼å· |
| | | * @param fallbackInviterId å
åºä¸»å«ï¼ç¼å为空æ¶å¡«ä¸ä¸ªå¤´åï¼æ 记为已å å
¥èé pending |
| | | */ |
| | | export function useGroupCallMembers( |
| | | groupId: Ref<number | undefined>, |
| | | fallbackInviterId?: Ref<number | undefined> |
| | | ): ComputedRef<GroupCallMember[]> { |
| | | const rtcStore = useRtcStore() |
| | | return computed(() => { |
| | | const gid = groupId.value |
| | | if (!gid) { |
| | | return [] |
| | | } |
| | | const groupCall = rtcStore.getGroupCall(gid) |
| | | const joinedIds = groupCall?.joinedUserIds ?? [] |
| | | const inviteeIds = groupCall?.inviteeIds ?? [] |
| | | const joinedSet = new Set(joinedIds) |
| | | const orderedIds = [...joinedIds, ...inviteeIds.filter((id) => !joinedSet.has(id))] |
| | | if (orderedIds.length > 0) { |
| | | return orderedIds.map((userId) => toVM(userId, gid, !joinedSet.has(userId))) |
| | | } |
| | | const fallback = fallbackInviterId?.value |
| | | return fallback ? [toVM(fallback, gid, false)] : [] |
| | | }) |
| | | } |
| | | |
| | | /** æ userId ç¿»è¯æè§å¾æ¨¡åï¼ç»ä¸èµ° user.ts helper è§£ææµç§° / 头å */ |
| | | function toVM(userId: number, groupId: number, pending: boolean): GroupCallMember { |
| | | return { |
| | | userId, |
| | | nickname: getSenderDisplayName(userId, ImConversationType.GROUP, groupId), |
| | | avatar: getSenderAvatar(userId, ImConversationType.GROUP, groupId) || undefined, |
| | | pending |
| | | } |
| | | } |