|
@@ -14,18 +14,20 @@ import * as turf from '@turf/turf';
|
|
import * as FileSystem from 'expo-file-system';
|
|
import * as FileSystem from 'expo-file-system';
|
|
import * as Location from 'expo-location';
|
|
import * as Location from 'expo-location';
|
|
import { storage, StoreType } from '../../../storage';
|
|
import { storage, StoreType } from '../../../storage';
|
|
|
|
+import Modal from 'react-native-modal';
|
|
|
|
|
|
import MenuIcon from '../../../../assets/icons/menu.svg';
|
|
import MenuIcon from '../../../../assets/icons/menu.svg';
|
|
import SearchIcon from '../../../../assets/icons/search.svg';
|
|
import SearchIcon from '../../../../assets/icons/search.svg';
|
|
import RadarIcon from '../../../../assets/icons/radar.svg';
|
|
import RadarIcon from '../../../../assets/icons/radar.svg';
|
|
import LocationIcon from '../../../../assets/icons/location.svg';
|
|
import LocationIcon from '../../../../assets/icons/location.svg';
|
|
import CloseSvg from '../../../../assets/icons/close.svg';
|
|
import CloseSvg from '../../../../assets/icons/close.svg';
|
|
|
|
+import FilterIcon from 'assets/icons/filter.svg';
|
|
|
|
|
|
import regions from '../../../../assets/geojson/nm2022.json';
|
|
import regions from '../../../../assets/geojson/nm2022.json';
|
|
import jsonData, { fetchJsonData } from '../../../database/geojsonService';
|
|
import jsonData, { fetchJsonData } from '../../../database/geojsonService';
|
|
|
|
|
|
import { getFirstDatabase, getSecondDatabase, refreshDatabases } from '../../../db';
|
|
import { getFirstDatabase, getSecondDatabase, refreshDatabases } from '../../../db';
|
|
-import { LocationPopup, WarningModal, EditNmModal } from '../../../components';
|
|
|
|
|
|
+import { LocationPopup, WarningModal, EditNmModal, Button } from '../../../components';
|
|
|
|
|
|
import { styles } from './style';
|
|
import { styles } from './style';
|
|
import {
|
|
import {
|
|
@@ -55,6 +57,10 @@ import { useSharedValue, useAnimatedStyle, withTiming } from 'react-native-reani
|
|
import { Colors } from 'src/theme';
|
|
import { Colors } from 'src/theme';
|
|
import { useGetUniversalSearch } from '@api/search';
|
|
import { useGetUniversalSearch } from '@api/search';
|
|
import SearchModal from './UniversalSearch';
|
|
import SearchModal from './UniversalSearch';
|
|
|
|
+import { Dropdown } from 'react-native-searchable-dropdown-kj';
|
|
|
|
+import { ButtonVariants } from 'src/types/components';
|
|
|
|
+import { ModalStyles } from '../TravellersScreen/Components/styles';
|
|
|
|
+import FilterModal from './FilterModal';
|
|
|
|
|
|
const localTileDir = `${FileSystem.cacheDirectory}tiles/background`;
|
|
const localTileDir = `${FileSystem.cacheDirectory}tiles/background`;
|
|
const localGridDir = `${FileSystem.cacheDirectory}tiles/grid`;
|
|
const localGridDir = `${FileSystem.cacheDirectory}tiles/grid`;
|
|
@@ -80,6 +86,7 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation }) => {
|
|
const { mutate: updateNM } = usePostSetNmRegionMutation();
|
|
const { mutate: updateNM } = usePostSetNmRegionMutation();
|
|
const { mutate: updateDARE } = usePostSetDareRegionMutation();
|
|
const { mutate: updateDARE } = usePostSetDareRegionMutation();
|
|
const visitedTiles = `${FASTEST_MAP_HOST}/tiles_nm/user_visited/${userId}`;
|
|
const visitedTiles = `${FASTEST_MAP_HOST}/tiles_nm/user_visited/${userId}`;
|
|
|
|
+ const visitedUNTiles = `${FASTEST_MAP_HOST}/tiles_nm/user_visited_un/${userId}`;
|
|
const mapRef = useRef<MapView>(null);
|
|
const mapRef = useRef<MapView>(null);
|
|
|
|
|
|
const [isConnected, setIsConnected] = useState<boolean | null>(true);
|
|
const [isConnected, setIsConnected] = useState<boolean | null>(true);
|
|
@@ -109,6 +116,13 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation }) => {
|
|
const [search, setSearch] = useState('');
|
|
const [search, setSearch] = useState('');
|
|
const [searchInput, setSearchInput] = useState('');
|
|
const [searchInput, setSearchInput] = useState('');
|
|
const { data: searchData } = useGetUniversalSearch(search);
|
|
const { data: searchData } = useGetUniversalSearch(search);
|
|
|
|
+ const [isFilterVisible, setIsFilterVisible] = useState(false);
|
|
|
|
+ const [tilesType, setTilesType] = useState({ label: 'NM regions', value: 0 });
|
|
|
|
+ const tilesTypes = [
|
|
|
|
+ { label: 'NM regions', value: 0 },
|
|
|
|
+ { label: 'UN countries', value: 1 }
|
|
|
|
+ ];
|
|
|
|
+ const [type, setType] = useState(0);
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
if (!dareData) {
|
|
if (!dareData) {
|
|
@@ -707,7 +721,8 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation }) => {
|
|
{renderedGeoJSON}
|
|
{renderedGeoJSON}
|
|
{renderMapTiles(tilesBaseURL, localTileDir, 1)}
|
|
{renderMapTiles(tilesBaseURL, localTileDir, 1)}
|
|
{renderMapTiles(gridUrl, localGridDir, 2)}
|
|
{renderMapTiles(gridUrl, localGridDir, 2)}
|
|
- {userId && renderMapTiles(visitedTiles, localVisitedDir, 2, 0.5)}
|
|
|
|
|
|
+ {userId &&
|
|
|
|
+ renderMapTiles(type === 1 ? visitedUNTiles : visitedTiles, localVisitedDir, 2, 0.5)}
|
|
{renderMapTiles(dareTiles, localDareDir, 2, 0.5)}
|
|
{renderMapTiles(dareTiles, localDareDir, 2, 0.5)}
|
|
{location && (
|
|
{location && (
|
|
<AnimatedMarker coordinate={location} anchor={{ x: 0.5, y: 0.5 }}>
|
|
<AnimatedMarker coordinate={location} anchor={{ x: 0.5, y: 0.5 }}>
|
|
@@ -790,6 +805,7 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation }) => {
|
|
placeholderTextColor={Colors.LIGHT_GRAY}
|
|
placeholderTextColor={Colors.LIGHT_GRAY}
|
|
value={searchInput}
|
|
value={searchInput}
|
|
onChangeText={(text) => setSearchInput(text)}
|
|
onChangeText={(text) => setSearchInput(text)}
|
|
|
|
+ onSubmitEditing={handleSearch}
|
|
/>
|
|
/>
|
|
<TouchableOpacity onPress={handleSearch} style={styles.iconButton}>
|
|
<TouchableOpacity onPress={handleSearch} style={styles.iconButton}>
|
|
<SearchIcon fill={'#0F3F4F'} />
|
|
<SearchIcon fill={'#0F3F4F'} />
|
|
@@ -802,11 +818,12 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation }) => {
|
|
)}
|
|
)}
|
|
</Animated.View>
|
|
</Animated.View>
|
|
|
|
|
|
- {/* <TouchableOpacity
|
|
|
|
|
|
+ <TouchableOpacity
|
|
style={[styles.cornerButton, styles.bottomButton, styles.bottomLeftButton]}
|
|
style={[styles.cornerButton, styles.bottomButton, styles.bottomLeftButton]}
|
|
|
|
+ onPress={() => setIsFilterVisible(true)}
|
|
>
|
|
>
|
|
- <RadarIcon />
|
|
|
|
- </TouchableOpacity> */}
|
|
|
|
|
|
+ <FilterIcon />
|
|
|
|
+ </TouchableOpacity>
|
|
|
|
|
|
<TouchableOpacity
|
|
<TouchableOpacity
|
|
onPress={handleGetLocation}
|
|
onPress={handleGetLocation}
|
|
@@ -837,6 +854,16 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation }) => {
|
|
setIndex={setIndex}
|
|
setIndex={setIndex}
|
|
token={token}
|
|
token={token}
|
|
/>
|
|
/>
|
|
|
|
+ <FilterModal
|
|
|
|
+ isFilterVisible={isFilterVisible}
|
|
|
|
+ setIsFilterVisible={setIsFilterVisible}
|
|
|
|
+ tilesTypes={tilesTypes}
|
|
|
|
+ tilesType={tilesType}
|
|
|
|
+ setTilesType={setTilesType}
|
|
|
|
+ type={type}
|
|
|
|
+ setType={setType}
|
|
|
|
+
|
|
|
|
+ />
|
|
</View>
|
|
</View>
|
|
);
|
|
);
|
|
};
|
|
};
|