|
@@ -1,5 +1,5 @@
|
|
import React, { useEffect, useState } from 'react';
|
|
import React, { useEffect, useState } from 'react';
|
|
-import { View, Text, TouchableOpacity, Image, Switch } from 'react-native';
|
|
|
|
|
|
+import { View, Text, TouchableOpacity, Image, Switch, Dimensions } from 'react-native';
|
|
import ReactModal from 'react-native-modal';
|
|
import ReactModal from 'react-native-modal';
|
|
import { Colors } from 'src/theme';
|
|
import { Colors } from 'src/theme';
|
|
import { ModalStyles } from '../../TravellersScreen/Components/styles';
|
|
import { ModalStyles } from '../../TravellersScreen/Components/styles';
|
|
@@ -25,7 +25,8 @@ const FilterModal = ({
|
|
userId,
|
|
userId,
|
|
setVisitedTiles,
|
|
setVisitedTiles,
|
|
setSeriesFilter,
|
|
setSeriesFilter,
|
|
- isPublicView
|
|
|
|
|
|
+ isPublicView,
|
|
|
|
+ isLogged = true
|
|
}: {
|
|
}: {
|
|
isFilterVisible: boolean;
|
|
isFilterVisible: boolean;
|
|
setIsFilterVisible: (isVisible: boolean) => void;
|
|
setIsFilterVisible: (isVisible: boolean) => void;
|
|
@@ -38,6 +39,7 @@ const FilterModal = ({
|
|
setVisitedTiles: (tiles: string) => void;
|
|
setVisitedTiles: (tiles: string) => void;
|
|
setSeriesFilter?: (filter: any) => void;
|
|
setSeriesFilter?: (filter: any) => void;
|
|
isPublicView: boolean;
|
|
isPublicView: boolean;
|
|
|
|
+ isLogged: boolean;
|
|
}) => {
|
|
}) => {
|
|
const [index, setIndex] = useState(0);
|
|
const [index, setIndex] = useState(0);
|
|
const [selectedYear, setSelectedYear] = useState<{ label: string; value: number } | null>(null);
|
|
const [selectedYear, setSelectedYear] = useState<{ label: string; value: number } | null>(null);
|
|
@@ -51,7 +53,7 @@ const FilterModal = ({
|
|
{ key: 'regions', title: 'NM / UN / DARE' },
|
|
{ key: 'regions', title: 'NM / UN / DARE' },
|
|
{ key: 'series', title: 'Series' }
|
|
{ key: 'series', title: 'Series' }
|
|
]);
|
|
]);
|
|
- const { data } = usePostGetMapYearsQuery(userId, true);
|
|
|
|
|
|
+ const { data } = usePostGetMapYearsQuery(userId, isLogged ? true : false);
|
|
const { data: seriesList } = useGetListQuery(true);
|
|
const { data: seriesList } = useGetListQuery(true);
|
|
const [series, setSeries] = useState<{ label: string; value: number }[]>([]);
|
|
const [series, setSeries] = useState<{ label: string; value: number }[]>([]);
|
|
const [selectedSeries, setSelectedSeries] = useState<number[]>([]);
|
|
const [selectedSeries, setSelectedSeries] = useState<number[]>([]);
|
|
@@ -82,10 +84,14 @@ const FilterModal = ({
|
|
}
|
|
}
|
|
}, [seriesList]);
|
|
}, [seriesList]);
|
|
|
|
|
|
- if (!data) return;
|
|
|
|
|
|
+ if (!data && isLogged) return;
|
|
|
|
|
|
const handleApplyFilter = () => {
|
|
const handleApplyFilter = () => {
|
|
let tileUrl = `${FASTEST_MAP_HOST}/tiles_nm/`;
|
|
let tileUrl = `${FASTEST_MAP_HOST}/tiles_nm/`;
|
|
|
|
+ if (!isLogged) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (!selectedYear) {
|
|
if (!selectedYear) {
|
|
if (tilesType.value === 0) {
|
|
if (tilesType.value === 0) {
|
|
tileUrl += 'user_visited/' + userId;
|
|
tileUrl += 'user_visited/' + userId;
|
|
@@ -139,7 +145,7 @@ const FilterModal = ({
|
|
</View>
|
|
</View>
|
|
</View>
|
|
</View>
|
|
|
|
|
|
- {tilesType.value !== 2 && allYears.length ? (
|
|
|
|
|
|
+ {tilesType.value !== 2 && allYears.length && isLogged ? (
|
|
<View style={styles.rowWrapper}>
|
|
<View style={styles.rowWrapper}>
|
|
<View style={styles.dropdownWrapper}>
|
|
<View style={styles.dropdownWrapper}>
|
|
<Dropdown
|
|
<Dropdown
|
|
@@ -215,53 +221,73 @@ const FilterModal = ({
|
|
<Text style={styles.textBold}>Visible / Not visible</Text>
|
|
<Text style={styles.textBold}>Visible / Not visible</Text>
|
|
</View>
|
|
</View>
|
|
|
|
|
|
- <View style={[styles.row, { justifyContent: 'space-between' }]}>
|
|
|
|
- <TouchableOpacity style={styles.row} onPress={() => setSelectedSeriesFilter(-1)}>
|
|
|
|
- <RadioButton.Android
|
|
|
|
- value="all"
|
|
|
|
- status={selectedSeriesFilter === -1 ? 'checked' : 'unchecked'}
|
|
|
|
- onPress={() => setSelectedSeriesFilter(-1)}
|
|
|
|
- color={Colors.DARK_BLUE}
|
|
|
|
- />
|
|
|
|
- <Text style={styles.textBold}>All items</Text>
|
|
|
|
- </TouchableOpacity>
|
|
|
|
|
|
+ {isLogged ? (
|
|
|
|
+ <View style={[styles.row, { justifyContent: 'space-between' }]}>
|
|
|
|
+ <TouchableOpacity style={styles.row} onPress={() => setSelectedSeriesFilter(-1)}>
|
|
|
|
+ <RadioButton.Android
|
|
|
|
+ value="all"
|
|
|
|
+ status={selectedSeriesFilter === -1 ? 'checked' : 'unchecked'}
|
|
|
|
+ onPress={() => setSelectedSeriesFilter(-1)}
|
|
|
|
+ color={Colors.DARK_BLUE}
|
|
|
|
+ />
|
|
|
|
+ <Text style={styles.textBold}>All items</Text>
|
|
|
|
+ </TouchableOpacity>
|
|
|
|
|
|
- <TouchableOpacity style={styles.row} onPress={() => setSelectedSeriesFilter(1)}>
|
|
|
|
- <RadioButton.Android
|
|
|
|
- value="visited"
|
|
|
|
- status={selectedSeriesFilter === 1 ? 'checked' : 'unchecked'}
|
|
|
|
- onPress={() => setSelectedSeriesFilter(1)}
|
|
|
|
- color={Colors.DARK_BLUE}
|
|
|
|
- />
|
|
|
|
- <Text style={styles.textBold}>Visited</Text>
|
|
|
|
- </TouchableOpacity>
|
|
|
|
|
|
+ <TouchableOpacity style={styles.row} onPress={() => setSelectedSeriesFilter(1)}>
|
|
|
|
+ <RadioButton.Android
|
|
|
|
+ value="visited"
|
|
|
|
+ status={selectedSeriesFilter === 1 ? 'checked' : 'unchecked'}
|
|
|
|
+ onPress={() => setSelectedSeriesFilter(1)}
|
|
|
|
+ color={Colors.DARK_BLUE}
|
|
|
|
+ />
|
|
|
|
+ <Text style={styles.textBold}>Visited</Text>
|
|
|
|
+ </TouchableOpacity>
|
|
|
|
|
|
- <TouchableOpacity style={styles.row} onPress={() => setSelectedSeriesFilter(0)}>
|
|
|
|
- <RadioButton.Android
|
|
|
|
- value="not-visited"
|
|
|
|
- status={selectedSeriesFilter === 0 ? 'checked' : 'unchecked'}
|
|
|
|
- onPress={() => setSelectedSeriesFilter(0)}
|
|
|
|
- color={Colors.DARK_BLUE}
|
|
|
|
- />
|
|
|
|
- <Text style={styles.textBold}>Not visited</Text>
|
|
|
|
- </TouchableOpacity>
|
|
|
|
- </View>
|
|
|
|
|
|
+ <TouchableOpacity style={styles.row} onPress={() => setSelectedSeriesFilter(0)}>
|
|
|
|
+ <RadioButton.Android
|
|
|
|
+ value="not-visited"
|
|
|
|
+ status={selectedSeriesFilter === 0 ? 'checked' : 'unchecked'}
|
|
|
|
+ onPress={() => setSelectedSeriesFilter(0)}
|
|
|
|
+ color={Colors.DARK_BLUE}
|
|
|
|
+ />
|
|
|
|
+ <Text style={styles.textBold}>Not visited</Text>
|
|
|
|
+ </TouchableOpacity>
|
|
|
|
+ </View>
|
|
|
|
+ ) : null}
|
|
|
|
|
|
<MultiSelect
|
|
<MultiSelect
|
|
style={[ModalStyles.dropdown, { width: '100%' }]}
|
|
style={[ModalStyles.dropdown, { width: '100%' }]}
|
|
placeholderStyle={[ModalStyles.placeholderStyle]}
|
|
placeholderStyle={[ModalStyles.placeholderStyle]}
|
|
selectedTextStyle={ModalStyles.selectedTextStyle}
|
|
selectedTextStyle={ModalStyles.selectedTextStyle}
|
|
containerStyle={[ModalStyles.dropdownContent, {}]}
|
|
containerStyle={[ModalStyles.dropdownContent, {}]}
|
|
- data={series}
|
|
|
|
|
|
+ data={[
|
|
|
|
+ { label: 'Select all', value: 'all' },
|
|
|
|
+ { label: 'Select none', value: 'none' },
|
|
|
|
+ ...series
|
|
|
|
+ ]}
|
|
labelField="label"
|
|
labelField="label"
|
|
valueField="value"
|
|
valueField="value"
|
|
value={selectedSeries}
|
|
value={selectedSeries}
|
|
placeholder="Select series"
|
|
placeholder="Select series"
|
|
dropdownPosition="top"
|
|
dropdownPosition="top"
|
|
activeColor="#E7E7E7"
|
|
activeColor="#E7E7E7"
|
|
|
|
+ search={true}
|
|
|
|
+ searchPlaceholder="Search"
|
|
|
|
+ inputSearchStyle={ModalStyles.search}
|
|
|
|
+ searchQuery={(keyword, item) =>
|
|
|
|
+ item.toLowerCase().includes(keyword.toLowerCase()) &&
|
|
|
|
+ item !== 'Select all' &&
|
|
|
|
+ item !== 'Select none'
|
|
|
|
+ }
|
|
flatListProps={{ initialNumToRender: 30, maxToRenderPerBatch: 10 }}
|
|
flatListProps={{ initialNumToRender: 30, maxToRenderPerBatch: 10 }}
|
|
onChange={(item) => {
|
|
onChange={(item) => {
|
|
- setSelectedSeries(item);
|
|
|
|
|
|
+ if (item.includes('all')) {
|
|
|
|
+ setSelectedSeries(series.map((item) => item.value));
|
|
|
|
+ } else if (item.includes('none')) {
|
|
|
|
+ setSelectedSeries([]);
|
|
|
|
+ } else {
|
|
|
|
+ setSelectedSeries(item);
|
|
|
|
+ }
|
|
}}
|
|
}}
|
|
renderItem={(item) => (
|
|
renderItem={(item) => (
|
|
<View style={styles.multiOption}>
|
|
<View style={styles.multiOption}>
|
|
@@ -312,6 +338,8 @@ const FilterModal = ({
|
|
);
|
|
);
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ const isSmallScreen = Dimensions.get('window').width < 383;
|
|
|
|
+
|
|
return (
|
|
return (
|
|
<ReactModal
|
|
<ReactModal
|
|
isVisible={isFilterVisible}
|
|
isVisible={isFilterVisible}
|
|
@@ -340,7 +368,11 @@ const FilterModal = ({
|
|
<Text
|
|
<Text
|
|
style={[
|
|
style={[
|
|
styles.tabLabel,
|
|
styles.tabLabel,
|
|
- { color: Colors.DARK_BLUE, opacity: focused ? 1 : 0.4 }
|
|
|
|
|
|
+ {
|
|
|
|
+ color: Colors.DARK_BLUE,
|
|
|
|
+ opacity: focused ? 1 : 0.4,
|
|
|
|
+ fontSize: isSmallScreen ? 13 : 14
|
|
|
|
+ }
|
|
]}
|
|
]}
|
|
>
|
|
>
|
|
{route.title}
|
|
{route.title}
|