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)