import { useMutation } from '@tanstack/react-query'; import { AxiosError } from 'axios'; import sumBy from 'lodash/sumBy'; import React, { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import snackbar from 'soapbox/actions/snackbar'; import { Avatar, Button, HStack, Icon, Input, Stack, Text } from 'soapbox/components/ui'; import VerificationBadge from 'soapbox/components/verification_badge'; import { useChatContext } from 'soapbox/contexts/chat-context'; import { useAppDispatch, useDebounce } from 'soapbox/hooks'; import { IChat, useChats } from 'soapbox/queries/chats'; import { queryClient } from 'soapbox/queries/client'; import useAccountSearch from 'soapbox/queries/search'; import ChatList from '../chat-list'; import ChatPaneHeader from '../chat-pane-header'; import ChatSearch from '../chat-search/chat-search'; import ChatWindow from '../chat-window'; import { Pane } from '../ui'; const messages = defineMessages({ searchPlaceholder: { id: 'chats.search_placeholder', defaultMessage: 'Search inbox' }, }); const ChatPane = () => { const intl = useIntl(); const dispatch = useAppDispatch(); const debounce = useDebounce; const [value, setValue] = useState(); const debouncedValue = debounce(value as string, 300); const { chat, setChat, isOpen, isSearching, setSearching, toggleChatPane } = useChatContext(); const { chatsQuery: { data: chats } } = useChats(debouncedValue); // const chats: IChat[] = []; // Screens // 1. Search + Chats // 2. Search + empty // 3. User search const unreadCount = sumBy(chats, (chat) => chat.unread); const hasSearchValue = Number(value?.length) > 0; const handleClickChat = (chat: IChat) => { setChat(chat); setValue(undefined); }; const clearValue = () => { if (hasSearchValue) { setValue(''); } }; const renderBody = () => { if (hasSearchValue || Number(chats?.length) > 0) { return (
setValue(event.target.value)} isSearch append={ } />
{Number(chats?.length) > 0 ? ( ) : ( no results )}
); } else if (chats?.length === 0) { return ( No messages yet You can start a conversation with anyone that follows you.
); } }; // Active chat if (chat?.id) { return ( ); } if (isSearching) { return ; } return ( { setSearching(true); setValue(undefined); }} secondaryActionIcon={require('@tabler/icons/edit.svg')} /> {isOpen ? renderBody() : null} ); }; export default ChatPane;