|
@@ -1,12 +1,10 @@
|
|
|
import React, { useCallback, useEffect, useState } from 'react';
|
|
|
import { View, Text, TouchableOpacity, FlatList } from 'react-native';
|
|
|
-import ReactModal from 'react-native-modal';
|
|
|
import * as Progress from 'react-native-progress';
|
|
|
import { useFocusEffect } from '@react-navigation/native';
|
|
|
-import { Dropdown } from 'react-native-searchable-dropdown-kj';
|
|
|
import moment from 'moment';
|
|
|
|
|
|
-import { Button, Header, PageWrapper } from 'src/components';
|
|
|
+import { EditNmModal, Header, PageWrapper } from 'src/components';
|
|
|
import { CustomButton } from '../Components';
|
|
|
import { NmRegionItem } from '../Components/MyRegionsItems/NmRegionItem';
|
|
|
import { RegionItem } from '../Components/MyRegionsItems/RegionItem';
|
|
@@ -22,11 +20,9 @@ import {
|
|
|
usePostSetNmRegionMutation,
|
|
|
usePostSetTCCRegionMutation
|
|
|
} from '@api/myRegions';
|
|
|
-import { ButtonVariants } from 'src/types/components';
|
|
|
-import { noOfVisits, qualityOptions } from '../utils/constants';
|
|
|
+import { qualityOptions } from '../utils/constants';
|
|
|
|
|
|
import ChevronIcon from 'assets/icons/travels-screens/down-arrow.svg';
|
|
|
-import AddImgSvg from 'assets/icons/travels-screens/add-img.svg';
|
|
|
|
|
|
const RegionsScreen = () => {
|
|
|
const token = storage.get('token', StoreType.STRING) as string;
|
|
@@ -39,7 +35,6 @@ const RegionsScreen = () => {
|
|
|
const { data: regionsQe } = useGetRegionQeQuery(selectedMega.id, token, true);
|
|
|
const [total, setTotal] = useState(0);
|
|
|
const [isEditModalVisible, setIsEditModalVisible] = useState(false);
|
|
|
- const [currentItem, setCurrentItem] = useState<NmRegion | null>(null);
|
|
|
const [contentIndex, setContentIndex] = useState(0);
|
|
|
const [nmRegions, setNmRegions] = useState<NmRegion[] | null>(null);
|
|
|
const [filteredNmRegions, setFilteredNmRegions] = useState<NmRegion[] | null>(null);
|
|
@@ -47,27 +42,44 @@ const RegionsScreen = () => {
|
|
|
const [filteredTccRegions, setFilteredTccRegions] = useState<TCCRegion[] | null>(null);
|
|
|
const { mutate: updateNM } = usePostSetNmRegionMutation();
|
|
|
const { mutate: updateTCC } = usePostSetTCCRegionMutation();
|
|
|
- const [selectedQuality, setSelectedQuality] = useState(qualityOptions[2]);
|
|
|
- const [selectedFirstYear, setSelectedFirstYear] = useState(1);
|
|
|
- const [selectedLastYear, setSelectedLastYear] = useState(1);
|
|
|
- const [years, setYears] = useState<{ label: string; value: number }[]>([]);
|
|
|
- const [selectedNoOfVisits, setSelectedNoOfVisits] = useState(1);
|
|
|
+ const [modalState, setModalState] = useState({
|
|
|
+ selectedFirstYear: 2021,
|
|
|
+ selectedLastYear: 2021,
|
|
|
+ selectedQuality: qualityOptions[2],
|
|
|
+ selectedNoOfVisits: 1,
|
|
|
+ years: [],
|
|
|
+ id: null
|
|
|
+ });
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ const currentYear = moment().year();
|
|
|
+ let yearSelector: { label: string; value: number }[] = [{ label: 'visited', value: 1 }];
|
|
|
+ for (let i = currentYear; i >= 1951; i--) {
|
|
|
+ yearSelector.push({ label: i.toString(), value: i });
|
|
|
+ }
|
|
|
+ handleModalStateChange({ years: yearSelector });
|
|
|
+ }, []);
|
|
|
+
|
|
|
+ const handleModalStateChange = (updates: { [key: string]: any }) => {
|
|
|
+ setModalState((prevState) => ({ ...prevState, ...updates }));
|
|
|
+ };
|
|
|
|
|
|
const handleOpenEditModal = (item: NmRegion) => {
|
|
|
- setCurrentItem(item);
|
|
|
- setSelectedFirstYear(item.year);
|
|
|
- setSelectedLastYear(item.last);
|
|
|
- setSelectedNoOfVisits(item.visits);
|
|
|
- setSelectedQuality(
|
|
|
- qualityOptions.find((quality) => quality.id === item.quality) || qualityOptions[2]
|
|
|
- );
|
|
|
+ handleModalStateChange({
|
|
|
+ selectedFirstYear: item.year,
|
|
|
+ selectedLastYear: item.last,
|
|
|
+ selectedQuality:
|
|
|
+ qualityOptions.find((quality) => quality.id === item.quality) || qualityOptions[2],
|
|
|
+ selectedNoOfVisits: item.visits || 1,
|
|
|
+ id: item.id
|
|
|
+ });
|
|
|
setIsEditModalVisible(true);
|
|
|
};
|
|
|
|
|
|
const handleUpdateNM = useCallback(
|
|
|
- (region: number, first: number, last: number, visits: number, quality: number) => {
|
|
|
+ (id: number, first: number, last: number, visits: number, quality: number) => {
|
|
|
const updatedNM = nmRegions?.map((item) => {
|
|
|
- if (item.id === region) {
|
|
|
+ if (item.id === id) {
|
|
|
return {
|
|
|
...item,
|
|
|
year: first,
|
|
@@ -82,7 +94,7 @@ const RegionsScreen = () => {
|
|
|
|
|
|
const updatedNMData = {
|
|
|
token,
|
|
|
- region,
|
|
|
+ region: id,
|
|
|
first,
|
|
|
last,
|
|
|
visits,
|
|
@@ -160,13 +172,6 @@ const RegionsScreen = () => {
|
|
|
useCallback(() => {
|
|
|
if (megaregions && megaregions.result === 'OK') {
|
|
|
setSelectedMega(megaregions.data[1]);
|
|
|
-
|
|
|
- const currentYear = moment().year();
|
|
|
- let yearSelector: { label: string; value: number }[] = [{ label: 'visited', value: 1 }];
|
|
|
- for (let i = currentYear; i >= 1951; i--) {
|
|
|
- yearSelector.push({ label: i.toString(), value: i });
|
|
|
- }
|
|
|
- setYears(yearSelector);
|
|
|
}
|
|
|
}, [megaregions])
|
|
|
);
|
|
@@ -180,12 +185,6 @@ const RegionsScreen = () => {
|
|
|
<NmRegionItem item={item} openEditModal={handleOpenEditModal} updateNM={handleUpdateNM} />
|
|
|
);
|
|
|
|
|
|
- const renderOption = (name: string) => (
|
|
|
- <View style={styles.dropdownOption}>
|
|
|
- <Text style={styles.placeholderStyle}>{name}</Text>
|
|
|
- </View>
|
|
|
- );
|
|
|
-
|
|
|
return (
|
|
|
<PageWrapper>
|
|
|
<Header label="Regions" />
|
|
@@ -261,117 +260,13 @@ const RegionsScreen = () => {
|
|
|
data={megaregions?.data ?? []}
|
|
|
/>
|
|
|
|
|
|
- <ReactModal
|
|
|
+ <EditNmModal
|
|
|
isVisible={isEditModalVisible}
|
|
|
- onBackdropPress={() => setIsEditModalVisible(false)}
|
|
|
- style={styles.modal}
|
|
|
- statusBarTranslucent={true}
|
|
|
- presentationStyle="overFullScreen"
|
|
|
- >
|
|
|
- <View style={styles.modalContent}>
|
|
|
- <View style={styles.optionsContainer}>
|
|
|
- <View style={styles.rowWrapper}>
|
|
|
- <View style={styles.dropdownWrapper}>
|
|
|
- <Text style={styles.textSmall}>First visit</Text>
|
|
|
- <Dropdown
|
|
|
- style={styles.dropdown}
|
|
|
- placeholderStyle={styles.placeholderStyle}
|
|
|
- selectedTextStyle={styles.placeholderStyle}
|
|
|
- data={years}
|
|
|
- labelField="label"
|
|
|
- valueField="value"
|
|
|
- value={selectedFirstYear}
|
|
|
- placeholder="First visit"
|
|
|
- onChange={(item) => {
|
|
|
- setSelectedFirstYear(item.value);
|
|
|
- setSelectedLastYear(item.value);
|
|
|
- }}
|
|
|
- containerStyle={{ borderRadius: 4 }}
|
|
|
- renderItem={(item) => renderOption(item.label)}
|
|
|
- />
|
|
|
- </View>
|
|
|
- <View style={styles.dropdownWrapper}>
|
|
|
- <Text style={styles.textSmall}>Last visit</Text>
|
|
|
- <Dropdown
|
|
|
- style={styles.dropdown}
|
|
|
- placeholderStyle={styles.placeholderStyle}
|
|
|
- selectedTextStyle={styles.placeholderStyle}
|
|
|
- data={years.filter((item) => item.value >= selectedFirstYear || item.value === 1)}
|
|
|
- labelField="label"
|
|
|
- valueField="value"
|
|
|
- value={selectedLastYear}
|
|
|
- placeholder="Last visit"
|
|
|
- onChange={(item) => setSelectedLastYear(item.value)}
|
|
|
- containerStyle={{ borderRadius: 4 }}
|
|
|
- renderItem={(item) => renderOption(item.label)}
|
|
|
- />
|
|
|
- </View>
|
|
|
- </View>
|
|
|
- <View style={styles.rowWrapper}>
|
|
|
- <View style={styles.dropdownWrapper}>
|
|
|
- <Text style={styles.textSmall}>Best visit quality</Text>
|
|
|
- <Dropdown
|
|
|
- style={styles.dropdown}
|
|
|
- placeholderStyle={styles.placeholderStyle}
|
|
|
- containerStyle={{ borderRadius: 4 }}
|
|
|
- selectedTextStyle={styles.placeholderStyle}
|
|
|
- data={qualityOptions}
|
|
|
- labelField="name"
|
|
|
- valueField="id"
|
|
|
- value={selectedQuality.id}
|
|
|
- placeholder="Best visit quality"
|
|
|
- onChange={(item) => setSelectedQuality(item)}
|
|
|
- renderItem={(item) => renderOption(item.name)}
|
|
|
- />
|
|
|
- </View>
|
|
|
- <View style={styles.dropdownWrapper}>
|
|
|
- <Text style={styles.textSmall}>No of visits</Text>
|
|
|
- <Dropdown
|
|
|
- style={styles.dropdown}
|
|
|
- placeholderStyle={styles.placeholderStyle}
|
|
|
- selectedTextStyle={styles.placeholderStyle}
|
|
|
- data={noOfVisits}
|
|
|
- labelField="label"
|
|
|
- valueField="value"
|
|
|
- value={selectedNoOfVisits}
|
|
|
- placeholder="No of visits"
|
|
|
- onChange={(item) => setSelectedNoOfVisits(item.value)}
|
|
|
- containerStyle={{ borderRadius: 4 }}
|
|
|
- renderItem={(item) => renderOption(item.label)}
|
|
|
- />
|
|
|
- </View>
|
|
|
- </View>
|
|
|
- </View>
|
|
|
- {/* <View style={styles.photosContent}>
|
|
|
- <Text style={styles.textMedium}>Photos</Text>
|
|
|
- <TouchableOpacity style={styles.addImgBtn}>
|
|
|
- <AddImgSvg fill={Colors.DARK_BLUE} />
|
|
|
- <Text style={styles.textSmall}>Add</Text>
|
|
|
- </TouchableOpacity>
|
|
|
- </View> */}
|
|
|
- <Button
|
|
|
- children="Done"
|
|
|
- onPress={() => {
|
|
|
- setIsEditModalVisible(false);
|
|
|
- currentItem?.id &&
|
|
|
- handleUpdateNM(
|
|
|
- currentItem.id,
|
|
|
- selectedFirstYear,
|
|
|
- selectedLastYear,
|
|
|
- selectedNoOfVisits,
|
|
|
- selectedQuality.id
|
|
|
- );
|
|
|
- }}
|
|
|
- />
|
|
|
- <Button
|
|
|
- children="Close"
|
|
|
- onPress={() => setIsEditModalVisible(false)}
|
|
|
- variant={ButtonVariants.OPACITY}
|
|
|
- containerStyles={styles.closeBtn}
|
|
|
- textStyles={{ color: Colors.DARK_BLUE }}
|
|
|
- />
|
|
|
- </View>
|
|
|
- </ReactModal>
|
|
|
+ onClose={() => setIsEditModalVisible(false)}
|
|
|
+ modalState={modalState}
|
|
|
+ updateModalState={handleModalStateChange}
|
|
|
+ updateNM={handleUpdateNM}
|
|
|
+ />
|
|
|
</PageWrapper>
|
|
|
);
|
|
|
};
|