import type { FC } from '../../../lib/teact/teact'; import { memo, useCallback, useMemo } from '../../../lib/teact/teact'; import { getActions, getGlobal, withGlobal } from '../../../global'; import { isUserBot } from '../../../global/helpers'; import { filterPeersByQuery } from '../../../global/helpers/peers'; import { selectTabState } from '../../../global/selectors'; import { unique } from '../../../util/iteratees'; import sortChatIds from '../../common/helpers/sortChatIds'; import useHistoryBack from '../../../hooks/useHistoryBack'; import useOldLang from '../../../hooks/useOldLang'; import Icon from '../../common/icons/Icon'; import PeerPicker from '../../common/pickers/PeerPicker'; import Button from '../../ui/Button'; import FloatingActionButton from '../../ui/FloatingActionButton'; export type OwnProps = { isChannel?: boolean; isActive: boolean; selectedMemberIds: string[]; onSelectedMemberIdsChange: (ids: string[]) => void; onNextStep: () => void; onReset: () => void; }; type StateProps = { localContactIds?: string[]; searchQuery?: string; isSearching?: boolean; localPeerIds?: string[]; globalPeerIds?: string[]; }; const NewChatStep1: FC = ({ isChannel, isActive, selectedMemberIds, localContactIds, searchQuery, isSearching, localPeerIds, globalPeerIds, onSelectedMemberIdsChange, onNextStep, onReset, }) => { const { setGlobalSearchQuery, } = getActions(); const lang = useOldLang(); useHistoryBack({ isActive, onBack: onReset, }); const handleFilterChange = useCallback((query: string) => { setGlobalSearchQuery({ query }); }, []); const displayedIds = useMemo(() => { // No need for expensive global updates on users, so we avoid them const usersById = getGlobal().users.byId; const foundContactIds = localContactIds ? filterPeersByQuery({ ids: localContactIds, query: searchQuery, type: 'user' }) : []; return sortChatIds( unique([ ...foundContactIds, ...(localPeerIds || []), ...(globalPeerIds || []), ]).filter((contactId) => { const user = usersById[contactId]; return user && !user.isSelf && (user.canBeInvitedToGroup || !isUserBot(user)); }), false, selectedMemberIds, ); }, [localContactIds, searchQuery, localPeerIds, globalPeerIds, selectedMemberIds]); const handleNextStep = useCallback(() => { setGlobalSearchQuery({ query: '' }); onNextStep(); }, [onNextStep]); return (

{lang('GroupAddMembers')}

); }; export default memo(withGlobal( (global): Complete => { const { userIds: localContactIds } = global.contactList || {}; const { query: searchQuery, fetchingStatus, globalResults, localResults, } = selectTabState(global).globalSearch; const { peerIds: globalPeerIds } = globalResults || {}; const { peerIds: localPeerIds } = localResults || {}; return { localContactIds, searchQuery, isSearching: fetchingStatus?.chats, globalPeerIds, localPeerIds, }; }, )(NewChatStep1));