| | |
| | | Divider, |
| | | CircularProgress, |
| | | Stack, |
| | | FormControl, |
| | | InputLabel, |
| | | Select, |
| | | MenuItem, |
| | | } from '@mui/material'; |
| | | import { |
| | | useTranslate, |
| | |
| | | ]; |
| | | |
| | | const RESERVE_COLUMN_COUNT = 11; |
| | | const RESERVE_TYPE_OPTIONS = ['IN', 'OUT']; |
| | | const RESERVE_STATE_OPTIONS = ['reserved', 'waiting', 'confirmed', 'canceled', 'timeout']; |
| | | const StaPanel = () => { |
| | | const record = useRecordContext(); |
| | | const translate = useTranslate(); |
| | | const dataProvider = useDataProvider(); |
| | | const [reserves, setReserves] = useState([]); |
| | | const [isReservesLoading, setIsReservesLoading] = useState(false); |
| | | const [typeFilter, setTypeFilter] = useState(''); |
| | | const [stateFilter, setStateFilter] = useState(''); |
| | | const taskIds = useMemo(() => extractIds(reserves, 'taskId'), [reserves]); |
| | | const segmentIds = useMemo(() => extractIds(reserves, 'segmentId'), [reserves]); |
| | | const agvIds = useMemo(() => extractIds(reserves, 'agvId'), [reserves]); |
| | |
| | | () => createLabelMap(agvRecords, (item) => item.uuid), |
| | | [agvRecords] |
| | | ); |
| | | |
| | | const filteredReserves = useMemo(() => { |
| | | if (!typeFilter && !stateFilter) { |
| | | return reserves; |
| | | } |
| | | return reserves.filter((reserve) => { |
| | | const matchesType = |
| | | !typeFilter || normalizeValueKey(reserve?.type) === normalizeValueKey(typeFilter); |
| | | const matchesState = |
| | | !stateFilter || normalizeValueKey(reserve?.state) === normalizeValueKey(stateFilter); |
| | | return matchesType && matchesState; |
| | | }); |
| | | }, [reserves, typeFilter, stateFilter]); |
| | | |
| | | useEffect(() => { |
| | | if (!record?.id) { |
| | |
| | | <Typography variant="subtitle1" gutterBottom> |
| | | {translate('menu.staReserve')} |
| | | </Typography> |
| | | <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2} mb={2}> |
| | | <FormControl size="small" sx={{ minWidth: 160 }}> |
| | | <InputLabel id="sta-panel-reserve-type-label"> |
| | | {translate('table.field.staReserve.type')} |
| | | </InputLabel> |
| | | <Select |
| | | labelId="sta-panel-reserve-type-label" |
| | | value={typeFilter} |
| | | label={translate('table.field.staReserve.type')} |
| | | onChange={(event) => setTypeFilter(event.target.value)} |
| | | > |
| | | <MenuItem value=""> |
| | | {translate('common.action.reset')} |
| | | </MenuItem> |
| | | {RESERVE_TYPE_OPTIONS.map((option) => ( |
| | | <MenuItem key={option} value={option}> |
| | | {formatReserveType(option, translate)} |
| | | </MenuItem> |
| | | ))} |
| | | </Select> |
| | | </FormControl> |
| | | <FormControl size="small" sx={{ minWidth: 160 }}> |
| | | <InputLabel id="sta-panel-reserve-state-label"> |
| | | {translate('table.field.staReserve.state')} |
| | | </InputLabel> |
| | | <Select |
| | | labelId="sta-panel-reserve-state-label" |
| | | value={stateFilter} |
| | | label={translate('table.field.staReserve.state')} |
| | | onChange={(event) => setStateFilter(event.target.value)} |
| | | > |
| | | <MenuItem value=""> |
| | | {translate('common.action.reset')} |
| | | </MenuItem> |
| | | {RESERVE_STATE_OPTIONS.map((option) => ( |
| | | <MenuItem key={option} value={option}> |
| | | {formatReserveState(option, translate)} |
| | | </MenuItem> |
| | | ))} |
| | | </Select> |
| | | </FormControl> |
| | | </Stack> |
| | | <Table size="small"> |
| | | <TableHead> |
| | | <TableRow> |
| | |
| | | </TableCell> |
| | | </TableRow> |
| | | )} |
| | | {!isReservesLoading && reserves.length === 0 && ( |
| | | {!isReservesLoading && filteredReserves.length === 0 && ( |
| | | <TableRow> |
| | | <TableCell colSpan={RESERVE_COLUMN_COUNT}> |
| | | <Typography variant="body2" color="textSecondary"> |
| | |
| | | </TableCell> |
| | | </TableRow> |
| | | )} |
| | | {reserves.map((reserve) => ( |
| | | {filteredReserves.map((reserve) => ( |
| | | <TableRow key={reserve.id}> |
| | | <TableCell>{reserve.uuid || '-'}</TableCell> |
| | | <TableCell>{getReferenceLabel(taskLabelMap, reserve.taskId)}</TableCell> |