Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions i18n/en-US.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ actions:
smsVerificationFailed: >-
Your phone could not be verified. Perhaps the code you entered has
expired. Please request a new code and try again.
tripDeleted: Your trip has been deleted.
common:
coordinates: "{lat}, {lon}"
currentlySelected: " (Currently selected)"
Expand Down
1 change: 1 addition & 0 deletions i18n/fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ actions:
Votre numéro de téléphone n'a pas pu être vérifié. Le code que vous avez
entré a peut-être expiré. Veuillez demander un nouveau code, puis
réessayez.
tripDeleted: Votre trajet a été supprimé
common:
coordinates: "{lat}; {lon}"
currentlySelected: " (actuellement sélectionné)"
Expand Down
18 changes: 10 additions & 8 deletions lib/actions/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
} from '../util/user'
import {
formattedToastSuccessMessage,
toastMessageOnPlaceChanged,
toastPromise
} from '../components/util/toasts'
import { isBlank } from '../util/ui'
Expand Down Expand Up @@ -581,11 +582,10 @@ export function confirmAndDeleteUserMonitoredTrip(tripId, intl) {
)
const requestUrl = `${apiBaseUrl}${API_MONITORED_TRIP_PATH}/${tripId}`

const { message, status } = await secureFetch(
requestUrl,
accessToken,
apiKey,
'DELETE'
const { message, status } = await toastPromise(
secureFetch(requestUrl, accessToken, apiKey, 'DELETE'),
intl.formatMessage({ id: 'actions.user.tripDeleted' }),
intl
)
if (status === 'success') {
// Reload user's monitored trips after deletion.
Expand Down Expand Up @@ -802,7 +802,11 @@ export function saveUserPlace(placeToSave, placeIndex, intl) {
loggedInUser.savedLocations[placeIndex] = placeToSave
}

return dispatch(createOrUpdateUser(loggedInUser, intl))
return toastPromise(
dispatch(createOrUpdateUser(loggedInUser, intl)),
toastMessageOnPlaceChanged(placeToSave, intl, 'Remembered'),
intl
)
}
}

Expand Down Expand Up @@ -895,10 +899,8 @@ export function rememberPlace(placeTypeLocation, intl) {
intl.formatMessage({ id: 'actions.user.mustBeLoggedInToSavePlace' })
)
}
return UserActionResult.FAILURE
} else if (persistenceMode.isLocalStorage) {
dispatch(rememberLocalUserPlace(placeTypeLocation))
return UserActionResult.SUCCESS
}
}
}
Expand Down
13 changes: 3 additions & 10 deletions lib/components/map/connected-endpoints-overlay.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,15 @@ import EndpointsOverlay from '@opentripplanner/endpoints-overlay'
import React, { ComponentProps, useCallback } from 'react'

import { clearLocation } from '../../actions/form'
import { convertToPlace, getUserLocations } from '../../util/user'
import { forgetPlace, rememberPlace } from '../../actions/user'
import { getActiveSearch, getShowUserSettings } from '../../util/state'
import { getUserLocations } from '../../util/user'
import { setLocation } from '../../actions/map'
import { setViewedStop } from '../../actions/ui'
import { toastMessageOnPlaceChanged, toastPromise } from '../util/toasts'

type Props = ComponentProps<typeof EndpointsOverlay> & {
forgetPlace: (place: string, intl: IntlShape) => void
rememberPlace: (arg: UserLocationAndType, intl: IntlShape) => number
rememberPlace: (arg: UserLocationAndType, intl: IntlShape) => void
setViewedStop: (arg: Location) => void
}

Expand All @@ -34,13 +33,7 @@ const ConnectedEndpointsOverlay = ({

const _rememberPlace = useCallback(
async (placeTypeLocation) => {
const place = convertToPlace(placeTypeLocation.location)
await toastPromise(
// @ts-expect-error Toast doesn't like that this returns a number
rememberPlace(placeTypeLocation, intl),
toastMessageOnPlaceChanged(place, intl, 'Remembered'),
intl
)
rememberPlace(placeTypeLocation, intl)
},
[rememberPlace, intl]
)
Expand Down
37 changes: 12 additions & 25 deletions lib/components/util/toasts.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,14 @@ export const formattedToastSuccessMessage = (
)
}

export const toastStatusMessages = (
export const toastPromise = async <T extends unknown>(
promise: Promise<T>,
successMessage: JSX.Element | string,
intl: IntlShape
): any => {
return {
intl: IntlShape,
id?: string,
silentOnSuccess = false
): Promise<T> => {
const toastStatusMessages = {
error: intl.formatMessage({
id: 'components.UserAccountScreen.errorUpdatingProfile'
}),
Expand All @@ -34,38 +37,22 @@ export const toastStatusMessages = (
}),
success: successMessage
}
}

export const toastSettings = (
id?: string | undefined,
silentOnSuccess?: boolean
): DefaultToastOptions => {
const settings: DefaultToastOptions = {
const toastSettings: DefaultToastOptions = {
ariaProps: {
'aria-live': 'assertive',
role: 'alert'
}
}
if (silentOnSuccess) {
settings.className = 'toast-hidden'
toastSettings.className = 'toast-hidden'
}
if (id) {
settings.id = id
toastSettings.id = id
}
return settings
}

export const toastPromise = async (
promise: Promise<any>,
successMessage: JSX.Element | string,
intl: IntlShape,
id?: string,
silentOnSuccess = false
): Promise<any> => {
const result = await toast.promise(
promise,
toastStatusMessages(successMessage, intl),
toastSettings(id, silentOnSuccess)
toastStatusMessages,
toastSettings
)
return result
}
Expand Down
Loading