import type { FC } from '../../../lib/teact/teact'; import React, { memo, useCallback, useMemo, useRef, useState, } from '../../../lib/teact/teact'; import { getActions, withGlobal } from '../../../global'; import { GlobalSearchContent } from '../../../types'; import { selectTabState } from '../../../global/selectors'; import { parseDateString } from '../../../util/dateFormat'; import useHistoryBack from '../../../hooks/useHistoryBack'; import useKeyboardListNavigation from '../../../hooks/useKeyboardListNavigation'; import useLang from '../../../hooks/useLang'; import TabList from '../../ui/TabList'; import Transition from '../../ui/Transition'; import AudioResults from './AudioResults'; import ChatMessageResults from './ChatMessageResults'; import ChatResults from './ChatResults'; import FileResults from './FileResults'; import LinkResults from './LinkResults'; import MediaResults from './MediaResults'; import './LeftSearch.scss'; export type OwnProps = { searchQuery?: string; searchDate?: number; isActive: boolean; onReset: () => void; }; type StateProps = { currentContent?: GlobalSearchContent; chatId?: string; }; const TABS = [ { type: GlobalSearchContent.ChatList, title: 'SearchAllChatsShort' }, { type: GlobalSearchContent.Media, title: 'SharedMediaTab2' }, { type: GlobalSearchContent.Links, title: 'SharedLinksTab2' }, { type: GlobalSearchContent.Files, title: 'SharedFilesTab2' }, { type: GlobalSearchContent.Music, title: 'SharedMusicTab2' }, { type: GlobalSearchContent.Voice, title: 'SharedVoiceTab2' }, ]; const CHAT_TABS = [ { type: GlobalSearchContent.ChatList, title: 'All Messages' }, ...TABS.slice(1), ]; const TRANSITION_RENDER_COUNT = Object.keys(GlobalSearchContent).length / 2; const LeftSearch: FC = ({ searchQuery, searchDate, isActive, currentContent = GlobalSearchContent.ChatList, chatId, onReset, }) => { const { setGlobalSearchContent, setGlobalSearchDate, } = getActions(); const lang = useLang(); const [activeTab, setActiveTab] = useState(currentContent); const dateSearchQuery = useMemo(() => parseDateString(searchQuery), [searchQuery]); const handleSwitchTab = useCallback((index: number) => { const tab = TABS[index]; setGlobalSearchContent({ content: tab.type }); setActiveTab(index); }, [setGlobalSearchContent]); const handleSearchDateSelect = useCallback((value: Date) => { setGlobalSearchDate({ date: value.getTime() / 1000 }); }, [setGlobalSearchDate]); useHistoryBack({ isActive, onBack: onReset, }); // eslint-disable-next-line no-null/no-null const containerRef = useRef(null); const handleKeyDown = useKeyboardListNavigation(containerRef, isActive, undefined, '.ListItem-button', true); return (
{(() => { switch (currentContent) { case GlobalSearchContent.ChatList: if (chatId) { return ( ); } return ( ); case GlobalSearchContent.Media: return ; case GlobalSearchContent.Links: return ; case GlobalSearchContent.Files: return ; case GlobalSearchContent.Music: return ( ); case GlobalSearchContent.Voice: return ( ); default: return undefined; } })()}
); }; export default memo(withGlobal( (global): StateProps => { const { currentContent, chatId } = selectTabState(global).globalSearch; return { currentContent, chatId }; }, )(LeftSearch));