Selaa lähdekoodia

Final touches for global error boundary

jnfrati 4 vuotta sitten
vanhempi
sitoutus
f36f31a7d2

+ 1 - 1
dashboard/src/App.tsx

@@ -10,7 +10,7 @@ export default class App extends Component {
     return (
       <StyledMain>
         <GlobalStyle />
-        <PorterErrorBoundary>
+        <PorterErrorBoundary errorBoundaryLocation="globalErrorBoundary">
           <BrowserRouter>
             <MainWrapper />
           </BrowserRouter>

+ 1 - 64
dashboard/src/index.html

@@ -3,69 +3,6 @@
   <head>
     <title>Porter | Dashboard</title>
 
-    <!-- <script>
-      !(function () {
-        var analytics = (window.analytics = window.analytics || []);
-        if (!analytics.initialize)
-          if (analytics.invoked)
-            window.console &&
-              console.error &&
-              console.error("Segment snippet included twice.");
-          else {
-            analytics.invoked = !0;
-            analytics.methods = [
-              "trackSubmit",
-              "trackClick",
-              "trackLink",
-              "trackForm",
-              "pageview",
-              "identify",
-              "reset",
-              "group",
-              "track",
-              "ready",
-              "alias",
-              "debug",
-              "page",
-              "once",
-              "off",
-              "on",
-              "addSourceMiddleware",
-              "addIntegrationMiddleware",
-              "setAnonymousId",
-              "addDestinationMiddleware",
-            ];
-            analytics.factory = function (e) {
-              return function () {
-                var t = Array.prototype.slice.call(arguments);
-                t.unshift(e);
-                analytics.push(t);
-                return analytics;
-              };
-            };
-            for (var e = 0; e < analytics.methods.length; e++) {
-              var key = analytics.methods[e];
-              analytics[key] = analytics.factory(key);
-            }
-            analytics.load = function (key, e) {
-              var t = document.createElement("script");
-              t.type = "text/javascript";
-              t.async = !0;
-              t.src =
-                "https://cdn.segment.com/analytics.js/v1/" +
-                key +
-                "/analytics.min.js";
-              var n = document.getElementsByTagName("script")[0];
-              n.parentNode.insertBefore(t, n);
-              analytics._loadOptions = e;
-            };
-            analytics._writeKey = "J6sN7XaMPOGIkA1ZGYMBU4UX37aPZ1Yb";
-            analytics.SNIPPET_VERSION = "4.13.2";
-            analytics.load("<%= htmlWebpackPlugin.options.segmentKey %>");
-            analytics.page();
-          }
-      })();
-    </script> -->
     <script>
       !(function () {
         var analytics = (window.analytics = window.analytics || []);
@@ -124,7 +61,7 @@
             };
             analytics._writeKey = "J6sN7XaMPOGIkA1ZGYMBU4UX37aPZ1Yb";
             analytics.SNIPPET_VERSION = "4.13.2";
-            analytics.load("J6sN7XaMPOGIkA1ZGYMBU4UX37aPZ1Yb");
+            analytics.load("<%= htmlWebpackPlugin.options.segmentKey %>");
             analytics.page();
           }
       })();

+ 0 - 5
dashboard/src/main/home/cluster-dashboard/expanded-chart/ListSection.tsx

@@ -22,10 +22,6 @@ type StateType = {
   selectedResource: { kind: string; name: string } | null;
 };
 
-const ErrorComponent = () => {
-  throw new Error("Something went wrong");
-};
-
 export default class ListSection extends Component<PropsType, StateType> {
   state = {
     showKindLabels: true,
@@ -114,7 +110,6 @@ export default class ListSection extends Component<PropsType, StateType> {
             />
           </YamlWrapper>
         </FlexWrapper>
-        <ErrorComponent />
       </StyledListSection>
     );
   }

+ 18 - 5
dashboard/src/shared/PorterErrorBoundary.tsx

@@ -2,21 +2,34 @@ import UnexpectedErrorPage from "components/UnexpectedErrorPage";
 import React from "react";
 import { ErrorBoundary } from "react-error-boundary";
 
-const PorterErrorBoundary: React.FC = ({ children }) => {
+export type PorterErrorBoundaryProps<OnResetProps = {}> = {
+  errorBoundaryLocation: string;
+  onReset?: (props: OnResetProps) => unknown;
+};
+
+const PorterErrorBoundary: React.FC<PorterErrorBoundaryProps> = ({
+  errorBoundaryLocation,
+  onReset,
+  children,
+}) => {
   const handleError = (error: Error, info: { componentStack: string }) => {
-    window?.analytics?.track("React error", {
-      location: "global-error-boundary",
+    window?.analytics?.track("React Error", {
+      location: errorBoundaryLocation,
       error: error.message,
       componentStack: info?.componentStack,
       url: window.location.toString(),
     });
-    window.location.reload();
+  };
+
+  const handleOnReset = (props: unknown) => {
+    typeof onReset === "function" ? onReset(props) : window.location.reload();
   };
 
   return (
     <ErrorBoundary
+      onError={handleError}
       FallbackComponent={UnexpectedErrorPage}
-      onReset={handleError}
+      onReset={handleOnReset}
     >
       {children}
     </ErrorBoundary>