app/src/containers/Car/index.js (view raw)
1import React, {useReducer} from 'react';
2import {makeStyles} from '@material-ui/core/styles';
3import Divider from '@material-ui/core/Divider';
4import Paper from '@material-ui/core/Paper';
5import {useTranslation} from 'react-i18next';
6import {useStrapi} from 'strapi-react-context';
7import {useEvent} from '../../contexts/Event';
8import {useToast} from '../../contexts/Toast';
9import PassengersList from '../PassengersList';
10import HeaderEditing from './HeaderEditing';
11import Header from './Header';
12
13const Car = ({car}) => {
14 const classes = useStyles();
15 const {t} = useTranslation();
16 const {event} = useEvent();
17 const {addToast} = useToast();
18 const strapi = useStrapi();
19 const [isEditing, toggleEditing] = useReducer(i => !i, false);
20
21 if (!car) return null;
22
23 const addPassenger = async passenger => {
24 try {
25 await strapi.services.cars.update(car.id, {
26 passengers: [...(car.passengers || []), passenger],
27 });
28 } catch (error) {
29 console.error(error);
30 addToast(t('car.errors.cant_add_passenger'));
31 }
32 };
33
34 const removePassenger = async idx => {
35 if (!car?.passengers) return false;
36 try {
37 await strapi.services.events.update(event.id, {
38 waiting_list: [...(event.waiting_list || []), car.passengers[idx]],
39 });
40 return await strapi.services.cars.update(car.id, {
41 passengers: car.passengers.filter((_, i) => i !== idx),
42 });
43 } catch (error) {
44 console.error(error);
45 addToast(t('car.errors.cant_remove_passenger'));
46 return false;
47 }
48 };
49
50 return (
51 <Paper className={classes.root}>
52 {isEditing ? (
53 <HeaderEditing car={car} toggleEditing={toggleEditing} />
54 ) : (
55 <Header car={car} toggleEditing={toggleEditing} />
56 )}
57 <Divider />
58 <PassengersList
59 passengers={car.passengers}
60 places={car.seats}
61 addPassenger={addPassenger}
62 onClick={removePassenger}
63 icon="close"
64 />
65 </Paper>
66 );
67};
68
69const useStyles = makeStyles(theme => ({
70 root: {
71 position: 'relative',
72 },
73}));
74
75export default Car;