3d-viewer/app/components/Map.tsx

41 lines
914 B
TypeScript

"use client";
import { useContext, useEffect, useRef } from "react";
import { MapScene } from "../three/MapScene";
import {
MapSceneContext,
MapSceneContextType,
} from "../providers/map-scene-provider";
export function Map() {
const divRef = useRef<HTMLDivElement>(null);
const { setMapScene } = useContext(MapSceneContext) as MapSceneContextType;
useEffect(() => {
let ignore = false;
if (!divRef.current) return;
async function loadScene() {
if (divRef.current) {
const _mapScene = await MapScene.create(divRef.current, "20");
if (_mapScene) {
setMapScene(_mapScene);
}
}
}
if (!ignore) {
loadScene();
}
return () => {
ignore = true;
};
}, [divRef]);
return (
<div className="w-full h-full flex flex-col justify-center">
<div className="w-full h-full" ref={divRef}></div>
</div>
);
}