website/src/App.js

123 lines
3.1 KiB
JavaScript
Raw Permalink Normal View History

2020-03-01 20:40:51 +01:00
import React from 'react';
import { ToastProvider } from 'react-toast-notifications';
2020-03-02 10:27:28 +01:00
import Header from './Components/Header';
2020-03-01 20:40:51 +01:00
import Footer from './Components/Footer';
import GasStation from "./Components/GasStation";
2020-03-03 10:34:00 +01:00
import About from "./Components/About";
2020-03-01 20:40:51 +01:00
import Map from "./Components/Map";
import 'mapbox-gl/dist/mapbox-gl.css';
import './App.css';
class Application extends React.Component {
constructor(props) {
super(props);
this.state = {
showModal: false,
2020-03-03 10:34:00 +01:00
showAboutModal: false,
2020-03-01 20:40:51 +01:00
selectedGasStation: {},
2020-03-03 10:10:00 +01:00
selectedGasType: 'E85',
needUpdateUserLocation: false
2020-03-01 20:40:51 +01:00
};
}
/**
* Méthode permettant de sélectionner le type de carburant à afficher
* @param {Object} e
*/
selectGasType = (e) => {
const {
value,
} = e.target;
this.setState(prevState => ({
...prevState,
selectedGasType: value
}));
}
/**
* Méthode permettant de fermer la modale contenant les détails de la station
* @param {Boolean} goToWaze
*/
hideModal = (goToWaze) => {
const {
selectedGasStation,
} = this.state;
if (goToWaze) {
const {
coordinates,
} = selectedGasStation.location;
window.open(`https://www.waze.com/livemap/directions?navigate=yes&latlng=${coordinates[1]}%2C${coordinates[0]}&zoom=17`);
2020-03-01 20:40:51 +01:00
}
this.setState(prevState => ({
...prevState,
selectedGasStation: {},
showModal: false
}));
}
/**
* Méthode permettant de sélectionner et d'afficher le détails d'une station
* @param {Object} selectedGasStation
*/
showGasStation = (selectedGasStation) => {
this.setState(prevState => ({
...prevState,
showModal: true,
selectedGasStation
}));
}
2020-03-03 10:10:00 +01:00
/**
* Méthode permettant de demander à l'app de géoloc ou non l'utilisateur
*/
setNeedUpdateUserLocation = (needUpdateUserLocation) => {
this.setState({
needUpdateUserLocation
})
}
2020-03-03 10:34:00 +01:00
toggleAboutModal = () => {
this.setState(prevState => ({
showAboutModal: !prevState.showAboutModal
}));
}
2020-03-01 20:40:51 +01:00
/**
* Méthode gérant le rendu de la vue
*/
render() {
const {
selectedGasType,
showModal,
2020-03-03 10:34:00 +01:00
showAboutModal,
2020-03-01 20:40:51 +01:00
selectedGasStation,
2020-03-03 10:10:00 +01:00
userLocation,
needUpdateUserLocation,
2020-03-01 20:40:51 +01:00
} = this.state;
return (
<ToastProvider>
2020-03-03 10:34:00 +01:00
<Header toggleAboutModal={this.toggleAboutModal} />
2020-03-01 20:40:51 +01:00
<GasStation
showModal={showModal}
hideModal={this.hideModal}
2020-03-06 15:52:33 +01:00
station={selectedGasStation}
gasType={selectedGasType}
2020-03-01 20:40:51 +01:00
/>
2020-03-03 10:34:00 +01:00
<About
showModal={showAboutModal}
toggleAboutModal={this.toggleAboutModal}
/>
2020-03-03 10:10:00 +01:00
<Map selectedGasType={selectedGasType} userLocation={userLocation} needUpdateUserLocation={needUpdateUserLocation} setNeedUpdateUserLocation={this.setNeedUpdateUserLocation} showGasStation={this.showGasStation} />
<Footer selectedGasType={selectedGasType} isLocating={needUpdateUserLocation} selectGasType={this.selectGasType} setNeedUpdateUserLocation={this.setNeedUpdateUserLocation} />
2020-03-01 20:40:51 +01:00
</ToastProvider>
);
}
}
export default Application;