all repos — caroster @ 5e8d53baf4f6676069cef7da12605ec9ae0375ed

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