all repos — caroster @ 86b7e87ee54db8d314d6fe51649d955c04b8b7be

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