import React, { useCallback, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { FlatList, Text, TextStyle, View } from 'react-native'; import { connect, useDispatch } from 'react-redux'; import { IReduxState } from '../../../app/types'; import Icon from '../../../base/icons/components/Icon'; import { IconAddUser } from '../../../base/icons/svg'; import { addPeopleFeatureControl, getParticipantById, isScreenShareParticipant, setShareDialogVisiblity } from '../../../base/participants/functions'; import Button from '../../../base/ui/components/native/Button'; import Input from '../../../base/ui/components/native/Input'; import { BUTTON_TYPES } from '../../../base/ui/constants.native'; import { getBreakoutRooms, getCurrentRoomId } from '../../../breakout-rooms/functions'; import { doInvitePeople } from '../../../invite/actions.native'; import { getInviteOthersControl } from '../../../share-room/functions'; import { iAmVisitor } from '../../../visitors/functions'; import { getSortedParticipantIds, shouldRenderInviteButton } from '../../functions'; import MeetingParticipantItem from './MeetingParticipantItem'; import styles from './styles'; interface IProps { currentRoom?: { jid: string; name: string; }; iconColor: string; isAddPeopleFeatureEnabled?: boolean | undefined; isShareDialogVisible: boolean; participantsCount?: number; showInviteButton?: boolean; sortedParticipantIds?: Array; visitorsCount?: number | undefined; } const MeetingParticipantList = ({ currentRoom, iconColor, isAddPeopleFeatureEnabled, isShareDialogVisible, participantsCount, showInviteButton, sortedParticipantIds = [], visitorsCount }: IProps): any => { const { t } = useTranslation(); const [ searchString, setSearchString ] = useState(''); const dispatch = useDispatch(); const keyExtractor = useCallback((e: undefined, i: number) => i.toString(), []); const onInvite = useCallback(() => { setShareDialogVisiblity(isAddPeopleFeatureEnabled, dispatch); dispatch(doInvitePeople()); }, [ dispatch ]); const onSearchStringChange = useCallback((text: string) => setSearchString(text), []); const title = currentRoom?.name ? `${currentRoom.name} (${participantsCount})` : t('participantsPane.headings.participantsList', { count: participantsCount }); const visitorsLabelText = visitorsCount && visitorsCount > 0 ? t('participantsPane.headings.visitors', { count: visitorsCount }) : undefined; const renderParticipant = ({ item }: any) => ( ); return ( { visitorsLabelText } { title } { showInviteButton &&