From e7f9498ef2a44904eb04d85e43ab76e5bfa2a4f4 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Mon, 30 Jan 2023 16:59:24 +0530 Subject: [PATCH 01/12] fix copy --- src/utils/strings/englishConstants.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/strings/englishConstants.tsx b/src/utils/strings/englishConstants.tsx index e55d849af..baa38522b 100644 --- a/src/utils/strings/englishConstants.tsx +++ b/src/utils/strings/englishConstants.tsx @@ -690,7 +690,7 @@ const englishConstants = { LINK_EXPIRED_MESSAGE: 'This link has either expired or been disabled!', MANAGE_LINK: 'Manage link', LINK_TOO_MANY_REQUESTS: 'This album is too popular for us to handle!', - DISABLE_PUBLIC_SHARING: "'Disable public sharing", + DISABLE_PUBLIC_SHARING: 'Disable public sharing', DISABLE_PUBLIC_SHARING_MESSAGE: 'Are you sure you want to disable public sharing?', FILE_DOWNLOAD: 'Allow downloads', From 3ae79e57c8546a2d91890435307cc5d7b218483e Mon Sep 17 00:00:00 2001 From: Abhinav Date: Mon, 30 Jan 2023 19:18:05 +0530 Subject: [PATCH 02/12] added KNOWN_NON_MEDIA_FORMATS list --- src/constants/upload/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/constants/upload/index.ts b/src/constants/upload/index.ts index d9aefa1b3..bfb684018 100644 --- a/src/constants/upload/index.ts +++ b/src/constants/upload/index.ts @@ -15,6 +15,8 @@ export const FILE_TYPE_LIB_MISSED_FORMATS = [ { fileType: FILE_TYPE.VIDEO, exactType: 'mp4', mimeType: 'video/mp4' }, ]; +export const KNOWN_NON_MEDIA_FORMATS = ['xmp']; + export const EXIFLESS_FORMATS = ['image/gif']; export const EXIF_LIBRARY_UNSUPPORTED_FORMATS = ['image/webp']; From 6969df8b39823339324f5205108c314955bc3c13 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Mon, 30 Jan 2023 19:20:12 +0530 Subject: [PATCH 03/12] improve logging --- src/services/typeDetectionService.ts | 31 +++++++++++++++++----------- src/utils/error/index.ts | 2 +- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/services/typeDetectionService.ts b/src/services/typeDetectionService.ts index d7eaa62b9..3121d0a71 100644 --- a/src/services/typeDetectionService.ts +++ b/src/services/typeDetectionService.ts @@ -1,6 +1,9 @@ import { FILE_TYPE } from 'constants/file'; import { ElectronFile, FileTypeInfo } from 'types/upload'; -import { FILE_TYPE_LIB_MISSED_FORMATS } from 'constants/upload'; +import { + FILE_TYPE_LIB_MISSED_FORMATS, + KNOWN_NON_MEDIA_FORMATS, +} from 'constants/upload'; import { CustomError } from 'utils/error'; import { getFileExtension } from 'utils/file'; import { logError } from 'utils/sentry'; @@ -27,7 +30,7 @@ export async function getFileType( const mimTypeParts: string[] = typeResult.mime?.split('/'); if (mimTypeParts?.length !== 2) { - throw Error(CustomError.TYPE_DETECTION_FAILED); + throw Error(CustomError.INVALID_MIME_TYPE); } switch (mimTypeParts[0]) { case TYPE_IMAGE: @@ -52,9 +55,11 @@ export async function getFileType( if (formatMissedByTypeDetection) { return formatMissedByTypeDetection; } - logError(e, CustomError.TYPE_DETECTION_FAILED, { - fileFormat, - }); + if (!KNOWN_NON_MEDIA_FORMATS.includes(fileFormat)) { + logError(e, 'type detection failed', { + fileFormat, + }); + } return { fileType: FILE_TYPE.OTHERS, exactType: fileFormat, @@ -81,15 +86,17 @@ async function getFileTypeFromBuffer(buffer: Uint8Array) { try { const result = await FileType.fromBuffer(buffer); if (!result.mime) { - logError( - Error('mimetype missing from file type result'), - CustomError.TYPE_DETECTION_FAILED, - { result } - ); - throw Error(CustomError.TYPE_DETECTION_FAILED); + let logableInfo = ''; + try { + logableInfo = JSON.stringify(result); + } catch (e) { + logableInfo = 'failed to stringify result'; + } + throw Error('mimetype missing from file type result' + logableInfo); } return result; } catch (e) { - throw Error(CustomError.TYPE_DETECTION_FAILED); + logError(e, 'getFileTypeFromBuffer failed'); + throw e; } } diff --git a/src/utils/error/index.ts b/src/utils/error/index.ts index 7719d0f61..ac4c6201b 100644 --- a/src/utils/error/index.ts +++ b/src/utils/error/index.ts @@ -25,7 +25,7 @@ export enum CustomError { SUBSCRIPTION_EXPIRED = 'subscription expired', STORAGE_QUOTA_EXCEEDED = 'storage quota exceeded', SESSION_EXPIRED = 'session expired', - TYPE_DETECTION_FAILED = 'type detection failed', + INVALID_MIME_TYPE = 'invalid mime type', SIGNUP_FAILED = 'signup failed', FAV_COLLECTION_MISSING = 'favorite collection missing', INVALID_COLLECTION_OPERATION = 'invalid collection operation', From 4abf00c734376eab219e7d3e648720ae295488b4 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 31 Jan 2023 10:43:14 +0530 Subject: [PATCH 04/12] change CustomError enum to Record --- src/utils/error/index.ts | 77 ++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/src/utils/error/index.ts b/src/utils/error/index.ts index ac4c6201b..0a2047222 100644 --- a/src/utils/error/index.ts +++ b/src/utils/error/index.ts @@ -11,44 +11,45 @@ export const ServerErrorCodes = { NOT_FOUND: '404', }; -export enum CustomError { - 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', - CHUNK_LESS_THAN_EXPECTED = 'chunks less 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 = 'session expired', - INVALID_MIME_TYPE = 'invalid mime type', - SIGNUP_FAILED = 'signup failed', - FAV_COLLECTION_MISSING = 'favorite collection missing', - INVALID_COLLECTION_OPERATION = 'invalid collection operation', - WAIT_TIME_EXCEEDED = 'thumbnail generation wait time exceeded', - REQUEST_CANCELLED = 'request canceled', - REQUEST_FAILED = 'request failed', - TOKEN_EXPIRED = 'token expired', - TOKEN_MISSING = 'token missing', - TOO_MANY_REQUESTS = 'too many requests', - BAD_REQUEST = 'bad request', - SUBSCRIPTION_NEEDED = 'subscription not present', - NOT_FOUND = 'not found ', - NO_METADATA = 'no metadata', - TOO_LARGE_LIVE_PHOTO_ASSETS = 'too large live photo assets', - NOT_A_DATE = 'not a date', - FILE_ID_NOT_FOUND = 'file with id not found', - WEAK_DEVICE = 'password decryption failed on the device', - INCORRECT_PASSWORD = 'incorrect password', - UPLOAD_CANCELLED = 'upload cancelled', - REQUEST_TIMEOUT = 'request taking too long', - HIDDEN_COLLECTION_SYNC_FILE_ATTEMPTED = 'hidden collection sync file attempted', - UNKNOWN_ERROR = 'Something went wrong, please try again', -} +export const CustomError = { + 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', + CHUNK_LESS_THAN_EXPECTED: 'chunks less 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: 'session expired', + INVALID_MIME_TYPE: (type: string) => `invalid mime type -${type}`, + SIGNUP_FAILED: 'signup failed', + FAV_COLLECTION_MISSING: 'favorite collection missing', + INVALID_COLLECTION_OPERATION: 'invalid collection operation', + WAIT_TIME_EXCEEDED: 'thumbnail generation wait time exceeded', + REQUEST_CANCELLED: 'request canceled', + REQUEST_FAILED: 'request failed', + TOKEN_EXPIRED: 'token expired', + TOKEN_MISSING: 'token missing', + TOO_MANY_REQUESTS: 'too many requests', + BAD_REQUEST: 'bad request', + SUBSCRIPTION_NEEDED: 'subscription not present', + NOT_FOUND: 'not found ', + NO_METADATA: 'no metadata', + TOO_LARGE_LIVE_PHOTO_ASSETS: 'too large live photo assets', + NOT_A_DATE: 'not a date', + FILE_ID_NOT_FOUND: 'file with id not found', + WEAK_DEVICE: 'password decryption failed on the device', + INCORRECT_PASSWORD: 'incorrect password', + UPLOAD_CANCELLED: 'upload cancelled', + REQUEST_TIMEOUT: 'request taking too long', + HIDDEN_COLLECTION_SYNC_FILE_ATTEMPTED: + 'hidden collection sync file attempted', + UNKNOWN_ERROR: 'Something went wrong, please try again', +}; function parseUploadErrorCodes(error) { let parsedMessage = null; From 2219b39ed44fe0b0dccd34a18d3473f739056ce3 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 31 Jan 2023 10:43:34 +0530 Subject: [PATCH 05/12] better invalid mime type error --- src/services/typeDetectionService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/typeDetectionService.ts b/src/services/typeDetectionService.ts index 3121d0a71..89b013885 100644 --- a/src/services/typeDetectionService.ts +++ b/src/services/typeDetectionService.ts @@ -30,7 +30,7 @@ export async function getFileType( const mimTypeParts: string[] = typeResult.mime?.split('/'); if (mimTypeParts?.length !== 2) { - throw Error(CustomError.INVALID_MIME_TYPE); + throw Error(CustomError.INVALID_MIME_TYPE(typeResult.mime)); } switch (mimTypeParts[0]) { case TYPE_IMAGE: From f7b76ee7c3a43827b1bb245bacdb1cac74e69981 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 31 Jan 2023 11:20:26 +0530 Subject: [PATCH 06/12] throw invalid type error on type detection failure --- src/services/typeDetectionService.ts | 14 ++++++-------- src/utils/error/index.ts | 1 + 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/services/typeDetectionService.ts b/src/services/typeDetectionService.ts index 89b013885..7208e8cae 100644 --- a/src/services/typeDetectionService.ts +++ b/src/services/typeDetectionService.ts @@ -60,11 +60,7 @@ export async function getFileType( fileFormat, }); } - return { - fileType: FILE_TYPE.OTHERS, - exactType: fileFormat, - mimeType: receivedFile instanceof File ? receivedFile.type : null, - }; + throw Error(CustomError.INVALID_FILE_TYPE(fileFormat)); } } @@ -85,14 +81,16 @@ async function extractElectronFileType(file: ElectronFile) { async function getFileTypeFromBuffer(buffer: Uint8Array) { try { const result = await FileType.fromBuffer(buffer); - if (!result.mime) { + if (!result?.mime) { let logableInfo = ''; try { - logableInfo = JSON.stringify(result); + logableInfo = `result: ${JSON.stringify(result)}`; } catch (e) { logableInfo = 'failed to stringify result'; } - throw Error('mimetype missing from file type result' + logableInfo); + throw Error( + `mimetype missing from file type result - ${logableInfo}` + ); } return result; } catch (e) { diff --git a/src/utils/error/index.ts b/src/utils/error/index.ts index 0a2047222..ce5f9306e 100644 --- a/src/utils/error/index.ts +++ b/src/utils/error/index.ts @@ -49,6 +49,7 @@ export const CustomError = { HIDDEN_COLLECTION_SYNC_FILE_ATTEMPTED: 'hidden collection sync file attempted', UNKNOWN_ERROR: 'Something went wrong, please try again', + INVALID_FILE_TYPE: (type: string) => `invalid file type- ${type}`, }; function parseUploadErrorCodes(error) { From 564b822dbf3abdfdd3e92d6332ccc813752b5462 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 31 Jan 2023 11:21:11 +0530 Subject: [PATCH 07/12] improve local loggin --- src/utils/sentry/index.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/utils/sentry/index.ts b/src/utils/sentry/index.ts index 116d35909..a726d45c2 100644 --- a/src/utils/sentry/index.ts +++ b/src/utils/sentry/index.ts @@ -1,5 +1,4 @@ import * as Sentry from '@sentry/nextjs'; -import { isDEVSentryENV } from 'constants/sentry'; import { addLogLine } from 'utils/logging'; import { getSentryUserID } from 'utils/user'; @@ -17,12 +16,9 @@ export const logError = async ( addLogLine( `error: ${error?.name} ${error?.message} ${ error?.stack - } msg: ${msg} info: ${JSON.stringify(info)}` + } msg: ${msg} ${info ? `info: ${JSON.stringify(info)}` : ''}` ); } - if (isDEVSentryENV()) { - console.log(error, { msg, info }); - } Sentry.captureException(err, { level: Sentry.Severity.Info, user: { id: await getSentryUserID() }, From 62a6b5963b494ecc8fb3477979abc9116fb345da Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 31 Jan 2023 11:23:04 +0530 Subject: [PATCH 08/12] revert INVALID_FILE_TYPE error change --- src/services/typeDetectionService.ts | 6 +++++- src/utils/error/index.ts | 1 - 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/services/typeDetectionService.ts b/src/services/typeDetectionService.ts index 7208e8cae..184574dd8 100644 --- a/src/services/typeDetectionService.ts +++ b/src/services/typeDetectionService.ts @@ -60,7 +60,11 @@ export async function getFileType( fileFormat, }); } - throw Error(CustomError.INVALID_FILE_TYPE(fileFormat)); + return { + fileType: FILE_TYPE.OTHERS, + exactType: fileFormat, + mimeType: receivedFile instanceof File ? receivedFile.type : null, + }; } } diff --git a/src/utils/error/index.ts b/src/utils/error/index.ts index ce5f9306e..0a2047222 100644 --- a/src/utils/error/index.ts +++ b/src/utils/error/index.ts @@ -49,7 +49,6 @@ export const CustomError = { HIDDEN_COLLECTION_SYNC_FILE_ATTEMPTED: 'hidden collection sync file attempted', UNKNOWN_ERROR: 'Something went wrong, please try again', - INVALID_FILE_TYPE: (type: string) => `invalid file type- ${type}`, }; function parseUploadErrorCodes(error) { From 6e5aebffc8e4b5c86f0b4f310a8470d7ac4f9a3b Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 31 Jan 2023 11:42:45 +0530 Subject: [PATCH 09/12] throw UNSUPPORTED_FILE_FORMAT for known non media formats and TYPE_DETECTION_FAILED for errors --- src/services/typeDetectionService.ts | 45 ++++++++++++---------------- src/services/upload/uploader.ts | 12 ++++---- src/utils/error/index.ts | 4 ++- 3 files changed, 29 insertions(+), 32 deletions(-) diff --git a/src/services/typeDetectionService.ts b/src/services/typeDetectionService.ts index 184574dd8..e45dfc975 100644 --- a/src/services/typeDetectionService.ts +++ b/src/services/typeDetectionService.ts @@ -40,7 +40,7 @@ export async function getFileType( fileType = FILE_TYPE.VIDEO; break; default: - fileType = FILE_TYPE.OTHERS; + throw Error(CustomError.UNSUPPORTED_FILE_FORMAT); } return { fileType, @@ -48,6 +48,9 @@ export async function getFileType( mimeType: typeResult.mime, }; } catch (e) { + if (e.message === CustomError.UNSUPPORTED_FILE_FORMAT) { + throw e; + } const fileFormat = getFileExtension(receivedFile.name); const formatMissedByTypeDetection = FILE_TYPE_LIB_MISSED_FORMATS.find( (a) => a.exactType === fileFormat @@ -55,16 +58,13 @@ export async function getFileType( if (formatMissedByTypeDetection) { return formatMissedByTypeDetection; } - if (!KNOWN_NON_MEDIA_FORMATS.includes(fileFormat)) { - logError(e, 'type detection failed', { - fileFormat, - }); + if (KNOWN_NON_MEDIA_FORMATS.includes(fileFormat)) { + throw Error(CustomError.UNSUPPORTED_FILE_FORMAT); } - return { - fileType: FILE_TYPE.OTHERS, - exactType: fileFormat, - mimeType: receivedFile instanceof File ? receivedFile.type : null, - }; + logError(e, 'type detection failed', { + fileFormat, + }); + throw Error(CustomError.TYPE_DETECTION_FAILED(fileFormat)); } } @@ -83,22 +83,15 @@ async function extractElectronFileType(file: ElectronFile) { } async function getFileTypeFromBuffer(buffer: Uint8Array) { - try { - const result = await FileType.fromBuffer(buffer); - if (!result?.mime) { - let logableInfo = ''; - try { - logableInfo = `result: ${JSON.stringify(result)}`; - } catch (e) { - logableInfo = 'failed to stringify result'; - } - throw Error( - `mimetype missing from file type result - ${logableInfo}` - ); + const result = await FileType.fromBuffer(buffer); + if (!result?.mime) { + let logableInfo = ''; + try { + logableInfo = `result: ${JSON.stringify(result)}`; + } catch (e) { + logableInfo = 'failed to stringify result'; } - return result; - } catch (e) { - logError(e, 'getFileTypeFromBuffer failed'); - throw e; + throw Error(`mimetype missing from file type result - ${logableInfo}`); } + return result; } diff --git a/src/services/upload/uploader.ts b/src/services/upload/uploader.ts index f2d2cdab0..34b08e376 100644 --- a/src/services/upload/uploader.ts +++ b/src/services/upload/uploader.ts @@ -51,10 +51,9 @@ export default async function uploader( } addLogLine(`getting filetype for ${fileNameSize}`); fileTypeInfo = await UploadService.getAssetFileType(uploadAsset); - addLogLine(`got filetype for ${fileNameSize}`); - if (fileTypeInfo.fileType === FILE_TYPE.OTHERS) { - throw Error(CustomError.UNSUPPORTED_FILE_FORMAT); - } + addLogLine( + `got filetype for ${fileNameSize} - ${JSON.stringify(fileTypeInfo)}` + ); if (skipVideos && fileTypeInfo.fileType === FILE_TYPE.VIDEO) { addLogLine( `skipped video upload for public upload ${fileNameSize}` @@ -176,7 +175,10 @@ export default async function uploader( }; } catch (e) { addLogLine(`upload failed for ${fileNameSize} ,error: ${e.message}`); - if (e.message !== CustomError.UPLOAD_CANCELLED) { + if ( + e.message !== CustomError.UPLOAD_CANCELLED && + e.message !== CustomError.UNSUPPORTED_FILE_FORMAT + ) { logError(e, 'file upload failed', { fileFormat: fileTypeInfo?.exactType, }); diff --git a/src/utils/error/index.ts b/src/utils/error/index.ts index 0a2047222..57f1e8e56 100644 --- a/src/utils/error/index.ts +++ b/src/utils/error/index.ts @@ -20,7 +20,7 @@ export const CustomError = { FAILED_TO_LOAD_WEB_WORKER: 'failed to load web worker', CHUNK_MORE_THAN_EXPECTED: 'chunks more than expected', CHUNK_LESS_THAN_EXPECTED: 'chunks less than expected', - UNSUPPORTED_FILE_FORMAT: 'unsupported file formats', + UNSUPPORTED_FILE_FORMAT: 'unsupported file format', FILE_TOO_LARGE: 'file too large', SUBSCRIPTION_EXPIRED: 'subscription expired', STORAGE_QUOTA_EXCEEDED: 'storage quota exceeded', @@ -49,6 +49,8 @@ export const CustomError = { HIDDEN_COLLECTION_SYNC_FILE_ATTEMPTED: 'hidden collection sync file attempted', UNKNOWN_ERROR: 'Something went wrong, please try again', + TYPE_DETECTION_FAILED: (fileFormat: string) => + `type detection failed ${fileFormat}`, }; function parseUploadErrorCodes(error) { From 306a9e5c6a86de15659cf9102dcf8a293d5bc796 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Tue, 31 Jan 2023 12:01:58 +0530 Subject: [PATCH 10/12] fix build --- src/components/Upload/Uploader.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Upload/Uploader.tsx b/src/components/Upload/Uploader.tsx index 179543b29..bbae4b94a 100644 --- a/src/components/Upload/Uploader.tsx +++ b/src/components/Upload/Uploader.tsx @@ -533,7 +533,7 @@ export default function Uploader(props: Props) { } }; - function showUserFacingError(err: CustomError) { + function showUserFacingError(err: string) { let notification: NotificationAttributes; switch (err) { case CustomError.SESSION_EXPIRED: From 0241565b99ceb67dc1a290950033123193dd88d5 Mon Sep 17 00:00:00 2001 From: Abhinav Date: Wed, 1 Feb 2023 11:07:04 +0530 Subject: [PATCH 11/12] fix cleanup to call removeEventListener instead of addEventListener --- src/components/PhotoFrame.tsx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/components/PhotoFrame.tsx b/src/components/PhotoFrame.tsx index 3f243ce20..31bce739c 100644 --- a/src/components/PhotoFrame.tsx +++ b/src/components/PhotoFrame.tsx @@ -273,6 +273,14 @@ const PhotoFrame = ({ }; document.addEventListener('keydown', handleKeyDown, false); document.addEventListener('keyup', handleKeyUp, false); + + return () => { + document.removeEventListener('keydown', handleKeyDown, false); + document.removeEventListener('keyup', handleKeyUp, false); + }; + }, []); + + useEffect(() => { router.events.on('hashChangeComplete', (url: string) => { const start = url.indexOf('#'); const hash = url.slice(start !== -1 ? start : url.length); @@ -285,11 +293,7 @@ const PhotoFrame = ({ setOpen(false); } }); - return () => { - document.addEventListener('keydown', handleKeyDown, false); - document.addEventListener('keyup', handleKeyUp, false); - }; - }, []); + }, [router.events]); useEffect(() => { if (!isNaN(search?.file)) { From e91eb479ef004d88cfcd9aa0e51583903109fc1f Mon Sep 17 00:00:00 2001 From: Abhinav Date: Thu, 2 Feb 2023 15:05:59 +0530 Subject: [PATCH 12/12] refactor code --- src/components/PhotoFrame.tsx | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/components/PhotoFrame.tsx b/src/components/PhotoFrame.tsx index 31bce739c..2c108d3f1 100644 --- a/src/components/PhotoFrame.tsx +++ b/src/components/PhotoFrame.tsx @@ -274,13 +274,6 @@ const PhotoFrame = ({ document.addEventListener('keydown', handleKeyDown, false); document.addEventListener('keyup', handleKeyUp, false); - return () => { - document.removeEventListener('keydown', handleKeyDown, false); - document.removeEventListener('keyup', handleKeyUp, false); - }; - }, []); - - useEffect(() => { router.events.on('hashChangeComplete', (url: string) => { const start = url.indexOf('#'); const hash = url.slice(start !== -1 ? start : url.length); @@ -293,7 +286,12 @@ const PhotoFrame = ({ setOpen(false); } }); - }, [router.events]); + + return () => { + document.removeEventListener('keydown', handleKeyDown, false); + document.removeEventListener('keyup', handleKeyUp, false); + }; + }, []); useEffect(() => { if (!isNaN(search?.file)) {