import { ErrorData } from '@/utils/error-report/ErrorData'; import { SerializedError } from '@reduxjs/toolkit'; // eslint-disable-next-line import/no-cycle import { store } from '@/redux/store'; import { ONE_THOUSAND } from '@/constants/common'; export const createErrorData = (error: Error | SerializedError | undefined): ErrorData => { let stacktrace = ''; if (error !== undefined) { stacktrace = error.stack !== undefined ? error.stack : ''; } let { login } = store.getState().user; if (!login) { login = 'anonymous'; } const { userData } = store.getState().user; let email = null; if (userData) { email = userData.email; } const configuration = store.getState().configuration.main.data; const version = configuration ? configuration.version : null; return { url: window.location.href, login, browser: navigator.userAgent, comment: null, email, javaStacktrace: null, // TODO stacktrace, timestamp: Math.floor(+new Date() / ONE_THOUSAND), version, }; }; export const handleError = (error: Error | SerializedError | undefined): void => { const errorData = createErrorData(error); // eslint-disable-next-line no-console console.log(errorData); }; export const initializeErrorReporting = (): void => { if (typeof window !== 'undefined') { window.onerror = (msg, url, lineNo, columnNo, error): boolean => { handleError(error); return true; }; } };