[364f27d] | 1 | import React from "react";
|
---|
| 2 | import { useLocation, useNavigate } from 'react-router-dom'
|
---|
| 3 | import CenteredContainer from "../UtilComponents/CenteredContainer";
|
---|
| 4 | import axios from "../../custom-axios/axios";
|
---|
| 5 | import { MapContainer, TileLayer, Marker, Popup } from 'react-leaflet'
|
---|
| 6 | import 'leaflet/dist/leaflet.css';
|
---|
| 7 | import markerIconPng from "leaflet/dist/images/marker-icon.png"
|
---|
| 8 | import {Icon} from 'leaflet'
|
---|
| 9 | import '../UtilComponents/App.css'
|
---|
| 10 |
|
---|
| 11 | const MadeRequest = (props) => {
|
---|
| 12 | const location = useLocation()
|
---|
| 13 | const navigate = useNavigate()
|
---|
| 14 | const [formData, updateFormData] = React.useState({
|
---|
| 15 | status : location.state.madeRequest.status,
|
---|
| 16 | cityAddress : location.state.madeRequest.cityAddress,
|
---|
| 17 | numberAddress : location.state.madeRequest.numberAddress,
|
---|
| 18 | streetAddress : location.state.madeRequest.streetAddress,
|
---|
| 19 | latitude: location.state.madeRequest.latitude,
|
---|
| 20 | longitude : location.state.madeRequest.longitude,
|
---|
| 21 | confirmedByDriver: "",
|
---|
| 22 | })
|
---|
| 23 |
|
---|
| 24 | const updateMadeRequest = async () => {
|
---|
| 25 | const requestId = location.state.madeRequest.id
|
---|
| 26 | const response = await axios.get(`/request/${requestId}`)
|
---|
| 27 | updateFormData({
|
---|
| 28 | status : response.data.status,
|
---|
| 29 | cityAddress : response.data.cityAddress,
|
---|
| 30 | numberAddress : response.data.numberAddress,
|
---|
| 31 | streetAddress : response.data.streetAddress,
|
---|
| 32 | latitude: response.data.latitude,
|
---|
| 33 | longitude : response.data.longitude,
|
---|
| 34 | confirmedByDriver: response.data.confirmedByDriver
|
---|
| 35 | })
|
---|
| 36 | }
|
---|
| 37 |
|
---|
| 38 | const joinDriveForPassenger = async () => {
|
---|
| 39 | const requestId = location.state.madeRequest.id
|
---|
| 40 | const response = await axios.get(`/drive/request/${requestId}`)
|
---|
| 41 | .catch(function (error) {
|
---|
| 42 | if (error.response) {
|
---|
| 43 | alert("Wait for the driver to pick you up and start the drive. Then you can join.");
|
---|
| 44 | }
|
---|
| 45 | });
|
---|
| 46 | localStorage.removeItem("madeRequestId")
|
---|
| 47 | const startLatitude = formData.latitude;
|
---|
| 48 | const startLongitude = formData.longitude;
|
---|
| 49 | navigate("/started-drive", {state: {startedDrive: response.data, startLatitude: startLatitude, startLongitude: startLongitude}})
|
---|
| 50 | }
|
---|
| 51 |
|
---|
| 52 | let messageAfterConfirmation1 = ""
|
---|
| 53 | let messageAfterConfirmation2 = ""
|
---|
| 54 | let joinDrive = ""
|
---|
| 55 |
|
---|
| 56 | if(formData.status === "CONFIRMED"){
|
---|
| 57 | messageAfterConfirmation1 = <p style={{color: "darkgreen", fontStyle: "bold"}}>Your request has been confirmed,
|
---|
| 58 | please wait for the driver on the provided address.</p>
|
---|
| 59 | messageAfterConfirmation2 = <p style={{color: "darkred", fontStyle: "bold"}}>After your driver picks you up and starts the drive,
|
---|
| 60 | you should start the drive too.</p>
|
---|
| 61 | joinDrive = <a title={"Start Drive"} className={"myButton btn btn-danger"}
|
---|
| 62 | style={{backgroundColor: "cyan", borderColor: "black", color: "black", width: '90%'}}
|
---|
| 63 | onClick={() => joinDriveForPassenger()} >
|
---|
| 64 | Join Drive
|
---|
| 65 | </a>
|
---|
| 66 | }
|
---|
| 67 |
|
---|
| 68 | let confirmedByDriver = ""
|
---|
| 69 | if(formData.confirmedByDriver){
|
---|
| 70 | confirmedByDriver = <h6 className="card-text">
|
---|
| 71 | Confirmed by Driver: {formData.confirmedByDriver.name} {formData.confirmedByDriver.surname}</h6>
|
---|
| 72 | }
|
---|
| 73 |
|
---|
| 74 | return (
|
---|
| 75 | <CenteredContainer>
|
---|
| 76 | <div className="card text-center">
|
---|
| 77 | <div className="card-header" style={{color : "darkcyan"}}>
|
---|
| 78 | {formData.status}
|
---|
| 79 | </div>
|
---|
| 80 | <div className="card-body">
|
---|
| 81 | <h6 className="card-title" style={{color : "darkcyan"}}>You have created your request, please wait until some driver confirms it</h6>
|
---|
| 82 | <h5 className="card-title">{formData.cityAddress}, {formData.streetAddress}, {formData.numberAddress}</h5>
|
---|
| 83 | {confirmedByDriver}
|
---|
| 84 | </div>
|
---|
| 85 | <br></br>
|
---|
| 86 | {messageAfterConfirmation1}
|
---|
| 87 | {messageAfterConfirmation2}
|
---|
| 88 | <p style={{textAlign: 'center'}}>
|
---|
| 89 | <a style={{backgroundColor: "darkcyan", color: 'white', borderColor: 'black', width: '90%'}} className="myButton btn btn-primary"
|
---|
| 90 | onClick={() => updateMadeRequest()}>Refresh</a>
|
---|
| 91 | </p>
|
---|
| 92 | <p style={{textAlign: 'center'}}>
|
---|
| 93 | {joinDrive}
|
---|
| 94 | </p>
|
---|
| 95 | </div>
|
---|
| 96 | <MapContainer className="border border-info rounded-2" center={[formData.latitude, formData.longitude]} zoom={16} scrollWheelZoom={true} style={{width: '100%', marginTop: '50px', position: 'relative', zIndex: 0}}>
|
---|
| 97 | <TileLayer
|
---|
| 98 | attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
---|
| 99 | url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
|
---|
| 100 | />
|
---|
| 101 | <Marker position={[formData.latitude, formData.longitude]} icon={new Icon({iconUrl: markerIconPng, iconSize: [25, 41], iconAnchor: [12, 41]})}>
|
---|
| 102 | <Popup position={[formData.latitude, formData.longitude]}>
|
---|
| 103 | <p>Pick up location. Wait here.</p>
|
---|
| 104 | </Popup>
|
---|
| 105 | </Marker>
|
---|
| 106 | </MapContainer>
|
---|
| 107 | </CenteredContainer>
|
---|
| 108 | )
|
---|
| 109 | }
|
---|
| 110 |
|
---|
| 111 | export default MadeRequest; |
---|