| 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; |