unioil-loyalty-rn-app/app/screens/tracker/edit.js

180 lines
6.1 KiB
JavaScript

import * as React from 'react';
import { useState } from 'react';
import { connect } from "react-redux";
import { TouchableOpacity, View, Text, Alert } from 'react-native';
import { openModal } from '../../redux/actions/AlertActions.js';
import CustomHeader from '../../components/header.js';
import Theme from '../../components/theme.style.js';
import Elements from '../../components/elements.js';
import CustomIcon from '../../components/icons.js';
import DB from '../../components/storage';
import CustomForm from './customform';
import moment from 'moment';
import CustomSafeArea from '../../components/safeArea.component.js';
const Tracker = (navigation) => {
const [focus, setfocus] = useState(false);
const [activeInput, setActiveInput] = useState(false);
const [datepicker, setdatepicker] = useState(false);
const params = navigation.route ? navigation.route.params : null
const [date, setdate] = useState(null);
const [fueltype, setfueltype] = useState(null);
const [distance, setdistance] = useState(null);
const [liters, setliters] = useState(null);
const [update, setupdate] = useState(false);
if(params.edit && !update){
setdate(params.edit.date)
setfueltype(params.edit.fueltype)
setdistance(params.edit.distance)
setliters(params.edit.liters)
setupdate(true)
}
const DeleteTracker = async () => {
let TRACKS = await DB.get("tracker")
let tracks = TRACKS ? JSON.parse(TRACKS) : []
let result = []
for(var x=0;x<tracks.length;x++){
if(params.edit.id == tracks[x].id){
continue
}else{
result.push(tracks[x])
}
}
DB.set("tracker", JSON.stringify(result), function(){
onDone("deleted")
}, function(error){
console.log(error)
})
}
const Update = async () => {
let TRACKS = await DB.get("tracker")
let tracks = TRACKS ? JSON.parse(TRACKS) : []
for(var x=0;x<tracks.length;x++){
if(params.edit.id == tracks[x].id){
tracks[x].date = date,
tracks[x].fueltype = fueltype,
tracks[x].distance = distance,
tracks[x].liters = liters
}
}
await DB.set("tracker", JSON.stringify(tracks), function(){
onDone("updated")
}, function(error){
console.log("Failed to add:", error)
})
}
const onDone = (task) => {
const taskToShow = `Fuel Efficiency tracker ${task}`
navigation.route.params?.reload();
navigation.openModal({
open: true,
title: "Tracker",
body: taskToShow,
yesCB: () => navigation.navigation.goBack(),
yesText: "Okay",
yesButtonOnly: true,
theme: navigation.app_theme
})
}
return (
<CustomSafeArea>
<Elements.CustomDatePicker
visible={datepicker}
date={date ? new Date(date) : new Date(Date.now())}
textColor={navigation.app_theme?.theme.colors.text}
isDarkMode={navigation.app_theme?.theme.dark}
modalBackgroundColor={navigation.app_theme?.theme.colors.border}
onConfirm={(selectedDate) => {
setdate(selectedDate ? moment(selectedDate).format("DD MMM YYYY") : date != null ? date : null)
setdatepicker(false)
}}
onCancel={() => setdatepicker(false)}/>
<CustomHeader
title="Edit Tracker"
menu={false}
back={true}
backscreen="Tracker"
navigation={navigation}
rightMenu={
<TouchableOpacity onPress={() =>
navigation.openModal({
open: true,
title: "Fuel Tracker",
body: "Do you want to delete this fuel tracker?",
yesCB: DeleteTracker,
theme: navigation.app_theme
})
} style={{alignSelf: 'flex-end', right: 10}}>
<CustomIcon.MaterialIcons name="delete" size={25} color="#fff" />
</TouchableOpacity>
}/>
<View style={{marginTop: 20, padding: 0, alignItems: 'center', flex: 1}}>
<CustomForm
items={
[
{
name: "Date",
value: date,
disabled: true,
onClick: () => setdatepicker(true),
onChangeText: (val) => setdate(val)
},
{
name: "Fuel Type",
value: fueltype,
disabled: true,
onClick: () => navigation.navigation.navigate("AddFuelType", {get: (val) => setfueltype(val)})
},
{
kb: "numeric",
name: "Distance Travelled",
icon: 'ios-information-circle-outline',
value: distance,
onChangeText: (val) => setdistance(val),
onFocus: () => distance ? setdistance(distance.includes(" km") ? distance.replace(" km", "") : distance) : null,
onBlur: () => distance ? setdistance(distance + " km") : null,
onIconClick: () => Alert.alert("Information", "To measure distance travelled, make sure to reset your trip meter every time you gas full tank.")
},
{
kb: "numeric",
name: "Liters Fueled up",
value: liters,
onFocus: () => liters ? setliters(liters.includes(" km") ? liters.replace(" km", "") : liters) : null,
onBlur: () => liters ? setliters(liters + " L") : null,
onChangeText: (val) => setliters(val)
}
]}/>
</View>
<TouchableOpacity
onPress={Update}
style={{width: '90%', alignSelf: 'center', borderRadius: 10, padding: 15, backgroundColor: Theme.colors.primary, marginBottom: 20}}
>
<Text style={{alignSelf: 'center', color: '#fff', fontSize: 16, fontFamily: 'Arial'}}>Save Tracker</Text>
</TouchableOpacity>
</CustomSafeArea>
);
}
const mapStateToProps = (state) => {
return {
app_theme: state.appThemeReducer.theme
}
}
const mapDispatchToProps = {
openModal
}
export default connect(mapStateToProps, mapDispatchToProps)(Tracker)