import React, { useState, useRef, useEffect } from 'react';
|
import { useTranslate } from "react-admin";
|
import { Box, Typography, Tabs, Tab, Stack, useTheme, Divider } from '@mui/material';
|
import { CUSTOM_PAGES_DATA_INTERVAL } from '@/config/setting';
|
import AgvMain from './AgvMain';
|
import AgvControl from './AgvControl';
|
import JsonShow from '../../JsonShow';
|
import { getAgvInfo } from '../../http';
|
|
const AgvInsight = (props) => {
|
const { sprite, setTitle } = props;
|
const translate = useTranslate();
|
const theme = useTheme();
|
|
const [activeTab, setActiveTab] = useState(0);
|
const [curAgvNo, setCurAgvNo] = useState(null);
|
const [curAgvInfo, setCurAgvInfo] = useState(null);
|
|
const fetchAgvInfo = (agvNo) => {
|
setTitle(translate('page.map.devices.agv') + ' - ' + agvNo);
|
setCurAgvNo(agvNo);
|
getAgvInfo(agvNo, (response) => {
|
setCurAgvInfo(response);
|
});
|
}
|
|
useEffect(() => {
|
let intervalId;
|
if (sprite) {
|
const agvNo = sprite.data.no;
|
if (agvNo) {
|
fetchAgvInfo(agvNo);
|
intervalId = setInterval(() => {
|
fetchAgvInfo(agvNo);
|
}, CUSTOM_PAGES_DATA_INTERVAL);
|
}
|
}
|
|
return () => {
|
setTitle(null);
|
setCurAgvInfo(null);
|
if (intervalId) {
|
clearInterval(intervalId)
|
}
|
}
|
}, [sprite])
|
|
const handleTabChange = (event, newValue) => {
|
setActiveTab(newValue);
|
};
|
|
return (
|
<Box sx={{ height: '100%', display: 'flex', flexDirection: 'column' }}>
|
<Tabs
|
value={activeTab}
|
onChange={handleTabChange}
|
centered
|
sx={{ mb: 0 }}
|
>
|
<Tab label={translate('page.map.insight.title')} />
|
<Tab label={translate('page.map.insight.tabs.control')} />
|
<Tab label={'JSON'} />
|
</Tabs>
|
|
<Divider />
|
|
<Box flex={1} pt={2}>
|
{activeTab === 0 && (
|
<AgvMain
|
curAgvNo={curAgvNo}
|
curAgvInfo={curAgvInfo}
|
fetchAgvInfo={fetchAgvInfo}
|
/>
|
)}
|
{activeTab === 1 && (
|
<AgvControl
|
curAgvNo={curAgvNo}
|
/>
|
)}
|
{activeTab === 2 && (
|
<JsonShow
|
data={curAgvInfo || sprite?.data}
|
height={550}
|
/>
|
)}
|
</Box>
|
</Box>
|
)
|
}
|
|
export default AgvInsight;
|