diff --git a/i18n/en-US.yml b/i18n/en-US.yml index 577ff4fcc..ab0b81d32 100644 --- a/i18n/en-US.yml +++ b/i18n/en-US.yml @@ -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)" diff --git a/i18n/fr.yml b/i18n/fr.yml index 889c29c3a..5ba07ea9a 100644 --- a/i18n/fr.yml +++ b/i18n/fr.yml @@ -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é)" diff --git a/lib/actions/user.js b/lib/actions/user.js index c5d008ccf..d3ac3929f 100644 --- a/lib/actions/user.js +++ b/lib/actions/user.js @@ -17,6 +17,7 @@ import { } from '../util/user' import { formattedToastSuccessMessage, + toastMessageOnPlaceChanged, toastPromise } from '../components/util/toasts' import { isBlank } from '../util/ui' @@ -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. @@ -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 + ) } } @@ -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 } } } diff --git a/lib/components/map/connected-endpoints-overlay.tsx b/lib/components/map/connected-endpoints-overlay.tsx index 925830a54..9fb6012bf 100644 --- a/lib/components/map/connected-endpoints-overlay.tsx +++ b/lib/components/map/connected-endpoints-overlay.tsx @@ -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 & { forgetPlace: (place: string, intl: IntlShape) => void - rememberPlace: (arg: UserLocationAndType, intl: IntlShape) => number + rememberPlace: (arg: UserLocationAndType, intl: IntlShape) => void setViewedStop: (arg: Location) => void } @@ -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] ) diff --git a/lib/components/util/toasts.tsx b/lib/components/util/toasts.tsx index 1860bef4a..0f5444b81 100644 --- a/lib/components/util/toasts.tsx +++ b/lib/components/util/toasts.tsx @@ -21,11 +21,14 @@ export const formattedToastSuccessMessage = ( ) } -export const toastStatusMessages = ( +export const toastPromise = async ( + promise: Promise, successMessage: JSX.Element | string, - intl: IntlShape -): any => { - return { + intl: IntlShape, + id?: string, + silentOnSuccess = false +): Promise => { + const toastStatusMessages = { error: intl.formatMessage({ id: 'components.UserAccountScreen.errorUpdatingProfile' }), @@ -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, - successMessage: JSX.Element | string, - intl: IntlShape, - id?: string, - silentOnSuccess = false -): Promise => { const result = await toast.promise( promise, - toastStatusMessages(successMessage, intl), - toastSettings(id, silentOnSuccess) + toastStatusMessages, + toastSettings ) return result }