all repos — caroster @ ec2276de0c9fc726e11e5be10ba90e54216f1cec

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

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

 1import {useState} from 'react';
 2import {ListItem, List, styled, useTheme} from '@mui/material';
 3import Passenger from './Passenger';
 4import {PassengerEntity, TravelEntity} from '../../generated/graphql';
 5
 6const PREFIX = 'PassengersList';
 7
 8const classes = {
 9  container: `${PREFIX}-container`,
10  passenger: `${PREFIX}-passenger`,
11};
12
13const Root = styled('div')(({theme}) => ({
14  [`&.${classes.container}`]: {
15    padding: theme.spacing(0, 0, 1, 0),
16  },
17
18  [`& .${classes.passenger}`]: {
19    paddingRight: theme.spacing(12),
20  },
21}));
22
23export type PassengerButton = ({
24  onClick,
25  disabled,
26}: {
27  onClick: () => void;
28  passenger?: PassengerEntity;
29  disabled?: boolean;
30}) => JSX.Element;
31
32interface Props {
33  passengers: PassengerEntity[];
34  Button: PassengerButton;
35  travel?: TravelEntity;
36  onPress?: (passengerId: string) => void;
37  onClick?: (passengerId: string) => void;
38}
39
40const PassengersList = (props: Props) => {
41  const {passengers, Button, onClick, onPress, travel} = props;
42
43  const theme = useTheme();
44
45  let list = passengers;
46
47  return (
48    <Root sx={{padding: theme.spacing(0, 0, 1, 0)}}>
49      <List disablePadding>
50        {!!list &&
51          list.map((passenger, index) => (
52            <ListItem
53              sx={{paddingRight: theme.spacing(12)}}
54              key={index}
55              button={!!onPress}
56              onClick={() => !!onPress && onPress(passenger.id)}
57            >
58              <Passenger
59                key={index}
60                passenger={{
61                  id: passenger.id,
62                  attributes: {...passenger.attributes, travel: {data: travel}},
63                }}
64                isTravel={!!travel}
65                button={
66                  <Button
67                    passenger={passenger}
68                    onClick={() => onClick && onClick(passenger.id)}
69                  />
70                }
71              />
72            </ListItem>
73          ))}
74      </List>
75    </Root>
76  );
77};
78
79export default PassengersList;