import { useQuery } from '@tanstack/react-query' import { useMemo } from 'react' import { ConversationResource } from '../../types' import { MemberResource } from '../../types/resources/member' import { useApiGet } from '../use_api' import { useApiClient } from '../use_api_client' import { useCurrentPerson } from '../use_current_person' import { getRequestQueryKey } from '../use_suspense_api' import { findDirectMessageConversation, getFindDirectMessageConversationRequestArgs, } from './find_direct_message_conversation' import { MessageAvailableMembersLink, resolveMessageAvailableMembersLink, } from './resolve_message_available_members_link' export function useMessageAvailableMembers( conversation: ConversationResource, { enabled }: { enabled: boolean } ): MessageAvailableMembersLink | undefined { const apiClient = useApiClient() const currentPerson = useCurrentPerson() const { data: members } = useApiGet( { url: `/me/conversations/${conversation.id}/members`, data: { fields: { Member: ['name', 'avatar', 'direct_messages_disabled'] } }, }, { enabled } ) const availableMembers = useMemo(() => { if (!enabled || !members) return [] const currentMember = members.find(m => m.id === currentPerson.id) if (currentMember?.directMessagesDisabled) return [] return members.filter(m => m.id !== currentPerson.id && !m.directMessagesDisabled) }, [enabled, members, currentPerson.id]) const availablePersonIds = useMemo(() => availableMembers.map(m => m.id), [availableMembers]) const { data: existingDirectMessageData } = useQuery({ queryKey: getRequestQueryKey( getFindDirectMessageConversationRequestArgs(availablePersonIds.map(String)) ), queryFn: () => findDirectMessageConversation(apiClient, availablePersonIds.map(String)), enabled: availablePersonIds.length > 0, }) return useMemo( () => resolveMessageAvailableMembersLink({ availableMembers, existingConversations: existingDirectMessageData?.data, canMessageAvailableMembers: !!conversation.memberAbility?.canMessageAvailableMembers, }), [ availableMembers, existingDirectMessageData, conversation.memberAbility?.canMessageAvailableMembers, ] ) }