import React, { useState, useRef, useEffect, useMemo } from "react";
|
import {
|
Box,
|
Card,
|
CardContent,
|
Grid,
|
Typography,
|
Tooltip,
|
Table,
|
TableBody,
|
TableCell,
|
TableHead,
|
TableRow,
|
} from '@mui/material';
|
import {
|
useTranslate,
|
useRecordContext,
|
useGetMany,
|
Link,
|
} from 'react-admin';
|
import PanelTypography from "../components/PanelTypography";
|
import * as Common from '@/utils/common';
|
import { styled } from '@mui/material/styles';
|
import { format } from 'date-fns';
|
|
const BusPanel = () => {
|
const record = useRecordContext();
|
const translate = useTranslate();
|
const taskIds = record ? record.taskIds : [];
|
const { isPending, data: tasks } = useGetMany(
|
'tasks',
|
{ ids: taskIds },
|
{ enabled: !!record }
|
);
|
|
if (isPending || !record) return null;
|
|
return (
|
<>
|
<Card sx={{ maxWidth: '80%', margin: 'auto', mt: .5, mb: .5 }}>
|
<CardContent>
|
<Grid container spacing={2}>
|
<Grid item xs={12} sx={{ display: 'flex', justifyContent: 'space-between' }}>
|
<Typography variant="h5" gutterBottom align="left" sx={{
|
maxWidth: { xs: '100px', sm: '180px', md: '260px', lg: '360px' },
|
whiteSpace: 'nowrap',
|
overflow: 'hidden',
|
textOverflow: 'ellipsis',
|
}}>
|
{Common.camelToPascalWithSpaces(translate('table.field.bus.busNo'))}: {record.busNo}
|
</Typography>
|
{/* inherit, primary, secondary, textPrimary, textSecondary, error */}
|
<Typography variant="h5" gutterBottom align="right" >
|
ID: {record.id}
|
</Typography>
|
</Grid>
|
</Grid>
|
<Grid container spacing={2}>
|
<Grid item xs={12} container alignContent="flex-end">
|
<Typography variant="caption" color="textSecondary" sx={{ wordWrap: 'break-word', wordBreak: 'break-all' }}>
|
{Common.camelToPascalWithSpaces(translate('common.field.memo'))}:{record.memo}
|
</Typography>
|
</Grid>
|
</Grid>
|
<Box height={10}> </Box>
|
<Box>
|
<Table size="small">
|
<TableHead>
|
<TableRow>
|
<TableCell>
|
{translate('table.field.task.seqNum')}
|
</TableCell>
|
<TableCellRight>
|
{translate('table.field.task.taskType')}
|
</TableCellRight>
|
<TableCellRight>
|
{translate('table.field.task.taskSts')}
|
</TableCellRight>
|
<TableCellRight>
|
{translate('table.field.task.agvId')}
|
</TableCellRight>
|
<TableCellRight>
|
{translate('table.field.task.ioTime')}
|
</TableCellRight>
|
<TableCellRight>
|
{translate('table.field.task.oriDesc')}
|
</TableCellRight>
|
<TableCellRight>
|
{translate('table.field.task.destDesc')}
|
</TableCellRight>
|
</TableRow>
|
</TableHead>
|
<TableBody>
|
{tasks.map((task) => (
|
<TableRow key={task.id}>
|
<TableCell>
|
<Link to={`/task/${task.id}`}>
|
|
</Link>
|
{task.seqNum}
|
</TableCell>
|
<TableCellRight>
|
{task.taskType$}
|
</TableCellRight>
|
<TableCellRight>
|
{task.taskSts$}
|
</TableCellRight>
|
<TableCellRight>
|
{task.agvId$}
|
</TableCellRight>
|
<TableCellRight>
|
{format(new Date(task.ioTime), 'yyyy-MM-dd HH:mm:ss')}
|
</TableCellRight>
|
<TableCellRight>
|
{task.oriDesc}
|
</TableCellRight>
|
<TableCellRight>
|
{task.destDesc}
|
</TableCellRight>
|
</TableRow>
|
))}
|
</TableBody>
|
</Table>
|
</Box>
|
</CardContent>
|
</Card >
|
</>
|
);
|
};
|
|
const TableCellRight = styled(TableCell)({ textAlign: 'right' });
|
|
export default BusPanel;
|