diff --git a/src/components/pages/gallery/Upload.tsx b/src/components/pages/gallery/Upload.tsx index 4ef4bad18..6a42c2ab2 100644 --- a/src/components/pages/gallery/Upload.tsx +++ b/src/components/pages/gallery/Upload.tsx @@ -22,6 +22,7 @@ import UploadManager, { } from 'services/upload/uploadManager'; import uploadManager from 'services/upload/uploadManager'; import { METADATA_FOLDER_NAME } from 'services/exportService'; +import { getUserFacingErrorMessage } from 'utils/common/errorUtil'; const FIRST_ALBUM_NAME = 'My First Album'; @@ -280,7 +281,8 @@ export default function Upload(props: Props) { collections ); } catch (err) { - props.setBannerMessage(err.message); + const message = getUserFacingErrorMessage(err.message); + props.setBannerMessage(message); setProgressView(false); throw err; } finally { @@ -296,8 +298,9 @@ export default function Upload(props: Props) { await props.syncWithRemote(true, true); await uploadManager.retryFailedFiles(); } catch (err) { + const message = getUserFacingErrorMessage(err.message); appContext.resetSharedFiles(); - props.setBannerMessage(err.message); + props.setBannerMessage(message); setProgressView(false); } finally { props.setUploadInProgress(false); diff --git a/src/utils/common/errorUtil.ts b/src/utils/common/errorUtil.ts index 468c9c4dc..907f2d8cb 100644 --- a/src/utils/common/errorUtil.ts +++ b/src/utils/common/errorUtil.ts @@ -1,4 +1,5 @@ import { AxiosResponse } from 'axios'; +import constants from 'utils/strings/constants'; export const ServerErrorCodes = { SESSION_EXPIRED: '401', @@ -8,21 +9,21 @@ export const ServerErrorCodes = { FILE_TOO_LARGE: '413', }; -export const CustomError = { - UNKNOWN_ERROR: 'unknown error', - SUBSCRIPTION_VERIFICATION_ERROR: 'Subscription verification failed', - THUMBNAIL_GENERATION_FAILED: 'thumbnail generation failed', - VIDEO_PLAYBACK_FAILED: 'video playback failed', - ETAG_MISSING: 'no header/etag present in response body', - KEY_MISSING: 'encrypted key missing from localStorage', - FAILED_TO_LOAD_WEB_WORKER: 'failed to load web worker', - CHUNK_MORE_THAN_EXPECTED: 'chunks more than expected', - UNSUPPORTED_FILE_FORMAT: 'unsupported file formats', - FILE_TOO_LARGE: 'file too large', - SUBSCRIPTION_EXPIRED: 'subscription expired', - STORAGE_QUOTA_EXCEEDED: 'storage quota exceeded', - SESSION_EXPIRED_MESSAGE: 'session expired', -}; +export enum CustomError { + UNKNOWN_ERROR = 'unknown error', + SUBSCRIPTION_VERIFICATION_ERROR = 'Subscription verification failed', + THUMBNAIL_GENERATION_FAILED = 'thumbnail generation failed', + VIDEO_PLAYBACK_FAILED = 'video playback failed', + ETAG_MISSING = 'no header/etag present in response body', + KEY_MISSING = 'encrypted key missing from localStorage', + FAILED_TO_LOAD_WEB_WORKER = 'failed to load web worker', + CHUNK_MORE_THAN_EXPECTED = 'chunks more than expected', + UNSUPPORTED_FILE_FORMAT = 'unsupported file formats', + FILE_TOO_LARGE = 'file too large', + SUBSCRIPTION_EXPIRED = 'subscription expired', + STORAGE_QUOTA_EXCEEDED = 'storage quota exceeded', + SESSION_EXPIRED_MESSAGE = 'session expired', +} function parseUploadError(error: AxiosResponse) { let parsedMessage = null; @@ -70,3 +71,16 @@ export function handleUploadError(error: AxiosResponse | Error): Error { } return parsedError; } + +export function getUserFacingErrorMessage(err: CustomError) { + switch (err) { + case CustomError.SESSION_EXPIRED_MESSAGE: + return constants.SESSION_EXPIRED_MESSAGE; + case CustomError.SUBSCRIPTION_EXPIRED: + return constants.SUBSCRIPTION_EXPIRED; + case CustomError.STORAGE_QUOTA_EXCEEDED: + return constants.STORAGE_QUOTA_EXCEEDED; + default: + return constants.UNKNOWN_ERROR; + } +}