|
@@ -26,12 +26,15 @@ import {
|
|
|
useGetVisitsQuery,
|
|
|
usePostAddVisitMutation,
|
|
|
usePostDeleteVisitMutation,
|
|
|
+ usePostGetSingleRegionMutation,
|
|
|
usePostUpdateVisitMutation
|
|
|
} from '@api/myRegions';
|
|
|
import ActionSheet from 'react-native-actions-sheet';
|
|
|
import { ButtonVariants } from 'src/types/components';
|
|
|
import EditSvg from 'assets/icons/travels-screens/pen-to-square.svg';
|
|
|
import TripIcon from 'assets/icons/travels-section/trip.svg';
|
|
|
+import { useRegion } from 'src/contexts/RegionContext';
|
|
|
+import { NmRegion } from '../utils/types';
|
|
|
|
|
|
type DateMode = 'year' | 'month' | 'full';
|
|
|
type QualityType = {
|
|
@@ -74,12 +77,15 @@ interface DatePickerState {
|
|
|
|
|
|
const EditNmDataScreen = ({ navigation, route }: { navigation: any; route: any }) => {
|
|
|
const id = route.params?.regionId;
|
|
|
+ const isFromRegionsList = route.params?.regionsList ?? false;
|
|
|
+
|
|
|
const token = storage.get('token', StoreType.STRING) as string;
|
|
|
|
|
|
const { data: existingVisits } = useGetVisitsQuery(id, token, token ? true : false);
|
|
|
const { mutateAsync: addVisit } = usePostAddVisitMutation();
|
|
|
const { mutateAsync: updateVisitAsync } = usePostUpdateVisitMutation();
|
|
|
const { mutateAsync: deleteVisitAsync } = usePostDeleteVisitMutation();
|
|
|
+ const { mutateAsync: getRegion } = usePostGetSingleRegionMutation();
|
|
|
|
|
|
const [visits, setVisits] = useState<Visit[]>([]);
|
|
|
const [showDatePicker, setShowDatePicker] = useState<DatePickerState | null>(null);
|
|
@@ -90,6 +96,8 @@ const EditNmDataScreen = ({ navigation, route }: { navigation: any; route: any }
|
|
|
const [selectedMonth, setSelectedMonth] = useState<number | null>(null);
|
|
|
const [selectedDay, setSelectedDay] = useState<number | null>(null);
|
|
|
|
|
|
+ const { userData, setUserData, nmRegions, setNmRegions } = useRegion();
|
|
|
+
|
|
|
const [modalState, setModalState] = useState({
|
|
|
isWarningVisible: false,
|
|
|
type: 'success',
|
|
@@ -194,7 +202,47 @@ const EditNmDataScreen = ({ navigation, route }: { navigation: any; route: any }
|
|
|
hidden: 0
|
|
|
},
|
|
|
{
|
|
|
- onSuccess: (data) => {},
|
|
|
+ onSuccess: async (data) => {
|
|
|
+ await getRegion(
|
|
|
+ { token, id },
|
|
|
+ {
|
|
|
+ onSuccess: (res) => {
|
|
|
+ if (isFromRegionsList && res.region) {
|
|
|
+ const updatedNM = nmRegions.map((item: NmRegion) => {
|
|
|
+ if (item.id === id) {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ year: res.region?.first_visited_in_year,
|
|
|
+ last: res.region?.last_visited_in_year,
|
|
|
+ quality: res.region?.best_visit_quality,
|
|
|
+ visits: res.region?.no_of_visits
|
|
|
+ };
|
|
|
+ }
|
|
|
+ return item;
|
|
|
+ });
|
|
|
+
|
|
|
+ setNmRegions(updatedNM);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (res.region) {
|
|
|
+ const updatedNM = {
|
|
|
+ ...userData,
|
|
|
+ first_visit_year: res.region.first_visited_in_year,
|
|
|
+ last_visit_year: res.region.last_visited_in_year,
|
|
|
+ best_visit_quality: res.region.best_visit_quality,
|
|
|
+ no_of_visits: res.region.no_of_visits,
|
|
|
+ visited: true
|
|
|
+ };
|
|
|
+ setUserData(updatedNM);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onError: (err) => {
|
|
|
+ console.log('err', err);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+ },
|
|
|
onError: (error) => {
|
|
|
console.log('updateVisitAsync error', error);
|
|
|
}
|
|
@@ -211,8 +259,8 @@ const EditNmDataScreen = ({ navigation, route }: { navigation: any; route: any }
|
|
|
);
|
|
|
|
|
|
const deleteVisit = useCallback(
|
|
|
- async (id: number): Promise<void> => {
|
|
|
- const visitToDelete = visits.find((visit: Visit) => visit.id === id);
|
|
|
+ async (visitId: number): Promise<void> => {
|
|
|
+ const visitToDelete = visits.find((visit: Visit) => visit.id === visitId);
|
|
|
if (!visitToDelete) return;
|
|
|
if (visitToDelete.isExisting) {
|
|
|
setModalState({
|
|
@@ -226,15 +274,82 @@ const EditNmDataScreen = ({ navigation, route }: { navigation: any; route: any }
|
|
|
id: visitToDelete.id
|
|
|
},
|
|
|
{
|
|
|
- onSuccess: (res) => {
|
|
|
+ onSuccess: async (res) => {
|
|
|
Animated.timing(visitToDelete.animatedValue, {
|
|
|
toValue: 0,
|
|
|
duration: 300,
|
|
|
easing: Easing.in(Easing.quad),
|
|
|
useNativeDriver: false
|
|
|
}).start(() => {
|
|
|
- setVisits((prevVisits) => prevVisits.filter((visit) => visit.id !== id));
|
|
|
+ setVisits((prevVisits) => prevVisits.filter((visit) => visit.id !== visitId));
|
|
|
});
|
|
|
+
|
|
|
+ getRegion(
|
|
|
+ { token, id },
|
|
|
+ {
|
|
|
+ onSuccess: (res) => {
|
|
|
+ if (isFromRegionsList && res.not_visited) {
|
|
|
+ const updatedNM = nmRegions.map((item: NmRegion) => {
|
|
|
+ if (item.id === id) {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ year: 0,
|
|
|
+ last: 0,
|
|
|
+ quality: 3,
|
|
|
+ visits: 0
|
|
|
+ };
|
|
|
+ }
|
|
|
+ return item;
|
|
|
+ });
|
|
|
+
|
|
|
+ setNmRegions(updatedNM);
|
|
|
+ return;
|
|
|
+ } else if (isFromRegionsList && res.region) {
|
|
|
+ const updatedNM = nmRegions.map((item: NmRegion) => {
|
|
|
+ if (item.id === id) {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ year: res.region?.first_visited_in_year,
|
|
|
+ last: res.region?.last_visited_in_year,
|
|
|
+ quality: res.region?.best_visit_quality,
|
|
|
+ visits: res.region?.no_of_visits
|
|
|
+ };
|
|
|
+ }
|
|
|
+ return item;
|
|
|
+ });
|
|
|
+
|
|
|
+ setNmRegions(updatedNM);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (res.not_visited) {
|
|
|
+ const updatedNM = {
|
|
|
+ ...userData,
|
|
|
+ first_visit_year: 0,
|
|
|
+ last_visit_year: 0,
|
|
|
+ best_visit_quality: 3,
|
|
|
+ no_of_visits: 0,
|
|
|
+ visited: false
|
|
|
+ };
|
|
|
+ setUserData(updatedNM);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (res.region) {
|
|
|
+ const updatedNM = {
|
|
|
+ ...userData,
|
|
|
+ first_visit_year: res.region.first_visited_in_year,
|
|
|
+ last_visit_year: res.region.last_visited_in_year,
|
|
|
+ best_visit_quality: res.region.best_visit_quality,
|
|
|
+ no_of_visits: res.region.no_of_visits,
|
|
|
+ visited: true
|
|
|
+ };
|
|
|
+ setUserData(updatedNM);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onError: (err) => {
|
|
|
+ console.log('err', err);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
},
|
|
|
onError: (err) => {
|
|
|
console.log('delete err', err);
|
|
@@ -252,7 +367,7 @@ const EditNmDataScreen = ({ navigation, route }: { navigation: any; route: any }
|
|
|
easing: Easing.in(Easing.quad),
|
|
|
useNativeDriver: false
|
|
|
}).start(() => {
|
|
|
- setVisits((prevVisits) => prevVisits.filter((visit) => visit.id !== id));
|
|
|
+ setVisits((prevVisits) => prevVisits.filter((visit) => visit.id !== visitId));
|
|
|
});
|
|
|
}
|
|
|
},
|
|
@@ -349,7 +464,47 @@ const EditNmDataScreen = ({ navigation, route }: { navigation: any; route: any }
|
|
|
hidden: 0
|
|
|
},
|
|
|
{
|
|
|
- onSuccess: (data) => {},
|
|
|
+ onSuccess: async (data) => {
|
|
|
+ await getRegion(
|
|
|
+ { token, id },
|
|
|
+ {
|
|
|
+ onSuccess: (res) => {
|
|
|
+ if (isFromRegionsList && res.region) {
|
|
|
+ const updatedNM = nmRegions.map((item: NmRegion) => {
|
|
|
+ if (item.id === id) {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ year: res.region?.first_visited_in_year,
|
|
|
+ last: res.region?.last_visited_in_year,
|
|
|
+ quality: res.region?.best_visit_quality,
|
|
|
+ visits: res.region?.no_of_visits
|
|
|
+ };
|
|
|
+ }
|
|
|
+ return item;
|
|
|
+ });
|
|
|
+
|
|
|
+ setNmRegions(updatedNM);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (res.region) {
|
|
|
+ const updatedNM = {
|
|
|
+ ...userData,
|
|
|
+ first_visit_year: res.region.first_visited_in_year,
|
|
|
+ last_visit_year: res.region.last_visited_in_year,
|
|
|
+ best_visit_quality: res.region.best_visit_quality,
|
|
|
+ no_of_visits: res.region.no_of_visits,
|
|
|
+ visited: true
|
|
|
+ };
|
|
|
+ setUserData(updatedNM);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onError: (err) => {
|
|
|
+ console.log('err', err);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+ },
|
|
|
onError: (error) => {
|
|
|
console.log('addVisit error', error);
|
|
|
}
|