From cc2750bc767f125c5c9836610840cfdb62b07ad1 Mon Sep 17 00:00:00 2001 From: Sebastian Hartte Date: Tue, 12 Mar 2024 20:03:49 +0100 Subject: [PATCH] Improve error display for 3d scenes --- .../model-viewer/ModelViewerInternal.tsx | 93 ++++++++++--------- src/components/model-viewer/formatError.ts | 7 ++ 2 files changed, 57 insertions(+), 43 deletions(-) create mode 100644 src/components/model-viewer/formatError.ts diff --git a/src/components/model-viewer/ModelViewerInternal.tsx b/src/components/model-viewer/ModelViewerInternal.tsx index 023ebf3..cedf0ea 100644 --- a/src/components/model-viewer/ModelViewerInternal.tsx +++ b/src/components/model-viewer/ModelViewerInternal.tsx @@ -35,6 +35,7 @@ import plusIcon from "@assets/button_plus.png"; import minusIcon from "@assets/button_minus.png"; import resetIcon from "@assets/button_reset.png"; import Image from "next/image"; +import { formatError } from "./formatError.ts"; const DEBUG = false; @@ -377,7 +378,7 @@ function ModelViewerInternal({ inWorldAnnotations, overlayAnnotations, }: ModelViewerProps) { - const [error, setError] = useState(); + const [error, setError] = useState(); const [initialized, setInitialized] = useState(false); const [tooltipObject, setTooltipObject] = useState(); const mousePos = useRef(null); @@ -481,50 +482,56 @@ function ModelViewerInternal({ } return ( -
- {error && {String(error)}} - + {error ? ( +
+ Failed to load 3D scene: {formatError(error)} +
+ ) : null} +
-
- {!initialized && } - -
-
- - {interactive && ( -
- - - - - - - - - -
- )} -
+
+ {!initialized && } + +
+
+
+ {interactive && ( +
+ + + + + + + + + +
+ )} +
+ ); } diff --git a/src/components/model-viewer/formatError.ts b/src/components/model-viewer/formatError.ts new file mode 100644 index 0000000..8811a24 --- /dev/null +++ b/src/components/model-viewer/formatError.ts @@ -0,0 +1,7 @@ +export function formatError(error: unknown): string { + if (error instanceof Response) { + return "HTTP Error " + error.status; + } + + return "An unknown error occurred"; +}