| import React, { useState, useRef, useEffect } from 'react'; | 
| import { useTranslate } from "react-admin"; | 
| import { Drawer, Box, Typography, Card, CardContent, IconButton, Stack, useTheme } from '@mui/material'; | 
| import CloseIcon from '@mui/icons-material/Close'; | 
| import { PAGE_DRAWER_WIDTH } from '@/config/setting'; | 
| import { | 
|     DEVICE_TYPE, | 
| } from '../constants'; | 
| import JsonShow from '../JsonShow'; | 
| import ShelfInsight from './shelf'; | 
| import AgvInsight from './agv'; | 
| import PointInsight from './point'; | 
|   | 
| const Insight = (props) => { | 
|     const { open, onCancel, sprite, width = PAGE_DRAWER_WIDTH } = props; | 
|     const theme = useTheme(); | 
|     const themeMode = theme.palette.mode; | 
|     const translate = useTranslate(); | 
|     const [title, setTitle] = useState(null); | 
|   | 
|     const deviceType = sprite?.data?.type; | 
|   | 
|     const handleClose = () => { | 
|         onCancel(); | 
|     } | 
|   | 
|     useEffect(() => { | 
|     }, [sprite]) | 
|   | 
|     return ( | 
|         <> | 
|             <Drawer | 
|                 variant="persistent" | 
|                 open={open} | 
|                 anchor="right" | 
|                 onClose={handleClose} | 
|                 sx={{ zIndex: 100, opacity: 1 }} | 
|             > | 
|                 {open && ( | 
|                     <Box pt={12} width={{ xs: '100vW', sm: width }} height={'calc(100vh - 100px);'} mt={{ xs: 2, sm: 1 }} sx={{ | 
|                     }}> | 
|                         <Stack direction="row" p={2} pt={3}> | 
|                             <Typography variant="h6" flex="1"> | 
|                                 {title || ''} | 
|                             </Typography> | 
|                             <IconButton onClick={handleClose} size="small"> | 
|                                 <CloseIcon /> | 
|                             </IconButton> | 
|                         </Stack> | 
|                         <Box p={2} pt={0} height='100%'> | 
|                             <Card sx={{ | 
|                                 height: '100%', | 
|                                 transition: '0.3s', | 
|                                 boxShadow: themeMode === 'light' | 
|                                     ? '0px 2px 8px rgba(0, 0, 0, 0.1)' | 
|                                     : '0px 2px 2px rgba(255, 255, 255, 0.1)', | 
|                                 '&:hover': { | 
|                                     boxShadow: themeMode === 'light' | 
|                                         ? '0px 4px 16px rgba(0, 0, 0, 0.2)' | 
|                                         : '0px 4px 8px rgba(255, 255, 255, 0.2)', | 
|                                 }, | 
|                                 borderRadius: '8px', | 
|                             }}> | 
|                                 <CardContent sx={{ height: '100%' }}> | 
|                                     <DeviceContent | 
|                                         deviceType={deviceType} | 
|                                         sprite={sprite} | 
|                                         setTitle={setTitle} | 
|                                     /> | 
|                                 </CardContent> | 
|                             </Card> | 
|                         </Box> | 
|                     </Box> | 
|                 )} | 
|             </Drawer> | 
|         </> | 
|     ) | 
| } | 
|   | 
| const DeviceContent = ({ deviceType, sprite, setTitle }) => { | 
|     switch (deviceType) { | 
|         case DEVICE_TYPE.SHELF: | 
|             return ( | 
|                 <ShelfInsight | 
|                     sprite={sprite} | 
|                     setTitle={setTitle} | 
|                 /> | 
|             ) | 
|         case DEVICE_TYPE.AGV: | 
|             return ( | 
|                 <AgvInsight | 
|                     sprite={sprite} | 
|                     setTitle={setTitle} | 
|                 /> | 
|             ) | 
|         case DEVICE_TYPE.POINT: | 
|             return ( | 
|                 <PointInsight | 
|                     sprite={sprite} | 
|                     setTitle={setTitle} | 
|                 /> | 
|             ) | 
|         default: | 
|             return ( | 
|                 <JsonShow | 
|                     data={sprite?.data} | 
|                     height={550} | 
|                 /> | 
|             ) | 
|     } | 
| } | 
|   | 
| export default Insight; |