all repos — caroster @ 5e8d53baf4f6676069cef7da12605ec9ae0375ed

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

feat: ✨ Update passenger location in waiting list

#228
Simon Mulquin simon@octree.ch
Thu, 27 Jan 2022 10:10:28 +0000
commit

5e8d53baf4f6676069cef7da12605ec9ae0375ed

parent

a60257e204f1cc253e9d375f87bc6d7ea661c1d8

M backend/api/event/services/event.jsbackend/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.tsxfrontend/containers/NewPassengerDialog/AddPassengerToWaitingList.tsx

@@ -43,6 +43,7 @@ e.preventDefault();

const passenger = { email, name, + location, }; try {
M frontend/containers/PassengersList/Passenger.tsxfrontend/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.tsxfrontend/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.tsxfrontend/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.tsxfrontend/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.jsonfrontend/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.jsonfrontend/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",