error-boundary.js 936 B

1234567891011121314151617181920212223242526272829303132333435
  1. import React from 'react'
  2. import { ErrorBoundary } from 'react-error-boundary'
  3. function errorHandler(error, componentStack) {
  4. if (window.Raven) {
  5. Raven.captureException(error, {
  6. extra: { componentStack },
  7. tags: { mechanism: 'react-error-boundary' }
  8. })
  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