Files
twenty/front/src/modules/error-handler/components/PromiseRejectionEffect.tsx
T
74b077f3ca Feat/error boundaries (#2779)
* - Changed to objectNameSingular always defined
- Added ErrorCatchAll

* - Added mock mode for companies logged out
- Added a proper ErrorBoundary component

* Removed react-error-boundary

* Implemented proper ErrorBoundary

* Fixes

* Change strategy about mocks

---------

Co-authored-by: Charles Bochet <[email protected]>
2023-12-01 22:06:38 +01:00

40 lines
1.1 KiB
TypeScript

import React, { useCallback, useEffect } from 'react';
import { ObjectMetadataItemNotFoundError } from '@/object-metadata/errors/ObjectMetadataNotFoundError';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
export const PromiseRejectionEffect = () => {
const { enqueueSnackBar } = useSnackBar();
const handlePromiseRejection = useCallback(
(event: PromiseRejectionEvent) => {
const error = event.reason;
// TODO: connect Sentry here
if (error instanceof ObjectMetadataItemNotFoundError) {
enqueueSnackBar(
`Error with custom object that cannot be found : ${event.reason}`,
{
variant: 'error',
},
);
} else {
enqueueSnackBar(`Error: ${event.reason}`, {
variant: 'error',
});
}
},
[enqueueSnackBar],
);
useEffect(() => {
window.addEventListener('unhandledrejection', handlePromiseRejection);
return () => {
window.removeEventListener('unhandledrejection', handlePromiseRejection);
};
}, [handlePromiseRejection]);
return <></>;
};