all repos — caroster @ ac7c129ce3a5f103886fee0c738d5aab39af722a

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