error-boundary.js 1000 B

1234567891011121314151617181920212223242526272829303132333435
  1. import React from 'react'
  2. import { captureException } from './error-reporter'
  3. import { ErrorBoundary } from 'react-error-boundary'
  4. function errorHandler(error, componentStack) {
  5. captureException(error, scope => {
  6. scope.setExtra('componentStack', componentStack)
  7. scope.setTag('handler', 'react-error-boundary')
  8. return scope
  9. })
  10. }
  11. function DefaultFallbackComponent() {
  12. return <></>
  13. }
  14. function withErrorBoundary(WrappedComponent, FallbackComponent) {
  15. function ErrorBoundaryWrapper(props) {
  16. return (
  17. <ErrorBoundary
  18. FallbackComponent={FallbackComponent || DefaultFallbackComponent}
  19. onError={errorHandler}
  20. >
  21. <WrappedComponent {...props} />
  22. </ErrorBoundary>
  23. )
  24. }
  25. ErrorBoundaryWrapper.propTypes = WrappedComponent.propTypes
  26. ErrorBoundaryWrapper.displayName = `WithErrorBoundaryWrapper${WrappedComponent.displayName ||
  27. WrappedComponent.name ||
  28. 'Component'}`
  29. return ErrorBoundaryWrapper
  30. }
  31. export default withErrorBoundary