overleaf/services/web/frontend/js/infrastructure/error-boundary.js
Jakob Ackermann fae53738f5 Merge pull request #3423 from overleaf/as-ta-sentry-fixes
Improve loading of Sentry reporter in frontend

GitOrigin-RevId: fc05aa48ad0e816b4ef0f5dafb6cf00525a28223
2020-12-04 03:05:43 +00:00

35 lines
1,000 B
JavaScript

import React from 'react'
import { captureException } from './error-reporter'
import { ErrorBoundary } from 'react-error-boundary'
function errorHandler(error, componentStack) {
captureException(error, scope => {
scope.setExtra('componentStack', componentStack)
scope.setTag('handler', 'react-error-boundary')
return scope
})
}
function DefaultFallbackComponent() {
return <></>
}
function withErrorBoundary(WrappedComponent, FallbackComponent) {
function ErrorBoundaryWrapper(props) {
return (
<ErrorBoundary
FallbackComponent={FallbackComponent || DefaultFallbackComponent}
onError={errorHandler}
>
<WrappedComponent {...props} />
</ErrorBoundary>
)
}
ErrorBoundaryWrapper.propTypes = WrappedComponent.propTypes
ErrorBoundaryWrapper.displayName = `WithErrorBoundaryWrapper${WrappedComponent.displayName ||
WrappedComponent.name ||
'Component'}`
return ErrorBoundaryWrapper
}
export default withErrorBoundary