| | |
| | | import React from 'react'; |
| | | import React, { useState, useRef, useEffect, useMemo } from "react"; |
| | | import { |
| | | TextField, |
| | | Select, |
| | |
| | | Box, |
| | | SpeedDial, |
| | | SpeedDialAction, |
| | | useTheme, |
| | | } from '@mui/material'; |
| | | import { |
| | | MoreVert as MoreVertIcon, |
| | |
| | | Print as PrintIcon, |
| | | Share as ShareIcon, |
| | | } from '@mui/icons-material'; |
| | | import Player from './player'; |
| | | |
| | | function MapPage() { |
| | | const [mode, setMode] = React.useState('monitoring'); |
| | | let player; |
| | | |
| | | const MapPage = () => { |
| | | const mapRef = useRef(); |
| | | const contentRef = useRef(); |
| | | |
| | | const [app, setApp] = useState(null); |
| | | const [mapContainer, setMapContainer] = React.useState(null); |
| | | |
| | | const [mode, setMode] = useState('monitoring'); |
| | | |
| | | const theme = useTheme(); |
| | | const themeMode = theme.palette.mode; |
| | | |
| | | useEffect(() => { |
| | | const initialize = async () => { |
| | | player = new Player(mapRef.current, themeMode); |
| | | setApp(player.app); |
| | | setMapContainer(player.mapContainer); |
| | | } |
| | | |
| | | initialize(); |
| | | return () => { |
| | | player.app.destroy(true, { children: true }); |
| | | }; |
| | | }, []) |
| | | |
| | | const handleModeChange = (event) => { |
| | | setMode(event.target.value); |
| | |
| | | }} |
| | | > |
| | | <Box |
| | | ref={contentRef} |
| | | sx={{ |
| | | width: '100%', |
| | | height: '100%', |
| | | backgroundColor: '#e0e0e0', |
| | | }} |
| | | /> |
| | | > |
| | | <div ref={mapRef} /> |
| | | </Box> |
| | | |
| | | <SpeedDial |
| | | ariaLabel="SpeedDial 示例" |
| | | sx={{ position: 'absolute', bottom: 16, right: 16 }} |