update models loading in /editor

This commit is contained in:
math-pixel
2026-04-27 16:27:56 +02:00
parent 868f7a1cfd
commit 21d91f1de1
+39 -4
View File
@@ -1,4 +1,12 @@
import { useMemo, useRef, useEffect, useState } from "react"; import {
useMemo,
useRef,
useEffect,
useState,
Suspense,
Component,
type ReactNode,
} from "react";
import { useGLTF } from "@react-three/drei"; import { useGLTF } from "@react-three/drei";
import { Grid, TransformControls } from "@react-three/drei"; import { Grid, TransformControls } from "@react-three/drei";
import * as THREE from "three"; import * as THREE from "three";
@@ -19,6 +27,31 @@ interface MapViewerProps {
const clonedScenesCache = new Map<string, THREE.Group>(); const clonedScenesCache = new Map<string, THREE.Group>();
class ErrorBoundary extends Component<
{ children: ReactNode; fallback?: ReactNode },
{ hasError: boolean }
> {
constructor(props: { children: ReactNode; fallback?: ReactNode }) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(): { hasError: boolean } {
return { hasError: true };
}
componentDidCatch(error: Error, _errorInfo: React.ErrorInfo): void {
console.warn("Model loading error:", error.message);
}
render() {
if (this.state.hasError) {
return this.props.fallback || null;
}
return this.props.children;
}
}
export default function MapViewer({ export default function MapViewer({
sceneData, sceneData,
selectedNodeIndex, selectedNodeIndex,
@@ -29,7 +62,7 @@ export default function MapViewer({
onTransformStart, onTransformStart,
onTransformEnd, onTransformEnd,
onNodeTransform, onNodeTransform,
}: MapViewerProps) { }: MapViewerProps): React.JSX.Element {
const isTransforming = useRef(false); const isTransforming = useRef(false);
const objectsMapRef = useRef<Map<number, THREE.Object3D>>(new Map()); const objectsMapRef = useRef<Map<number, THREE.Object3D>>(new Map());
@@ -52,7 +85,6 @@ export default function MapViewer({
rotation: [obj.rotation.x, obj.rotation.y, obj.rotation.z], rotation: [obj.rotation.x, obj.rotation.y, obj.rotation.z],
scale: [obj.scale.x, obj.scale.y, obj.scale.z], scale: [obj.scale.x, obj.scale.y, obj.scale.z],
}; };
// Call onNodeTransform BEFORE onTransformEnd so history captures final state
onNodeTransform?.(selectedNodeIndex, updatedNode); onNodeTransform?.(selectedNodeIndex, updatedNode);
} }
} }
@@ -101,8 +133,9 @@ export default function MapViewer({
if (modelUrl) { if (modelUrl) {
return ( return (
<ErrorBoundary key={index} fallback={null}>
<Suspense fallback={null}>
<ModelNodeWithRef <ModelNodeWithRef
key={index}
index={index} index={index}
node={node} node={node}
modelUrl={modelUrl} modelUrl={modelUrl}
@@ -112,6 +145,8 @@ export default function MapViewer({
onSelectNode={onSelectNode} onSelectNode={onSelectNode}
onHoverNode={onHoverNode} onHoverNode={onHoverNode}
/> />
</Suspense>
</ErrorBoundary>
); );
} else { } else {
return ( return (