all repos — caroster @ a781a5fafbf60b3c6587213cf3c9bfb735bdf933

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

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

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