|
|
@@ -1,4 +1,4 @@
|
|
|
-import { useCallback, useEffect, useRef } from 'react';
|
|
|
+import { useCallback, useEffect, useRef, useState } from 'react';
|
|
|
import { Text, TouchableOpacity, View, Image, Animated, Dimensions, Platform } from 'react-native';
|
|
|
import MarkIcon from 'assets/icons/mark.svg';
|
|
|
import EditSvg from 'assets/icons/travels-screens/pen-to-square.svg';
|
|
|
@@ -13,6 +13,8 @@ import { Colors } from 'src/theme';
|
|
|
import { useFocusEffect, useNavigation } from '@react-navigation/native';
|
|
|
import { NAVIGATION_PAGES } from 'src/types';
|
|
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
|
+import { useRegion } from 'src/contexts/RegionContext';
|
|
|
+import { AddVisitModal } from '../AddVisitModal';
|
|
|
|
|
|
interface Region {
|
|
|
id: number;
|
|
|
@@ -41,6 +43,7 @@ interface RegionPopupProps {
|
|
|
disabled?: boolean;
|
|
|
updateSlow: (id: number, v: boolean, s11: boolean, s31: boolean, s101: boolean) => void;
|
|
|
openEditSlowModal: () => void;
|
|
|
+ onAddVisitSuccess?: (id: number) => void;
|
|
|
}
|
|
|
|
|
|
const RegionPopup: React.FC<RegionPopupProps> = ({
|
|
|
@@ -52,8 +55,11 @@ const RegionPopup: React.FC<RegionPopupProps> = ({
|
|
|
updateDare,
|
|
|
disabled,
|
|
|
updateSlow,
|
|
|
- openEditSlowModal
|
|
|
+ openEditSlowModal,
|
|
|
+ onAddVisitSuccess
|
|
|
}) => {
|
|
|
+ const { handleAddVisitNM } = useRegion();
|
|
|
+ const [isAddVisitModalVisible, setIsAddVisitModalVisible] = useState(false);
|
|
|
const fadeAnim = useRef(new Animated.Value(0)).current;
|
|
|
const navigation = useNavigation();
|
|
|
const insets = useSafeAreaInsets();
|
|
|
@@ -261,83 +267,119 @@ const RegionPopup: React.FC<RegionPopupProps> = ({
|
|
|
<EditSvg width={14} height={14} />
|
|
|
</TouchableOpacity>
|
|
|
) : null}
|
|
|
- <TouchableOpacity
|
|
|
- style={[
|
|
|
- styles.btn,
|
|
|
- (userData?.visited && !disabled) || userData.edit_in_trips === 1
|
|
|
- ? styles.visitedButton
|
|
|
- : styles.markVisitedButton
|
|
|
- ]}
|
|
|
- onPress={() => {
|
|
|
- if (
|
|
|
- userData?.visited &&
|
|
|
- !disabled &&
|
|
|
- userData?.type === 'countries' &&
|
|
|
- userData?.visited_regions > 1
|
|
|
- ) {
|
|
|
- navigation.navigate(
|
|
|
- ...([
|
|
|
- NAVIGATION_PAGES.EDIT_COUNTRY_DATA,
|
|
|
- {
|
|
|
- countryId: region.id,
|
|
|
- countryName: regionTitle,
|
|
|
- countryFlag: userData?.flag,
|
|
|
- slow11: userData?.slow11,
|
|
|
- slow31: userData?.slow31,
|
|
|
- slow101: userData?.slow101,
|
|
|
- isSlowList: false
|
|
|
- }
|
|
|
- ] as never)
|
|
|
- );
|
|
|
- return;
|
|
|
- } else if (userData?.type === 'nm' && userData?.edit_in_trips === 1) {
|
|
|
- openEditModal();
|
|
|
- return;
|
|
|
- }
|
|
|
+ {userData?.type === 'nm' ? (
|
|
|
+ <View style={{ flexDirection: 'row', gap: 8, justifyContent: 'flex-end', alignItems: 'center' }}>
|
|
|
+ {(userData?.visited || userData?.edit_in_trips === 1) && !disabled && (
|
|
|
+ <TouchableOpacity
|
|
|
+ onPress={openEditModal}
|
|
|
+ style={[styles.btn, styles.visitedButton]}
|
|
|
+ >
|
|
|
+ <View style={styles.visitedContainer}>
|
|
|
+ <EditSvg width={14} height={14} />
|
|
|
+ <Text style={styles.visitedButtonText}>Edit</Text>
|
|
|
+ </View>
|
|
|
+ </TouchableOpacity>
|
|
|
+ )}
|
|
|
+ {!disabled && (
|
|
|
+ <TouchableOpacity
|
|
|
+ style={[styles.btn, styles.markVisitedButton, { width: 110 }]}
|
|
|
+ onPress={() => setIsAddVisitModalVisible(true)}
|
|
|
+ >
|
|
|
+ <Text style={[styles.markVisitedButtonText, { textAlign: 'center' }]}>Add visit</Text>
|
|
|
+ </TouchableOpacity>
|
|
|
+ )}
|
|
|
+ </View>
|
|
|
+ ) : (
|
|
|
+ <TouchableOpacity
|
|
|
+ style={[
|
|
|
+ styles.btn,
|
|
|
+ (userData?.visited && !disabled) || userData.edit_in_trips === 1
|
|
|
+ ? styles.visitedButton
|
|
|
+ : styles.markVisitedButton
|
|
|
+ ]}
|
|
|
+ onPress={() => {
|
|
|
+ if (
|
|
|
+ userData?.visited &&
|
|
|
+ !disabled &&
|
|
|
+ userData?.type === 'countries' &&
|
|
|
+ userData?.visited_regions > 1
|
|
|
+ ) {
|
|
|
+ navigation.navigate(
|
|
|
+ ...([
|
|
|
+ NAVIGATION_PAGES.EDIT_COUNTRY_DATA,
|
|
|
+ {
|
|
|
+ countryId: region.id,
|
|
|
+ countryName: regionTitle,
|
|
|
+ countryFlag: userData?.flag,
|
|
|
+ slow11: userData?.slow11,
|
|
|
+ slow31: userData?.slow31,
|
|
|
+ slow101: userData?.slow101,
|
|
|
+ isSlowList: false
|
|
|
+ }
|
|
|
+ ] as never)
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ } else if (userData?.type === 'nm' && userData?.edit_in_trips === 1) {
|
|
|
+ openEditModal();
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- userData?.type === 'nm'
|
|
|
- ? updateNM(
|
|
|
- region.id,
|
|
|
- userData.visited ? 0 : 1,
|
|
|
- userData.visited ? 0 : 1,
|
|
|
- userData.visited ? 0 : 1,
|
|
|
- 3
|
|
|
- )
|
|
|
- : userData?.type === 'countries'
|
|
|
- ? updateSlow(
|
|
|
+ userData?.type === 'nm'
|
|
|
+ ? updateNM(
|
|
|
region.id,
|
|
|
- !userData.visited,
|
|
|
- Boolean(userData.slow11),
|
|
|
- Boolean(userData.slow31),
|
|
|
- Boolean(userData.slow101)
|
|
|
+ userData.visited ? 0 : 1,
|
|
|
+ userData.visited ? 0 : 1,
|
|
|
+ userData.visited ? 0 : 1,
|
|
|
+ 3
|
|
|
)
|
|
|
- : updateDare(region.id, userData.visited ? 0 : 1);
|
|
|
- }}
|
|
|
- >
|
|
|
- {(userData?.visited &&
|
|
|
- !disabled &&
|
|
|
- userData?.type === 'countries' &&
|
|
|
- userData?.visited_regions > 1) ||
|
|
|
- (userData?.visited &&
|
|
|
- !disabled &&
|
|
|
- userData?.type === 'nm' &&
|
|
|
- userData?.edit_in_trips === 1) ? (
|
|
|
- <View style={styles.visitedContainer}>
|
|
|
- <EditSvg width={14} height={14} />
|
|
|
- <Text style={styles.visitedButtonText}>Edit</Text>
|
|
|
- </View>
|
|
|
- ) : userData?.visited && !disabled ? (
|
|
|
- <View style={styles.visitedContainer}>
|
|
|
- <MarkIcon width={16} height={16} />
|
|
|
- <Text style={styles.visitedButtonText}>Visited</Text>
|
|
|
- </View>
|
|
|
- ) : (
|
|
|
- <Text style={[styles.markVisitedButtonText]}>Mark Visited</Text>
|
|
|
- )}
|
|
|
- </TouchableOpacity>
|
|
|
+ : userData?.type === 'countries'
|
|
|
+ ? updateSlow(
|
|
|
+ region.id,
|
|
|
+ !userData.visited,
|
|
|
+ Boolean(userData.slow11),
|
|
|
+ Boolean(userData.slow31),
|
|
|
+ Boolean(userData.slow101)
|
|
|
+ )
|
|
|
+ : updateDare(region.id, userData.visited ? 0 : 1);
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ {(userData?.visited &&
|
|
|
+ !disabled &&
|
|
|
+ userData?.type === 'countries' &&
|
|
|
+ userData?.visited_regions > 1) ||
|
|
|
+ (userData?.visited &&
|
|
|
+ !disabled &&
|
|
|
+ userData?.type === 'nm' &&
|
|
|
+ userData?.edit_in_trips === 1) ? (
|
|
|
+ <View style={styles.visitedContainer}>
|
|
|
+ <EditSvg width={14} height={14} />
|
|
|
+ <Text style={styles.visitedButtonText}>Edit</Text>
|
|
|
+ </View>
|
|
|
+ ) : userData?.visited && !disabled ? (
|
|
|
+ <View style={styles.visitedContainer}>
|
|
|
+ <MarkIcon width={16} height={16} />
|
|
|
+ <Text style={styles.visitedButtonText}>Visited</Text>
|
|
|
+ </View>
|
|
|
+ ) : (
|
|
|
+ <Text style={[styles.markVisitedButtonText]}>Mark Visited</Text>
|
|
|
+ )}
|
|
|
+ </TouchableOpacity>
|
|
|
+ )}
|
|
|
</View>
|
|
|
</View>
|
|
|
</TouchableOpacity>
|
|
|
+
|
|
|
+ {userData?.type === 'nm' && (
|
|
|
+ <AddVisitModal
|
|
|
+ isVisible={isAddVisitModalVisible}
|
|
|
+ onClose={() => setIsAddVisitModalVisible(false)}
|
|
|
+ regionName={regionSubtitle ? `${regionTitle} - ${regionSubtitle}` : regionTitle}
|
|
|
+ onSave={(year) => {
|
|
|
+ handleAddVisitNM(region.id, year);
|
|
|
+ onAddVisitSuccess && onAddVisitSuccess(region.id);
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ )}
|
|
|
</Animated.View>
|
|
|
);
|
|
|
};
|