all repos — caroster @ a60257e204f1cc253e9d375f87bc6d7ea661c1d8

[Octree] Group carpool to your event https://caroster.io

frontend/containers/Travel/index.tsx (view raw)

 1import {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 PassengersList from '../PassengersList';
 6import AddPassengerButtons from '../AddPassengerButtons';
 7import HeaderEditing from './HeaderEditing';
 8import Header from './Header';
 9import useActions from './useActions';
10import {Travel as TravelType} from '../../generated/graphql';
11
12interface Props {
13  travel: TravelType;
14  toggleNewPassenger: () => void;
15}
16
17const Travel = (props: Props) => {
18  const {travel} = props;
19  const classes = useStyles();
20  const [isEditing, toggleEditing] = useReducer(i => !i, false);
21  const actions = useActions({travel});
22
23  if (!travel) return null;
24
25  return (
26    <Paper className={classes.root}>
27      {isEditing ? (
28        <HeaderEditing travel={travel} toggleEditing={toggleEditing} />
29      ) : (
30        <Header travel={travel} toggleEditing={toggleEditing} />
31      )}
32      <Divider />
33        <AddPassengerButtons toggleNewPassenger={props.toggleNewPassenger} />
34      <Divider />
35      {!isEditing && (
36        <PassengersList
37          passengers={travel.passengers}
38          places={travel?.vehicle?.seats}
39          addPassenger={actions.addPassenger}
40          onClick={actions.removePassenger}
41          icon="close"
42        />
43      )}
44    </Paper>
45  );
46};
47
48const useStyles = makeStyles(theme => ({
49  root: {
50    position: 'relative',
51  },
52}));
53
54export default Travel;