all repos — caroster @ be8f93ea0966f0bc0587c2c127ee1ba15594a049

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

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

 1import List from '@material-ui/core/List';
 2import ListItem from '@material-ui/core/ListItem';
 3import {makeStyles} from '@material-ui/core/styles';
 4import Passenger from './Passenger';
 5import {PassengerEntity} from '../../generated/graphql';
 6
 7interface Props {
 8  passengers: PassengerEntity[];
 9  Button: ({
10    onClick,
11    disabled,
12  }: {
13    onClick: () => void;
14    disabled?: boolean;
15  }) => JSX.Element;
16  disabled?: boolean;
17  isTravel?: boolean;
18  places?: number;
19  onPress?: (passengerId: string) => void;
20  onClick?: (passengerId: string) => void;
21}
22
23const PassengersList = (props: Props) => {
24  const {passengers, places, Button, onClick, onPress, disabled, isTravel} =
25    props;
26  const classes = useStyles();
27  let list = passengers;
28
29  if (places) {
30    const emptyList = [...Array(places)];
31    list = Array.isArray(passengers)
32      ? emptyList.map((u, index) => passengers[index])
33      : emptyList;
34  }
35
36  return (
37    <div className={classes.container}>
38      <List disablePadding>
39        {!!list &&
40          list.map((passenger, index) => (
41            <ListItem
42              className={classes.passenger}
43              key={index}
44              disabled={disabled}
45              button={!!onPress}
46              onClick={() => !!onPress && onPress(passenger.id)}
47            >
48              <Passenger
49                key={index}
50                passenger={passenger}
51                isTravel={isTravel}
52                button={
53                  <Button
54                    onClick={() => onClick && onClick(passenger.id)}
55                    disabled={disabled}
56                  />
57                }
58              />
59            </ListItem>
60          ))}
61      </List>
62    </div>
63  );
64};
65
66const useStyles = makeStyles(theme => ({
67  container: {
68    padding: theme.spacing(0, 0, 1, 0),
69  },
70  passenger: {
71    paddingRight: theme.spacing(12),
72  },
73}));
74
75export default PassengersList;