import React, { useState, useRef, useEffect, useMemo } from "react";
|
import {
|
ShowBase,
|
TabbedShowLayout,
|
useShowContext,
|
} from 'react-admin';
|
import {
|
Box,
|
Button,
|
Card,
|
CardContent,
|
Stack,
|
Typography,
|
Avatar,
|
} from '@mui/material';
|
import { formatDistance } from 'date-fns';
|
import { AgvShowDetail } from "./show/AgvShowDetail";
|
import { AgvShowAside } from "./show/AgvShowAside";
|
import { AgvShowTask } from "./show/AgvShowTask";
|
import { AgvShowError } from "./show/AgvShowError";
|
import CustomerTopToolBar from "../components/EditTopToolBar";
|
import { useTheme } from '@mui/material/styles';
|
import PulseSignal from "../components/PulseSignal";
|
|
export const AgvShow = () => {
|
return (
|
<>
|
<ShowBase>
|
<AgvShowContent />
|
</ShowBase>
|
</>
|
)
|
}
|
|
const AgvShowContent = (props) => {
|
const { record, isPending } = useShowContext();
|
const theme = useTheme();
|
const [online, setOnline] = useState(false);
|
|
useEffect(() => {
|
if (record) {
|
setOnline(record.online)
|
}
|
}, [record])
|
|
if (isPending || !record) return null;
|
|
return (
|
<>
|
<Box mt={2} display="flex">
|
<Box flex="1" sx={{
|
...(!record.online && {
|
animation: 'showBorderPulse 2s infinite',
|
'@keyframes showBorderPulse': {
|
'0%': {
|
boxShadow: '0 0 2px 1px rgba(255, 0, 0, 0.1)',
|
},
|
'50%': {
|
boxShadow: '0 0 3px 2px rgba(255, 0, 0, 0.3)',
|
},
|
'100%': {
|
boxShadow: '0 0 2px 1px rgba(255, 0, 0, 0.1)',
|
},
|
},
|
})
|
}}>
|
<Card>
|
<CardContent sx={{ pt: 0 }}>
|
<Box display="flex" mb={1} sx={{
|
justifyContent: 'space-between',
|
alignItems: 'center',
|
}}>
|
<CustomerTopToolBar backPrevious />
|
<Box mt={1} mr={1}>
|
<Stack direction='row'>
|
<Box mt={.8} mr={2}>
|
<PulseSignal
|
flag={online}
|
width={10}
|
/>
|
</Box>
|
<Typography
|
variant="h5"
|
sx={{
|
mt: .5,
|
mr: 2
|
}}
|
>
|
{record.agvModelData?.type}
|
</Typography>
|
<Avatar sx={{ bgcolor: theme.palette.primary.main }}>{record.uuid}</Avatar>
|
</Stack>
|
</Box>
|
</Box>
|
|
<TabbedShowLayout
|
sx={{
|
'& .RaTabbedShowLayout-content': { p: 0 },
|
}}
|
>
|
<TabbedShowLayout.Tab label="page.agv.show.tabs.detail">
|
<AgvShowDetail agvId={record.id} setOnline={setOnline} />
|
</TabbedShowLayout.Tab>
|
<TabbedShowLayout.Tab label="page.agv.show.tabs.task" path="tasks">
|
<AgvShowTask agvId={record.id} />
|
</TabbedShowLayout.Tab>
|
<TabbedShowLayout.Tab label="page.agv.show.tabs.error" path="errors">
|
<AgvShowError agvId={record.id} />
|
</TabbedShowLayout.Tab>
|
</TabbedShowLayout>
|
</CardContent>
|
</Card>
|
</Box>
|
<AgvShowAside />
|
</Box>
|
</>
|
)
|
}
|