54 lines
1.3 KiB
TypeScript
54 lines
1.3 KiB
TypeScript
import { AxiosError } from 'axios';
|
|
import { AppError } from '../types/errors';
|
|
import { showToast } from './toast';
|
|
|
|
export function handleApiError(error: unknown): never {
|
|
if (error instanceof AppError) {
|
|
throw error;
|
|
}
|
|
|
|
if (error instanceof AxiosError) {
|
|
const status = error.response?.status;
|
|
const message = error.response?.data?.message || error.message;
|
|
const code = error.response?.data?.code;
|
|
|
|
throw new AppError(message, status, code);
|
|
}
|
|
|
|
if (error instanceof Error) {
|
|
throw new AppError(error.message);
|
|
}
|
|
|
|
throw new AppError('Unknown error occurred');
|
|
}
|
|
|
|
export function showErrorToast(error: unknown): void {
|
|
let message = 'An unexpected error occurred';
|
|
|
|
if (error instanceof AppError) {
|
|
message = error.message;
|
|
} else if (error instanceof AxiosError) {
|
|
message = error.response?.data?.message || error.message;
|
|
} else if (error instanceof Error) {
|
|
message = error.message;
|
|
}
|
|
|
|
showToast.error(message);
|
|
}
|
|
|
|
export function getErrorMessage(error: unknown): string {
|
|
if (error instanceof AppError) {
|
|
return error.message;
|
|
}
|
|
|
|
if (error instanceof AxiosError) {
|
|
return error.response?.data?.message || error.message;
|
|
}
|
|
|
|
if (error instanceof Error) {
|
|
return error.message;
|
|
}
|
|
|
|
return 'An unexpected error occurred';
|
|
}
|