all repos — caroster @ df999a6521271a78a049100d10cad75c35ace56c

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

fix: 💬 Add variables for email templates, improve email helper

#160
Tim Izzo tim@octree.ch
Fri, 29 Oct 2021 12:07:54 +0200
commit

df999a6521271a78a049100d10cad75c35ace56c

parent

de693e86e975ebf6ed7f19f82762e553d852de03

M backend/api/car/models/car.jsbackend/api/car/models/car.js

@@ -7,12 +7,13 @@

module.exports = { lifecycles: { async afterCreate(result) { - sendEmailsToWaitingList(result.event); + sendEmailsToWaitingList(result); }, }, }; -const sendEmailsToWaitingList = async event => { +const sendEmailsToWaitingList = async car => { + const event = car.event; const eventWaitingList = event?.waitingList || []; const userEmails = eventWaitingList.map(user => user.email).filter(Boolean); const templateId = await strapi.plugins[

@@ -30,7 +31,8 @@ templateId,

subject: `Caroster: nouvelle voiture pour ${event.name}`, }, { - eventName: event.name, + event, + car, eventLink: `${STRAPI_URL}/e/${event.uuid}`, } );
M backend/api/event/models/event.jsbackend/api/event/models/event.js

@@ -57,11 +57,10 @@ templateId,

subject: `Caroster: ${event.name}`, }, { - eventName: event.name, + event, eventTime: event.date ? moment(event.date).format('dddd D MMMM YYYY') : null, - eventAddress: event.address, eventLink: `${STRAPI_URL}/e/${event.uuid}`, } );
M backend/api/event/services/event.jsbackend/api/event/services/event.js

@@ -4,6 +4,7 @@ const _pick = require('lodash/pick');

const TEMPLATE_NAME_RECAP = 'event_recap'; const PUBLIC_FIELDS = [ + 'id', 'uuid', 'name', 'email',

@@ -54,7 +55,7 @@ templateId,

subject: `Caroster: ${event.name}`, }, { - eventName: event.name, + event, eventLink: `${STRAPI_URL}/e/${event.uuid}`, waitingListCount: event.waitingList?.length || 0, carsCount: event.cars?.length || 0,
M frontend/containers/Car/index.tsxfrontend/containers/Car/index.tsx

@@ -104,6 +104,7 @@ places={car.seats}

addPassenger={addPassenger} onClick={removePassenger} icon="close" + isCar /> )} </Paper>
M frontend/containers/PassengersList/Input.tsxfrontend/containers/PassengersList/Input.tsx

@@ -12,10 +12,11 @@

interface Props { addPassenger: (passenger: PassengerInput) => void; id: number; + isCar?: boolean; } const Input = (props: Props) => { - const {addPassenger, id} = props; + const {addPassenger, id, isCar} = props; const [name, setName] = useState(''); const [email, setEmail] = useState(''); const [error, setError] = useState<string>();

@@ -64,10 +65,14 @@ value={email}

onChange={e => setEmail(e.target.value)} onKeyDown={onKeyDown} fullWidth - label={t`car.passengers.email`} + label={t`passenger.input.email`} id={`NewPassenger-${id}-email`} name={`passenger-${id}-email`} - helperText={t`car.passengers.emailHelper`} + helperText={ + isCar + ? t`passenger.input.email_helper_car` + : t`passenger.input.email_helper` + } error={error === 'email'} /> </Box>

@@ -79,7 +84,7 @@

const useStyles = makeStyles(theme => ({ emailBox: { transition: 'all 0.3s ease', - maxHeight: ({showEmail}) => (showEmail ? '5rem' : 0), + maxHeight: ({showEmail}) => (showEmail ? '6rem' : 0), overflow: 'hidden', }, }));
M frontend/containers/PassengersList/index.tsxfrontend/containers/PassengersList/index.tsx

@@ -14,6 +14,7 @@ interface Props {

passengers: ComponentPassengerPassenger[]; icon: string; disabled?: boolean; + isCar?: boolean; places?: number; onPress?: (passengerId: string) => void; onClick?: (passengerId: string) => void;

@@ -21,8 +22,16 @@ addPassenger: (passenger: PassengerInput) => void;

} const PassengersList = (props: Props) => { - const {passengers, places, addPassenger, icon, onClick, onPress, disabled} = - props; + const { + passengers, + places, + addPassenger, + icon, + onClick, + onPress, + disabled, + isCar, + } = props; const classes = useStyles(); let list = passengers;

@@ -40,7 +49,11 @@ ? passengers

? places - passengers.length > 0 : places > 0 : true) && ( - <Input addPassenger={addPassenger} id={!!places ? 'Car' : 'Waiting'} /> + <Input + addPassenger={addPassenger} + id={!!places ? 'Car' : 'Waiting'} + isCar={isCar} + /> )} <List disablePadding> {!!list &&
M frontend/lib/apolloClient.tsxfrontend/lib/apolloClient.ts

@@ -6,7 +6,7 @@ import merge from 'deepmerge';

import isEqual from 'lodash/isEqual'; import useAuthStore from '../stores/useAuthStore'; -const {STRAPI_URL = 'http://localhost:1337'} = process.env; +const {STRAPI_URL = ''} = process.env; // https://github.com/vercel/next.js/tree/canary/examples/with-apollo // https://github.com/vercel/next.js/tree/canary/examples/layout-component

@@ -46,7 +46,7 @@ });

const httpLink = uri => new HttpLink({ - uri, // Server URL (must be absolute) + uri, credentials: 'same-origin', // Additional fetch() options like `credentials` or `headers` });
M frontend/locales/en.jsonfrontend/locales/en.json

@@ -108,9 +108,7 @@ "removed": "The car has been removed"

}, "passengers": { "empty": "Available seat", - "add": "Add a passenger", - "email": "Your email", - "emailHelper": "Optional - Get notified if cars are added" + "add": "Add a passenger" }, "errors": { "cant_create": "Unable to create the car",

@@ -179,6 +177,11 @@ "cant_add_passenger": "Unable to add a passenger",

"cant_save_passengers": "Unable to update passengers", "cant_remove_passenger": "Unable to remove the passenger", "cant_select_car": "Unable to select the car" + }, + "input": { + "email": "Your email", + "email_helper": "Optional - Get notified if cars are added", + "email_helper_car": "Optional" } }, "signup": {
M frontend/locales/fr.jsonfrontend/locales/fr.json

@@ -108,9 +108,7 @@ "removed": "La voiture a été supprimée"

}, "passengers": { "empty": "Place disponible", - "add": "Ajouter un passager", - "email": "Votre email", - "emailHelper": "Optionnel - Soyez notifié si des voitures sont ajoutées" + "add": "Ajouter un passager" }, "errors": { "cant_create": "Impossible de créer la voiture",

@@ -179,6 +177,11 @@ "cant_add_passenger": "Impossible d'ajouter un passager",

"cant_save_passengers": "Impossible de mettre à jour passagers", "cant_remove_passenger": "Impossible de retirer le passager", "cant_select_car": "Impossible de sélectionner la voiture" + }, + "input": { + "email": "Votre email", + "email_helper": "Optionnel - Soyez notifié si des voitures sont ajoutées", + "email_helper_car": "Optionnel" } }, "signup": {
M frontend/next.config.jsfrontend/next.config.js

@@ -1,7 +1,16 @@

const withPWA = require('next-pwa'); -const {NODE_ENV} = process.env; +const {STRAPI_URL = 'http://localhost:1337', NODE_ENV} = process.env; module.exports = withPWA({ + async rewrites() { + return [ + { + source: '/graphql', + destination: `${STRAPI_URL}/graphql`, + }, + ]; + }, + pwa: { dest: 'public', disable: NODE_ENV !== 'production',