source: frontend/src/Pages/TransportDetailsPage.js@ 07f4e8b

Last change on this file since 07f4e8b was e6c2521, checked in by darsov2 <62809499+darsov2@…>, 6 months ago

images upload/download impl, other fixes

  • Property mode set to 100644
File size: 8.8 KB
Line 
1import React from "react";
2import LoginForm from "../Components/Login/LoginForm";
3import {Container, Row, Col, Form, Image, Button, Modal} from "react-bootstrap";
4import Navigation from "../Components/Layout/Navbar/Navigation";
5import Carousel from "react-bootstrap/Carousel";
6import {useState} from "react";
7import DescriptionContainer from "../Components/HotelDetails/DescriptionContainer";
8import ReviewsCarousel from "../Components/HotelDetails/ReviewsCarousel";
9import RoomsTable from "../Components/HotelDetails/RoomsTable";
10import ContactBar from "../Components/HotelDetails/ContactBar";
11import RouteContainer from "../Components/TransportDetails/RouteContainer";
12import {useLocation, useParams} from "react-router-dom";
13import SearchCriteriasTransport from "../Components/SearchCriterias/SearchCriteriasTransport";
14import SearchCriteriasBar from "../Components/SearchCriterias/SearchCriteriasBar";
15import useCreate from "../Components/Hooks/useCreate";
16
17const TransportDetailsPage = (props) => {
18 document.body.style.backgroundColor = "white";
19 const {createEntity} = useCreate()
20
21 const [index, setIndex] = useState(0);
22 const [getData, setData] = useState(0);
23
24 const location = useLocation();
25 const {data, params} = location.state;
26 const [show, setShow] = useState(false);
27 const handleClose = () => setShow(false);
28 const handleShow = () => setShow(true);
29 const route = data.transportRoutes.filter(x => x.from === params.from && x.to === params.to)[0];
30 const dateFormatter = (str) => {
31 const inputDate = new Date(str);
32
33 const options = {
34 year: 'numeric',
35 month: '2-digit',
36 day: '2-digit',
37 hour12: false,
38 hour: '2-digit',
39 minute: '2-digit'
40 };
41
42 return inputDate.toLocaleString('de-DE', options);
43
44 }
45
46 const handleSelect = (selectedIndex) => {
47 setIndex(selectedIndex);
48 };
49
50 return (
51 <>
52 <Navigation/>
53 <Container className="my-3">
54 <Row>
55 <span><h2 style={{color: "#159895", textAlign: 'left'}}>Вашето пребарување</h2></span>
56 </Row>
57 <SearchCriteriasBar type={'transport'} showButton={false} criterias={params}></SearchCriteriasBar>
58 <Row className="d-flex justify-content-between">
59 <Col style={{textAlign: "left"}}>
60 <span>
61 <h3 style={{color: "#159895"}}><b>Резултантна рута</b></h3>
62 <h2 style={{color: "#159895"}}>{data.from} - {data.to}</h2>
63 <h5 style={{color: "#159895"}}>({data.routes.join(", ")})</h5>
64 </span>
65 </Col>
66 <Col>
67 <Container>
68 <Row className="mb-4">
69 <Col style={{textAlign: "right"}}>
70 <span
71 style={{
72 backgroundColor: "#159895",
73 padding: "0.75em",
74 fontWeight: "bold",
75 fontSize: "1.25rem",
76 borderRadius: "0.75em",
77 color: "white",
78 }}
79 >
80 9.1
81 </span>
82 </Col>
83 </Row>
84 </Container>
85 </Col>
86 </Row>
87 <Row>
88 <RouteContainer data={data}></RouteContainer>
89 </Row>
90 <hr></hr>
91 <Row>
92 <Col>
93 <h3>Одбрана рута</h3>
94 </Col>
95 <Col>
96 <h3>{params.from + ' - ' + params.to}</h3>
97 </Col>
98 </Row>
99 <hr></hr>
100 <Row>
101 <Col>
102 <h3>Очекувано време на поаѓање</h3>
103 </Col>
104 <Col>
105 <h3>{dateFormatter(route.departure)}</h3>
106 </Col>
107 </Row>
108 <hr></hr>
109 <Row>
110 <Col>
111 <h3>Цена</h3>
112 </Col>
113 <Col>
114 <h3>{data.price}$</h3>
115 </Col>
116 </Row>
117 <hr></hr>
118 <Row>
119 <Col className="d-flex flex-column justify-content-center">
120 <h3>Возач</h3>
121 </Col>
122 <Col className="d-flex flex-column justify-content-center">
123 <Container className="d-flex flex-row justify-content-center mb-3" style={{paddingLeft: "28%"}}>
124 <Col className="d-flex flex-column justify-content-center" style={{maxWidth: "30%"}}>
125 <Image
126 src="https://t3.ftcdn.net/jpg/05/16/27/58/360_F_516275801_f3Fsp17x6HQK0xQgDQEELoTuERO4SsWV.jpg"
127 style={{
128 height: "4em",
129 borderRadius: "50%",
130 maxWidth: "100%",
131 }}
132 className="m-auto"
133 ></Image>
134 </Col>
135 <Col className="d-flex flex-column justify-content-center">
136 <Container className="pt-2" style={{textAlign: "left"}}>
137 <h4>{data.transport.owner.name} {data.transport.owner.surname.substring(0, 1)}.</h4>
138 </Container>
139 </Col>
140 </Container>
141 </Col>
142 </Row>
143 <hr></hr>
144 <Row>
145 <Col>
146 <h3>Возило</h3>
147 </Col>
148 <Col>
149 <h3>{data.transport.carBrand + " " + data.transport.carType}</h3>
150 </Col>
151 </Row>
152 <hr></hr>
153 <Row>
154 <Col className="d-flex flex-column justify-content-center">
155 <h3>Број на патници</h3>
156 </Col>
157 <Col md="auto" className="d-flex flex-column justify-content-center">
158 <Form.Select onChange={(e) => {
159 setData(e.target.value)
160 }} aria-label="Default select example">
161 <option></option>
162 {[...Array(route.freeSpace).keys()].map(x => {
163 return (
164 <option value={x+1} >{x + 1}</option>
165 )
166 })}
167 </Form.Select>
168 </Col>
169 <Col>
170 <Button className="m-2" size="lg" style={{backgroundColor: "#159895"}} onClick={handleShow}>Резервирај</Button>
171 </Col>
172 </Row>
173 <Row><ContactBar></ContactBar></Row>
174 </Container>
175
176 <Modal show={show} size={'lg'} onHide={handleClose}>
177 <Modal.Header closeButton>
178 <Modal.Title>Потврда на резервација</Modal.Title>
179 </Modal.Header>
180 <Modal.Body>
181 <h4>Резервација на рута</h4>
182 <h3>{route.from + ' ' + route.to}</h3>
183 <h4>Време на поаѓање:<b>{' ' + dateFormatter(route.departure)}</b></h4>
184 <h4>Време на престигнување:<b>{' ' + dateFormatter(route.arrival)}</b></h4>
185 <h4>Број на патници:<b>{' ' + getData}</b></h4>
186 </Modal.Body>
187 <Modal.Footer>
188 <Button variant="secondary" onClick={handleClose}>
189 Close
190 </Button>
191 <Button variant="primary" onClick={() => {
192 createEntity('transport/reserve', {
193 transportRouteId: route.routeId,
194 userId: 1,
195 numSeats: getData
196 })
197 handleClose();
198 }}>
199 Резервирај
200 </Button>
201 </Modal.Footer>
202 </Modal>
203 </>
204 );
205};
206
207export default TransportDetailsPage;
Note: See TracBrowser for help on using the repository browser.