Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / packages / components / hooks / useErrorHandler.ts
blob937ed6baa43634c07a727670decde188753f766c
1 import { useCallback } from 'react';
3 import { c } from 'ttag';
5 import { getApiErrorMessage } from '@proton/shared/lib/api/helpers/apiErrorHelper';
6 import { traceError } from '@proton/shared/lib/helpers/sentry';
8 import useNotifications from './useNotifications';
10 const ignoreErrors = ['InactiveSession', 'AppVersionBadError', 'AbortError'];
12 const useErrorHandler = () => {
13     const { createNotification } = useNotifications();
15     return useCallback((error: any, { notify = true, trace = true }: { notify?: boolean; trace?: boolean } = {}) => {
16         if (!error) {
17             return;
18         }
20         const apiErrorMessage = getApiErrorMessage(error);
21         const errorMessage = error.message || c('Error').t`Unknown error`;
23         // Bad app version and unreachable errors are handled in a top banner
24         const shouldNotify = notify && !error.cancel && !ignoreErrors.includes(error.name);
25         if (shouldNotify) {
26             createNotification({ type: 'error', text: apiErrorMessage || errorMessage });
27         }
29         const shouldTrace = trace && error.trace !== false && !apiErrorMessage;
30         if (shouldTrace) {
31             traceError(error);
32         }
33     }, []);
36 export default useErrorHandler;