Skip to content

Commit 55af6d0

Browse files
committed
fix: improve error handling in EditSong context
- Refactored error handling in the EditSongContext to utilize AxiosError for more precise error management. - Updated the song loading logic to remove type casting and enhance clarity. - Improved user feedback by providing specific error messages for network issues and server responses.
1 parent 173b870 commit 55af6d0

File tree

1 file changed

+28
-26
lines changed

1 file changed

+28
-26
lines changed

apps/frontend/src/modules/song-edit/components/client/context/EditSong.context.tsx

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ import {
2020
EditSongForm,
2121
editSongFormSchema,
2222
} from '@web/modules/song/components/client/SongForm.zod';
23-
24-
// TODO: THIS FORM IS CURRENTLY BROKEN, WE NEED TO FIX IT
23+
import { AxiosError } from 'axios';
2524

2625
export type useEditSongProviderType = {
2726
formMethods: UseFormReturn<EditSongForm>;
@@ -38,7 +37,7 @@ export type useEditSongProviderType = {
3837
};
3938

4039
export const EditSongContext = createContext<useEditSongProviderType>(
41-
null as unknown as useEditSongProviderType,
40+
{} as useEditSongProviderType,
4241
);
4342

4443
export const EditSongProvider = ({
@@ -258,32 +257,35 @@ export const EditSongProvider = ({
258257
setInstrumentSounds(songInstruments);
259258
formMethods.setValue('customInstruments', songInstruments);
260259

261-
setSong(song as unknown as SongFileType); // TODO: Investigate this weird type error
262-
} catch (error: any) {
263-
console.error('Error loading song', error);
264-
260+
setSong(song);
261+
} catch (error: unknown) {
265262
let errorMessage = 'An unknown error occurred while loading the song!';
266-
267-
if (error.response) {
268-
// Server responded with an error status
269-
errorMessage =
270-
error.response.data?.message ||
271-
(error.response.data?.error
272-
? Object.values(error.response.data.error)[0]
273-
: null) ||
274-
`Failed to load song: ${error.response.status}`;
275-
} else if (error.request) {
276-
// Request was made but no response received (network error)
277-
errorMessage =
278-
'Network error: Unable to connect to the server. Please check your internet connection and try again.';
263+
if (error instanceof AxiosError) {
264+
if (error.response) {
265+
// Server responded with an error status
266+
errorMessage =
267+
error.response.data?.message ||
268+
(error.response.data?.error
269+
? Object.values(error.response.data.error)[0]
270+
: null) ||
271+
`Failed to load song: ${error.response.status}`;
272+
} else if (error.request) {
273+
// Request was made but no response received (network error)
274+
errorMessage =
275+
'Network error: Unable to connect to the server. Please check your internet connection and try again.';
276+
} else {
277+
// Something else happened (including fetch errors)
278+
errorMessage = error.message || errorMessage;
279+
}
280+
281+
setSendError(errorMessage);
282+
toaster.error(errorMessage);
283+
throw error; // Re-throw to allow caller to handle if needed
279284
} else {
280-
// Something else happened (including fetch errors)
281-
errorMessage = error.message || errorMessage;
285+
setSendError(errorMessage);
286+
toaster.error(errorMessage);
287+
throw error;
282288
}
283-
284-
setSendError(errorMessage);
285-
toaster.error(errorMessage);
286-
throw error; // Re-throw to allow caller to handle if needed
287289
}
288290
},
289291
[formMethods, setSong],

0 commit comments

Comments
 (0)