import React, { FC, useEffect, useState, useRef } from 'react'; import { View, StyleSheet, Dimensions } from 'react-native'; import { NavigationProp, useFocusEffect } from '@react-navigation/native'; import { storage, StoreType } from 'src/storage'; import { PageWrapper, Header, Input, WarningModal } from 'src/components'; import { usePostGetGroupMembersQuery, usePostGetGroupSettingsQuery } from '@api/chat'; import { Colors } from 'src/theme'; import UserOptionsModal from '../Components/UserOptionsModal'; import { FlashList } from '@shopify/flash-list'; import SearchIcon from 'assets/icons/search.svg'; import { dataRanking } from '../../TravellersScreen/utils'; import { RankingDropdown, FilterModalRef } from '../../TravellersScreen/utils/types'; import { FilterButton, FilterModal } from '../../TravellersScreen/Components/FilterModal'; import { usePostGetCountriesRanking } from '@api/ranking'; import { Profile } from '../Components/Profile'; import { applyModalSort } from '../applySort'; type Props = { navigation: NavigationProp; route: any; }; const MembersListScreen: FC = ({ navigation, route }) => { const token = storage.get('token', StoreType.STRING) as string; const { groupToken, canChangeAdmin } = route.params; const [modalState, setModalState] = useState({ isWarningVisible: false, title: '', buttonTitle: '', message: '', action: () => {} }); const [searchQuery, setSearchQuery] = useState(''); const [filteredData, setFilteredData] = useState([]); const { data, refetch } = usePostGetGroupSettingsQuery(token, groupToken, true); const { data: members, refetch: refetchMembers } = usePostGetGroupMembersQuery( token, groupToken, true ); const { data: masterCountries } = usePostGetCountriesRanking(); const [confirmedValueRanking, setConfirmedValueRanking] = useState(); const filterRef = useRef(null); useFocusEffect(() => { navigation.getParent()?.setOptions({ tabBarStyle: { display: 'none' } }); }); useEffect(() => { if (members && members.settings && members.settings) { setFilteredData(members.settings); } }, [members]); const handleSearch = (text: string) => { if (text && members) { const searchData = members?.settings?.filter((item: any) => { const itemData = item.ranking_data ? item.ranking_data.first_name.toLowerCase() + ' ' + item.ranking_data.last_name.toLowerCase() : ''.toLowerCase(); const textData = text.toLowerCase(); return itemData.indexOf(textData) > -1; }) ?? []; setFilteredData(searchData); setSearchQuery(text); } else { setFilteredData(members?.settings ?? []); setSearchQuery(text); } }; return (
filterRef.current?.toggle()} />} /> { setConfirmedValueRanking(filterRanking); setFilteredData( applyModalSort( (members?.settings as any) ?? [], filterAge, filterRanking ?? dataRanking[0], filterCountry ) ); }} countriesData={masterCountries ? masterCountries.data : []} /> } /> ( )} keyExtractor={(item) => item.uid.toString()} contentContainerStyle={{ paddingBottom: 16, paddingTop: 8 }} showsVerticalScrollIndicator={false} /> setModalState({ ...modalState, isWarningVisible: false })} title={modalState.title} /> ); }; const styles = StyleSheet.create({ container: { backgroundColor: 'white', gap: 16, flex: 1 }, avatar: { width: 30, height: 30, borderRadius: 15, borderWidth: 1, borderColor: Colors.LIGHT_GRAY }, header: { paddingTop: 16, paddingHorizontal: 6, width: 68 }, userItem: { flexDirection: 'row', alignItems: 'center', paddingVertical: 8, paddingHorizontal: 12, backgroundColor: Colors.FILL_LIGHT, gap: 8, borderRadius: 8, marginBottom: 6 } }); export default MembersListScreen;