diff --git a/src/layouts/shared/NetworkErrorBoundary/NetworkErrorBoundary.jsx b/src/layouts/shared/NetworkErrorBoundary/NetworkErrorBoundary.jsx
index 64969e3fa7..637f0f45f8 100644
--- a/src/layouts/shared/NetworkErrorBoundary/NetworkErrorBoundary.jsx
+++ b/src/layouts/shared/NetworkErrorBoundary/NetworkErrorBoundary.jsx
@@ -1,14 +1,11 @@
+import { useState, useEffect } from 'react'
import { useQueryClient } from '@tanstack/react-query'
+import { useHistory } from 'react-router-dom'
import cs from 'classnames'
import PropTypes from 'prop-types'
-import { Component, useEffect } from 'react'
-import { useHistory } from 'react-router-dom'
-
import config from 'config'
-
import A from 'ui/A'
import Button from 'ui/Button'
-
import openUmbrella from './assets/error-open-umbrella.svg'
import upsideDownUmbrella from './assets/error-upsidedown-umbrella.svg'
import styles from './NetworkErrorBoundary.module.css'
@@ -16,6 +13,11 @@ import {
sendGraphQLErrorMetrics,
sendNetworkErrorMetrics,
} from './networkErrorMetrics'
+import { useUserAccessGate } from 'layouts/BaseLayout/hooks/useUserAccessGate'
+// import { useImpersonate } from '
+
+import GlobalBanners from 'shared/GlobalBanners'
+import GlobalTopBanners from 'shared/GlobalTopBanners'
const errorToUI = {
401: {
@@ -159,93 +161,110 @@ ResetHandler.propTypes = {
logoutUser: PropTypes.bool,
}
-class NetworkErrorBoundary extends Component {
- constructor(props) {
- super(props)
+const NetworkErrorBoundary = ({ children }) => {
+ const [hasNetworkError, setHasNetworkError] = useState(false)
+ const [hasGraphqlError, setHasGraphqlError] = useState(false)
+ const [error, setError] = useState(null)
- this.state = {
- hasNetworkError: false,
- hasGraphqlError: false,
- error: null,
- }
- }
-
- static getDerivedStateFromError(error) {
- // if the error is not a network error, we don't do anything and
- // another error boundary will take it from there
- if (Object.keys(errorToUI).includes(String(error.status))) {
- sendNetworkErrorMetrics(error.status)
- return { hasNetworkError: true, error }
- }
+ const { isFullExperience, showDefaultOrgSelector } = useUserAccessGate()
+ // const { isImpersonating } = useImpersonate()
+ const isImpersonating = true
- if (Object.keys(graphQLErrorToUI).includes(error.__typename)) {
- sendGraphQLErrorMetrics(error.__typename)
- return { hasGraphqlError: true, error }
- }
-
- return {}
+ const resetErrorBoundary = () => {
+ setHasNetworkError(false)
+ setHasGraphqlError(false)
+ setError(null)
}
- resetErrorBoundary = () => {
- this.reset()
- }
+ useEffect(() => {
+ // const errorHandler = (error) => {
+ // if (Object.keys(errorToUI).includes(String(error.status))) {
+ // sendNetworkErrorMetrics(error.status)
+ // setHasNetworkError(true)
+ // setError(error)
+ // } else if (Object.keys(graphQLErrorToUI).includes(error.__typename)) {
+ // sendGraphQLErrorMetrics(error.__typename)
+ // setHasGraphqlError(true)
+ // setError(error)
+ // }
+ // }
- reset() {
- this.setState({
- hasNetworkError: false,
- hasGraphqlError: false,
- error: null,
- })
- }
+ // Add your error handling logic here to trigger errorHandler
+ }, [])
- renderGraphQLError() {
- const { error } = this.state
+ const renderGraphQLError = () => {
const { illustration, title } = graphQLErrorToUI[error.__typename]
return (
-
-
- {title}
-
-
-
+ <>
+ {isFullExperience || isImpersonating ? (
+ <>
+
+
+ >
+ ) : (
+
+ {showDefaultOrgSelector && }
+
+ )}
+
+
+ {title}
+
+
+
+ >
)
}
- renderError() {
- const { status, data } = this.state.error
+ const renderError = () => {
+ const { status, data } = error
const { illustration, title, description, showDocs } = errorToUI[status]
return (
-
-
- {title}
- {description ? {description(data)}
: null}
- {showDocs ? : null}
-
- Error {status}
-
-
-
+ <>
+ {isFullExperience || isImpersonating ? (
+ <>
+
+
+ >
+ ) : (
+
+ {showDefaultOrgSelector && }
+
+ )}
+
+
+ {title}
+ {description ? {description(data)}
: null}
+ {showDocs ? : null}
+
+ Error {status}
+
+
+
+ >
)
}
- render() {
- if (this.state.hasNetworkError) return this.renderError()
- if (this.state.hasGraphqlError) return this.renderGraphQLError()
- return <>{this.props.children}>
- }
+ if (hasNetworkError) return renderError()
+ if (hasGraphqlError) return renderGraphQLError()
+ return <>{children}>
+}
+
+NetworkErrorBoundary.propTypes = {
+ children: PropTypes.node,
}
export default NetworkErrorBoundary