all repos — caroster @ e70dda0ec966d182cfaf626d43aea6888cdb7634

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