|
@@ -4,7 +4,7 @@ import { FlatList, Text, TouchableOpacity, View } from 'react-native';
|
|
|
import { Dropdown } from 'react-native-searchable-dropdown-kj';
|
|
|
import Modal from 'react-native-modal';
|
|
|
|
|
|
-import { fetchFullRanking } from '@api/ranking';
|
|
|
+import { fetchFullRanking, usePostGetCountriesRanking } from '@api/ranking';
|
|
|
|
|
|
import { styles } from './styles';
|
|
|
import { Colors } from '../../../../theme';
|
|
@@ -25,19 +25,25 @@ import type { Ranking } from '..';
|
|
|
|
|
|
type RankingDropdown = { value: number; label: string };
|
|
|
|
|
|
-const RankingDropdownObject = { value: 1, label: 'NM' };
|
|
|
-
|
|
|
const MasterRankingScreen = () => {
|
|
|
const [masterRanking, setMasterRanking] = useState<Ranking[]>([]);
|
|
|
+ const [filteredData, setFilteredData] = useState<Ranking[]>([]);
|
|
|
const { mutateAsync } = fetchFullRanking();
|
|
|
const [isLoading, setIsLoading] = useState(true);
|
|
|
const [isModalVisible, setModalVisible] = useState(false);
|
|
|
|
|
|
- const [valueAge, setValueAge] = useState<{ value: string; label: string } | null>();
|
|
|
- const [valueRanking, setValueRanking] = useState<RankingDropdown>(RankingDropdownObject);
|
|
|
- const [confirmedValueRanking, setConfirmedValueRanking] =
|
|
|
- useState<RankingDropdown>(RankingDropdownObject);
|
|
|
- const [valueCountry, setValueCountry] = useState(null);
|
|
|
+ const [valueAge, setValueAge] = useState<{
|
|
|
+ value: string;
|
|
|
+ label: string;
|
|
|
+ min: number;
|
|
|
+ max: number;
|
|
|
+ } | null>();
|
|
|
+ const [valueCountry, setValueCountry] = useState<{ two: string; name: string } | null>();
|
|
|
+
|
|
|
+ const [valueRanking, setValueRanking] = useState<RankingDropdown | null>();
|
|
|
+ const [confirmedValueRanking, setConfirmedValueRanking] = useState<RankingDropdown | null>();
|
|
|
+
|
|
|
+ const { data: masterCountries } = usePostGetCountriesRanking();
|
|
|
|
|
|
useFocusEffect(
|
|
|
useCallback(() => {
|
|
@@ -68,50 +74,86 @@ const MasterRankingScreen = () => {
|
|
|
const applySort = () => {
|
|
|
setConfirmedValueRanking(valueRanking);
|
|
|
|
|
|
- switch (valueRanking?.label) {
|
|
|
- case 'NM':
|
|
|
- setMasterRanking(masterRanking.sort((a: Ranking, b: Ranking) => b.score_nm - a.score_nm));
|
|
|
- break;
|
|
|
- case 'DARE':
|
|
|
- setMasterRanking(
|
|
|
- masterRanking.sort((a: Ranking, b: Ranking) => b.score_dare - a.score_dare)
|
|
|
- );
|
|
|
- break;
|
|
|
- case 'UN':
|
|
|
- setMasterRanking(masterRanking.sort((a: Ranking, b: Ranking) => b.score_un - a.score_un));
|
|
|
- break;
|
|
|
- case 'UN+':
|
|
|
- setMasterRanking(masterRanking.sort((a: Ranking, b: Ranking) => b.score_unp - a.score_unp));
|
|
|
- break;
|
|
|
- case 'TCC':
|
|
|
- setMasterRanking(masterRanking.sort((a: Ranking, b: Ranking) => b.score_tcc - a.score_tcc));
|
|
|
- break;
|
|
|
- case 'DEEP':
|
|
|
- //TODO: Crash
|
|
|
- setMasterRanking(
|
|
|
- masterRanking.sort((a: Ranking, b: Ranking) => b.score_deep - a.score_deep)
|
|
|
- );
|
|
|
- break;
|
|
|
- case 'YES':
|
|
|
- const validUsers = masterRanking.filter((user) => user.score_yes !== 10000);
|
|
|
- setMasterRanking(validUsers.sort((a: Ranking, b: Ranking) => a.score_yes - b.score_yes));
|
|
|
- break;
|
|
|
- case 'SLOW':
|
|
|
- const valiidUsers = masterRanking.filter(
|
|
|
- (user) => user.score_slow < 4500 && user.score_slow > 0
|
|
|
- );
|
|
|
- setMasterRanking(valiidUsers.sort((a: Ranking, b: Ranking) => b.score_slow - a.score_slow));
|
|
|
- break;
|
|
|
- case 'WHS':
|
|
|
- setMasterRanking(masterRanking.sort((a: Ranking, b: Ranking) => b.score_whs - a.score_whs));
|
|
|
- break;
|
|
|
- case 'KYE':
|
|
|
- setMasterRanking(masterRanking.sort((a: Ranking, b: Ranking) => b.score_kye - a.score_kye));
|
|
|
- break;
|
|
|
- case 'TBT':
|
|
|
- setMasterRanking(masterRanking.sort((a: Ranking, b: Ranking) => b.score_tbt - a.score_tbt));
|
|
|
- break;
|
|
|
+ let filteredLocalData = masterRanking;
|
|
|
+
|
|
|
+ if (valueAge) {
|
|
|
+ filteredLocalData = filteredLocalData.filter(
|
|
|
+ (user) => user.age >= valueAge.min && user.age <= valueAge.max
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ if (valueCountry) {
|
|
|
+ filteredLocalData = filteredLocalData.filter(
|
|
|
+ (user) => user.country === valueCountry.two.toLowerCase()
|
|
|
+ );
|
|
|
}
|
|
|
+
|
|
|
+ if (valueRanking) {
|
|
|
+ switch (valueRanking?.label) {
|
|
|
+ case 'NM':
|
|
|
+ setFilteredData(
|
|
|
+ filteredLocalData.sort((a: Ranking, b: Ranking) => b.score_nm - a.score_nm)
|
|
|
+ );
|
|
|
+ break;
|
|
|
+ case 'DARE':
|
|
|
+ setFilteredData(
|
|
|
+ filteredLocalData.sort((a: Ranking, b: Ranking) => b.score_dare - a.score_dare)
|
|
|
+ );
|
|
|
+ break;
|
|
|
+ case 'UN':
|
|
|
+ setFilteredData(
|
|
|
+ filteredLocalData.sort((a: Ranking, b: Ranking) => b.score_un - a.score_un)
|
|
|
+ );
|
|
|
+ break;
|
|
|
+ case 'UN+':
|
|
|
+ setFilteredData(
|
|
|
+ filteredLocalData.sort((a: Ranking, b: Ranking) => b.score_unp - a.score_unp)
|
|
|
+ );
|
|
|
+ break;
|
|
|
+ case 'TCC':
|
|
|
+ setFilteredData(
|
|
|
+ filteredLocalData.sort((a: Ranking, b: Ranking) => b.score_tcc - a.score_tcc)
|
|
|
+ );
|
|
|
+ break;
|
|
|
+ case 'DEEP':
|
|
|
+ //TODO: Crash
|
|
|
+ setFilteredData(
|
|
|
+ filteredLocalData.sort((a: Ranking, b: Ranking) => b.score_deep - a.score_deep)
|
|
|
+ );
|
|
|
+ break;
|
|
|
+ case 'YES':
|
|
|
+ const validUsers = masterRanking.filter((user) => user.score_yes !== 10000);
|
|
|
+ setFilteredData(validUsers.sort((a: Ranking, b: Ranking) => a.score_yes - b.score_yes));
|
|
|
+ break;
|
|
|
+ case 'SLOW':
|
|
|
+ const valiidUsers = masterRanking.filter(
|
|
|
+ (user) => user.score_slow < 4500 && user.score_slow > 0
|
|
|
+ );
|
|
|
+ setFilteredData(
|
|
|
+ valiidUsers.sort((a: Ranking, b: Ranking) => b.score_slow - a.score_slow)
|
|
|
+ );
|
|
|
+ break;
|
|
|
+ case 'WHS':
|
|
|
+ setFilteredData(
|
|
|
+ filteredLocalData.sort((a: Ranking, b: Ranking) => b.score_whs - a.score_whs)
|
|
|
+ );
|
|
|
+ break;
|
|
|
+ case 'KYE':
|
|
|
+ setFilteredData(
|
|
|
+ filteredLocalData.sort((a: Ranking, b: Ranking) => b.score_kye - a.score_kye)
|
|
|
+ );
|
|
|
+ break;
|
|
|
+ case 'TBT':
|
|
|
+ setFilteredData(
|
|
|
+ filteredLocalData.sort((a: Ranking, b: Ranking) => b.score_tbt - a.score_tbt)
|
|
|
+ );
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ setFilteredData(filteredLocalData);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ setFilteredData(filteredLocalData);
|
|
|
};
|
|
|
|
|
|
return (
|
|
@@ -134,6 +176,7 @@ const MasterRankingScreen = () => {
|
|
|
placeholderStyle={styles.placeholderStyle}
|
|
|
selectedTextStyle={styles.selectedTextStyle}
|
|
|
data={dataAge}
|
|
|
+ disable={!getOnlineStatus()}
|
|
|
labelField="label"
|
|
|
valueField="value"
|
|
|
placeholder="Select age"
|
|
@@ -150,7 +193,7 @@ const MasterRankingScreen = () => {
|
|
|
labelField="label"
|
|
|
valueField="value"
|
|
|
placeholder="Select ranking"
|
|
|
- value={valueRanking.value}
|
|
|
+ value={valueRanking?.value}
|
|
|
onChange={(item) => {
|
|
|
setValueRanking(item);
|
|
|
}}
|
|
@@ -160,13 +203,14 @@ const MasterRankingScreen = () => {
|
|
|
style={[styles.dropdown, { width: '100%', marginTop: 15 }]}
|
|
|
placeholderStyle={styles.placeholderStyle}
|
|
|
selectedTextStyle={styles.selectedTextStyle}
|
|
|
- data={[]}
|
|
|
- labelField="label"
|
|
|
- valueField="value"
|
|
|
+ data={masterCountries ? masterCountries.data : []}
|
|
|
+ disable={!getOnlineStatus()}
|
|
|
+ labelField="name"
|
|
|
+ valueField="two"
|
|
|
placeholder="Select country"
|
|
|
- value={valueRanking?.value}
|
|
|
+ value={valueCountry?.two}
|
|
|
onChange={(item) => {
|
|
|
- //todo: Country
|
|
|
+ setValueCountry(item);
|
|
|
}}
|
|
|
/>
|
|
|
<View style={styles.buttonsWrapper}>
|
|
@@ -182,7 +226,8 @@ const MasterRankingScreen = () => {
|
|
|
}}
|
|
|
onPress={() => {
|
|
|
setValueAge(null);
|
|
|
- setValueRanking(RankingDropdownObject);
|
|
|
+ setValueCountry(null);
|
|
|
+ setValueRanking(null);
|
|
|
}}
|
|
|
children={'Clear'}
|
|
|
/>
|
|
@@ -219,7 +264,7 @@ const MasterRankingScreen = () => {
|
|
|
|
|
|
<FlatList
|
|
|
showsVerticalScrollIndicator={false}
|
|
|
- data={masterRanking}
|
|
|
+ data={filteredData.length != 0 ? filteredData : masterRanking}
|
|
|
keyExtractor={(item) => item.user_id.toString()}
|
|
|
renderItem={({ item, index }) => (
|
|
|
<Profile
|
|
@@ -245,7 +290,9 @@ const MasterRankingScreen = () => {
|
|
|
item.score_kye
|
|
|
]}
|
|
|
tbt_score={item.score_tbt}
|
|
|
- active_score={confirmedValueRanking.value - 1}
|
|
|
+ active_score={
|
|
|
+ confirmedValueRanking ? confirmedValueRanking.value - 1 : dataRanking[0].value - 1
|
|
|
+ }
|
|
|
tbt_rank={item.rank_tbt}
|
|
|
badge_tbt={item.badge_tbt}
|
|
|
badge_1281={item.badge_1281}
|