import * as React from 'react'; import { ScrollView, TouchableOpacity, ImageBackground, View, Text, Alert, RefreshControl } from 'react-native'; import { useState, useEffect } from 'react'; import { connect } from "react-redux"; import NetInfo from "@react-native-community/netinfo"; import CustomHeader from '../../components/header.js'; import Assets from '../../components/assets.manager.js'; import EP from '../../components/api/endpoints.js'; import Theme from '../../components/theme.style.js'; import Icon from '../../components/icons.js'; import Elements from '../../components/elements.js'; import DB from '../../components/storage/'; import CustomSafeArea from '../../components/safeArea.component.js'; import REQUEST from '../../components/api'; import moment from 'moment'; import { useIsFocused } from '@react-navigation/native'; const Banner = (props) => { return ( Track your gas consumption and mileage Add Tracker ) } const Tracker = (navigation) => { const [connected, setconnected] = useState(true) const [refreshing, setRefreshing] = useState(false); const [loading, setLoading] = useState(true) const [trackers, settrackers] = useState([]) const isFocused = useIsFocused() const fetch = async () => { let SESSION = await DB.session(); REQUEST("tracker", "get", { Authorization: SESSION.token }, {}, {}, (res) => { if(res.message !== "Empty") { settrackers(res.data); } else { settrackers([]); } setRefreshing(false); setLoading(false); }, (err) => { setLoading(false); setRefreshing(false); }, "Fetch", "Tracker") } const DeleteTracker = async (data) => { setLoading(true); const SESSION = await DB.session(); REQUEST( 'tracker', 'delete', { Authorization: SESSION.token }, { noID: true, value: data.fueltracker_uuid }, {}, (_) => { const taskToShow = `\nTracker has been successfully deleted!`; init(); Alert.alert("Information", taskToShow, [{text: "OK"}]); }, (error) => { setLoading(false); Alert.alert("Information", `\n${error.message}`) }, "Tracker", "Delete" ) } const init = async () => { fetch(); } useEffect(() => { NetInfo.fetch().then(state => { if(state.isConnected){ if(isFocused){ init() } }else{ setconnected(false); Elements.nointernet2(navigation) } }) }, [isFocused]) const onReload = () => { setRefreshing(true); init(); } const renderTrackings = () => { return trackers.map((data, index) => { let estimate = Theme.formatter.CRNCY(data.kml); return ( navigation.navigation.navigate("EditTracker", { edit: data, reload: () => onReload() })} key={index} style={[{padding: 15, flexDirection: 'row', backgroundColor: navigation.app_theme?.theme.dark ? navigation.app_theme?.theme.colors.border : '#fff', borderRadius: 5, borderWidth: 0.5, marginBottom: 5, borderColor: navigation.app_theme?.theme.dark ? navigation.app_theme?.theme.colors.border : 'lightgray', elevation: 0.5 }, index === (trackers.length - 1) && { marginBottom: 70 }]}> km/L {estimate} {data.fueltype_name} {Theme.formatter.CRNCY(data.km) + " km"} {Theme.formatter.CRNCY(data.liters) + " L"} {moment(data.date).format("MMMM DD, YYYY")} Alert.alert("Information", "\nDo you want to delete this fuel tracker?", [{text: "CANCEL"}, {text: "OK", onPress: () => DeleteTracker(data)}]) } style={{}}> ) }) } if(!connected && !loading){ return ( { NetInfo.fetch().then(state => { if(state.isConnected){ init() }else{ Elements.nointernet2(navigation) } }) }} /> ) } const renderNotLoaded = () => { if(loading) { return null } } return ( {renderNotLoaded()} {trackers.length == 0 && !loading ? navigation.navigation.navigate("AddTracker", { reload: () => onReload() })} /> : null} {trackers.length > 0 && !loading ? } style={{flex: 1, padding: 10}} > {renderTrackings()} navigation.navigation.navigate("AddTracker", { reload: () => onReload() })} style={{ justifyContent: 'center', alignItems: 'center', position: 'absolute', bottom: 15, right: 15, width: 60, height: 60, borderRadius: 30, backgroundColor: Theme.colors.primary, shadowColor: "#000000", elevation: 7 }} > : null } ); } const mapStateToProps = (state) => { return { app_theme: state.appThemeReducer.theme } } export default connect(mapStateToProps, null)(Tracker)