|
|
@@ -5,7 +5,12 @@ import { useFocusEffect, useNavigation } from '@react-navigation/native';
|
|
|
import { PageWrapper, Header, Modal, FlatList as List, WarningModal } from 'src/components';
|
|
|
import TripItem from '../Components/TripItem';
|
|
|
|
|
|
-import { useGetTripsYearsQuery, useGetTripsForYearQuery } from '@api/trips';
|
|
|
+import {
|
|
|
+ useGetTripsYearsQuery,
|
|
|
+ useGetTripsForYearQuery,
|
|
|
+ useGetTripsForRegionQuery,
|
|
|
+ useGetRegionsThatHaveTripsQuery
|
|
|
+} from '@api/trips';
|
|
|
import { StoreType, storage } from 'src/storage';
|
|
|
import { TripsData } from '../utils/types';
|
|
|
import { NAVIGATION_PAGES } from 'src/types';
|
|
|
@@ -28,11 +33,23 @@ const TripsScreen = ({ route }: { route: any }) => {
|
|
|
const [isDatePickerVisible, setDatePickerVisible] = useState(false);
|
|
|
const { data: years, refetch } = useGetTripsYearsQuery(token, true);
|
|
|
const [selectedYear, setSelectedYear] = useState<string | null>(moment().year().toString());
|
|
|
+ const [selectedRegion, setSelectedRegion] = useState<{ id: number; name: string } | null>(
|
|
|
+ route.params?.region
|
|
|
+ ? { id: route.params?.region?.id, name: route.params?.region?.name ?? '' }
|
|
|
+ : null
|
|
|
+ );
|
|
|
const { data: tripsData, refetch: refetchTrips } = useGetTripsForYearQuery(
|
|
|
token,
|
|
|
selectedYear as string,
|
|
|
selectedYear ? true : false
|
|
|
);
|
|
|
+ const { data: tripsDataForRegion, refetch: refetchTripsForRegion } = useGetTripsForRegionQuery(
|
|
|
+ token,
|
|
|
+ selectedRegion ? selectedRegion.id : -1,
|
|
|
+ selectedRegion ? true : false
|
|
|
+ );
|
|
|
+ const { data: regionsThatHaveTrips, refetch: refetchRegionsThatHaveTrips } =
|
|
|
+ useGetRegionsThatHaveTripsQuery(true);
|
|
|
const [trips, setTrips] = useState<TripsData[]>([]);
|
|
|
const [statistics, setStatistics] = useState<{
|
|
|
countries: {
|
|
|
@@ -65,6 +82,7 @@ const TripsScreen = ({ route }: { route: any }) => {
|
|
|
dates_missing: 0 | 1;
|
|
|
} | null>(null);
|
|
|
const [isWarningModalVisible, setIsWarningModalVisible] = useState(false);
|
|
|
+ const [isModalVisible, setIsModalVisible] = useState(false);
|
|
|
|
|
|
const flashListRef = useRef<FlashListRef<any> | null>(null);
|
|
|
|
|
|
@@ -99,11 +117,18 @@ const TripsScreen = ({ route }: { route: any }) => {
|
|
|
}, [isWarningModalVisible]);
|
|
|
|
|
|
useEffect(() => {
|
|
|
- if (tripsData && tripsData.trips) {
|
|
|
+ if (tripsData && tripsData.trips && !selectedRegion) {
|
|
|
setStatistics(tripsData.statistics ?? null);
|
|
|
setTrips(tripsData.trips);
|
|
|
}
|
|
|
- }, [tripsData]);
|
|
|
+ }, [tripsData, selectedRegion]);
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ if (tripsDataForRegion && tripsDataForRegion.trips && selectedRegion) {
|
|
|
+ setStatistics(null);
|
|
|
+ setTrips(tripsDataForRegion.trips ?? []);
|
|
|
+ }
|
|
|
+ }, [tripsDataForRegion, selectedRegion]);
|
|
|
|
|
|
const renderItem = useCallback(
|
|
|
({ item }: { item: TripsData }) => <TripItem item={item} isNew={!!statistics} />,
|
|
|
@@ -146,7 +171,7 @@ const TripsScreen = ({ route }: { route: any }) => {
|
|
|
</View>
|
|
|
<View style={styles.tabContainer}>
|
|
|
<TouchableOpacity style={styles.regionSelector} onPress={() => setDatePickerVisible(true)}>
|
|
|
- <Text style={[styles.regionText]}>{selectedYear}</Text>
|
|
|
+ <Text style={[styles.regionText]}>{selectedYear ?? 'All years'}</Text>
|
|
|
<ChevronIcon />
|
|
|
</TouchableOpacity>
|
|
|
<TouchableOpacity style={styles.addNewTab} onPress={onAddNewTripPress}>
|
|
|
@@ -155,6 +180,16 @@ const TripsScreen = ({ route }: { route: any }) => {
|
|
|
</TouchableOpacity>
|
|
|
</View>
|
|
|
|
|
|
+ <TouchableOpacity
|
|
|
+ style={[styles.regionSelector, { flex: 0 }]}
|
|
|
+ onPress={() => setIsModalVisible(true)}
|
|
|
+ >
|
|
|
+ <Text style={styles.regionText}>
|
|
|
+ {selectedRegion ? selectedRegion.name : 'All regions'}
|
|
|
+ </Text>
|
|
|
+ <ChevronIcon />
|
|
|
+ </TouchableOpacity>
|
|
|
+
|
|
|
{trips.length === 0 ? (
|
|
|
<View style={styles.noTripsContainer}>
|
|
|
<View style={styles.noTripsIcon}>
|
|
|
@@ -256,6 +291,7 @@ const TripsScreen = ({ route }: { route: any }) => {
|
|
|
<List
|
|
|
itemObject={(object) => {
|
|
|
setSelectedYear(object);
|
|
|
+ setSelectedRegion(null);
|
|
|
setDatePickerVisible(false);
|
|
|
}}
|
|
|
initialData={years?.data}
|
|
|
@@ -283,6 +319,21 @@ const TripsScreen = ({ route }: { route: any }) => {
|
|
|
: 'Trip was successfully updated'
|
|
|
}
|
|
|
/>
|
|
|
+
|
|
|
+ <Modal
|
|
|
+ onRequestClose={() => setIsModalVisible(false)}
|
|
|
+ headerTitle={'Select Region'}
|
|
|
+ visible={isModalVisible}
|
|
|
+ >
|
|
|
+ <List
|
|
|
+ filteredRegions={regionsThatHaveTrips?.data}
|
|
|
+ itemObject={(object) => {
|
|
|
+ setIsModalVisible(false);
|
|
|
+ setSelectedRegion(object);
|
|
|
+ setSelectedYear(null);
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </Modal>
|
|
|
</PageWrapper>
|
|
|
);
|
|
|
};
|