all repos — caroster @ a60257e204f1cc253e9d375f87bc6d7ea661c1d8

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