feat: ✨ Update passenger location in waiting list #228
Simon Mulquin simon@octree.ch
Thu, 27 Jan 2022 10:10:28 +0000
10 files changed,
75 insertions(+),
18 deletions(-)
jump to
M
backend/api/event/services/event.js
→
backend/api/event/services/event.js
@@ -24,7 +24,7 @@ module.exports = {
sanitize: event => { const cars = event?.cars?.map(strapi.services.car.sanitize); const waitingList = event?.waitingList?.map(list => - _pick(list, ['id', 'name']) + _pick(list, ['id', 'name', 'location']) ); const sanitizedEvent = _pick(event, PUBLIC_FIELDS); return {...sanitizedEvent, cars, waitingList};
M
frontend/containers/NewPassengerDialog/AddPassengerToWaitingList.tsx
→
frontend/containers/NewPassengerDialog/AddPassengerToWaitingList.tsx
@@ -43,6 +43,7 @@ e.preventDefault();
const passenger = { email, name, + location, }; try {
M
frontend/containers/PassengersList/Passenger.tsx
→
frontend/containers/PassengersList/Passenger.tsx
@@ -10,21 +10,27 @@
interface Props { passenger?: ComponentPassengerPassenger; button?: ReactNode; + isVehicle?: boolean; } const Passenger = (props: Props) => { - const {passenger, button} = props; + const {passenger, button, isVehicle} = props; const {t} = useTranslation(); const classes = useStyles(); - if (passenger) + const showLocation = isVehicle ? false : passenger.location + + if (passenger) { return ( <> - <ListItemText primary={passenger.name} /> + <ListItemText + primary={passenger.name} + secondary={showLocation} + /> {button} </> ); - else + } else return ( <> <ListItemAvatar>
M
frontend/containers/PassengersList/index.tsx
→
frontend/containers/PassengersList/index.tsx
@@ -1,17 +1,15 @@
import List from '@material-ui/core/List'; import ListItem from '@material-ui/core/ListItem'; - import {makeStyles} from '@material-ui/core/styles'; import Passenger from './Passenger'; import { ComponentPassengerPassenger, EditComponentPassengerPassengerInput as PassengerInput, } from '../../generated/graphql'; -import ClearButton from './ClearButton'; interface Props { passengers: ComponentPassengerPassenger[]; - icon: string; + Button: JSX.Element; disabled?: boolean; isVehicle?: boolean; places?: number;@@ -24,11 +22,11 @@ const PassengersList = (props: Props) => {
const { passengers, places, - addPassenger, - icon, + Button, onClick, onPress, disabled, + isVehicle, } = props; const classes = useStyles(); let list = passengers;@@ -54,11 +52,10 @@ >
<Passenger key={index} passenger={passenger} + isVehicle={isVehicle} button={ - <ClearButton - icon={icon} + <Button onClick={() => onClick && onClick(passenger.id)} - tabIndex={-1} /> } />
M
frontend/containers/Travel/index.tsx
→
frontend/containers/Travel/index.tsx
@@ -8,6 +8,7 @@ import HeaderEditing from './HeaderEditing';
import Header from './Header'; import useActions from './useActions'; import {Travel as TravelType} from '../../generated/graphql'; +import ClearButton from '../ClearButton'; interface Props { travel: TravelType;@@ -30,7 +31,7 @@ ) : (
<Header travel={travel} toggleEditing={toggleEditing} /> )} <Divider /> - <AddPassengerButtons toggleNewPassenger={props.toggleNewPassenger} /> + <AddPassengerButtons toggleNewPassenger={props.toggleNewPassenger} /> <Divider /> {!isEditing && ( <PassengersList@@ -38,7 +39,11 @@ passengers={travel.passengers}
places={travel?.vehicle?.seats} addPassenger={actions.addPassenger} onClick={actions.removePassenger} - icon="close" + isVehicle + Button={({onClick}: {onClick: () => void}) => ( + <ClearButton icon="close" onClick={onClick} tabIndex={-1} /> + )} + isTravel /> )} </Paper>
A
frontend/containers/WaitingList/AssignButton.tsx
@@ -0,0 +1,36 @@
+import IconButton from '@material-ui/core/IconButton'; +import Icon from '@material-ui/core/Icon'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import { makeStyles } from '@material-ui/core/styles'; +import {useTranslation} from 'react-i18next'; + +interface Props { + onClick: () => void; + tabIndex?: number; +} + +const AssignButton = (props: Props) => { + const {onClick, tabIndex} = props; + const classes = useStyles(); + const {t} = useTranslation(); + + return ( + <ListItemSecondaryAction className={classes.action} onClick={onClick} tabIndex={tabIndex}> + <IconButton className={classes.button} size="small" color="primary"> + {t('passenger.actions.place')} + <Icon>chevron_right</Icon> + </IconButton> + </ListItemSecondaryAction> + ); +}; + +const useStyles = makeStyles(theme => ({ + action: { + top: theme.spacing(3), + }, + button: { + borderRadius: theme.spacing(1), + }, +})); + +export default AssignButton;
M
frontend/containers/WaitingList/index.tsx
→
frontend/containers/WaitingList/index.tsx
@@ -19,6 +19,8 @@ import PassengersList from '../PassengersList';
import RemoveDialog from '../RemoveDialog'; import AddPassengerButtons from '../AddPassengerButtons'; import TravelDialog from './TravelDialog'; +import ClearButton from '../ClearButton'; +import AssignButton from './AssignButton'; const WaitingList = ({ toggleNewPassenger,@@ -131,6 +133,14 @@ },
[isEditing, event] ); + const ListButton = isEditing + ? ({onClick}: {onClick: () => void}) => ( + <ClearButton icon="close" onClick={onClick} tabIndex={-1} /> + ) + : ({onClick}: {onClick: () => void}) => ( + <AssignButton onClick={onClick} tabIndex={-1} /> + ); + return ( <> <Paper className={classes.root}>@@ -156,7 +166,7 @@ <PassengersList
passengers={event.waitingList} addPassenger={addPassenger} onPress={onPress} - icon={isEditing ? 'close' : 'chevron_right'} + Button={ListButton} disabled={!isEditing && availability <= 0} /> </Paper>
M
frontend/locales/en.json
→
frontend/locales/en.json
@@ -213,7 +213,8 @@ "creation": {
"seats": "Number of passengers: {{seats}}" }, "actions": { - "remove_alert": "Are you sure you want to remove <italic> <bold> {{name}} </bold> </italic> from the waitlist?" + "remove_alert": "Are you sure you want to remove <italic> <bold> {{name}} </bold> </italic> from the waitlist?", + "place": "Assign" }, "errors": { "cant_add_passenger": "Unable to add a passenger",
M
frontend/locales/fr.json
→
frontend/locales/fr.json
@@ -212,7 +212,8 @@ "creation": {
"seats": "Nombre de passagers: {{seats}}" }, "actions": { - "remove_alert": "Voulez-vous vraiment supprimer <italic><bold>{{name}}</bold></italic> de la liste d'attente ?" + "remove_alert": "Voulez-vous vraiment supprimer <italic><bold>{{name}}</bold></italic> de la liste d'attente ?", + "place": "Placer" }, "errors": { "cant_add_passenger": "Impossible d'ajouter un passager",