import { RefObject } from 'react'; import React, { FC, memo, useRef, useCallback, } from '../../lib/teact/teact'; import { CHAT_HEIGHT_PX } from '../../config'; import { IS_ANDROID } from '../../util/environment'; import useInfiniteScroll from '../../hooks/useInfiniteScroll'; import useLang from '../../hooks/useLang'; import useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation'; import useInputFocusOnOpen from '../../hooks/useInputFocusOnOpen'; import { isUserId } from '../../modules/helpers'; import Loading from '../ui/Loading'; import Modal from '../ui/Modal'; import InputText from '../ui/InputText'; import Button from '../ui/Button'; import InfiniteScroll from '../ui/InfiniteScroll'; import ListItem from '../ui/ListItem'; import GroupChatInfo from './GroupChatInfo'; import PrivateChatInfo from './PrivateChatInfo'; import './ChatOrUserPicker.scss'; export type OwnProps = { currentUserId?: string; chatOrUserIds: string[]; isOpen: boolean; filterRef: RefObject; filterPlaceholder: string; filter: string; loadMore: NoneToVoidFunction; onFilterChange: (filter: string) => void; onSelectChatOrUser: (chatOrUserId: string) => void; onClose: NoneToVoidFunction; onCloseAnimationEnd?: NoneToVoidFunction; }; const ChatOrUserPicker: FC = ({ isOpen, currentUserId, chatOrUserIds, filterRef, filter, filterPlaceholder, loadMore, onFilterChange, onSelectChatOrUser, onClose, onCloseAnimationEnd, }) => { const lang = useLang(); const [viewportIds, getMore] = useInfiniteScroll(loadMore, chatOrUserIds, Boolean(filter)); const resetFilter = useCallback(() => { onFilterChange(''); }, [onFilterChange]); useInputFocusOnOpen(filterRef, isOpen, resetFilter); // eslint-disable-next-line no-null/no-null const containerRef = useRef(null); const handleFilterChange = useCallback((e: React.ChangeEvent) => { onFilterChange(e.currentTarget.value); }, [onFilterChange]); const handleKeyDown = useKeyboardListNavigation(containerRef, isOpen, (index) => { if (viewportIds && viewportIds.length > 0) { onSelectChatOrUser(viewportIds[index === -1 ? 0 : index]); } }, '.ListItem-button', true); const modalHeader = (
); const viewportOffset = chatOrUserIds!.indexOf(viewportIds![0]); return ( {viewportIds?.length ? (
{viewportIds.map((id, i) => ( onSelectChatOrUser(id)} > {isUserId(id) ? ( ) : ( )} ))}
) : viewportIds && !viewportIds.length ? (

{lang('lng_blocked_list_not_found')}

) : ( )}
); }; export default memo(ChatOrUserPicker);