| import React, { useState, useRef, useEffect, useMemo, useCallback } from "react"; | 
| import { useNavigate } from 'react-router-dom'; | 
| import { | 
|     ListBase, | 
|     TopToolbar, | 
|     FilterButton, | 
|     useListContext, | 
|     TextInput, | 
|     ReferenceInput, | 
|     AutocompleteInput, | 
|     ListToolbar, | 
|     Title, | 
| } from 'react-admin'; | 
| import { matchPath, useLocation } from 'react-router'; | 
| import { Box, Typography, Card, Stack, LinearProgress } from '@mui/material'; | 
| import { styled } from '@mui/material/styles'; | 
| import * as Common from '@/utils/common'; | 
| import MissionShow from "./MissionShow"; | 
| import { MissionListContent } from "./MissionListContent"; | 
| import EmptyDataLoader from "../components/EmptyDataLoader"; | 
| import MissionResend from "./MissionResend"; | 
|   | 
| const MissionList = () => { | 
|   | 
|     return ( | 
|         <> | 
|             <ListBase | 
|                 perPage={100} | 
|                 filter={{ | 
|                 }} | 
|             > | 
|                 <MissionLayout /> | 
|             </ListBase> | 
|         </> | 
|     ) | 
| } | 
|   | 
| const filters = [ | 
|     <ReferenceInput source="agvId" label="table.field.segment.agvId" reference="agv" alwaysOn> | 
|         <AutocompleteInput label="table.field.segment.agvId" optionText="uuid" filterToQuery={(val) => ({ uuid: val })} /> | 
|     </ReferenceInput>, | 
|     <TextInput source="groupNo" label="table.field.segment.groupId" />, | 
| ]; | 
|   | 
| const MissionLayout = () => { | 
|     const location = useLocation(); | 
|     const matchShow = matchPath('/mission/:id/show', location.pathname); | 
|     const matchResend = matchPath('/mission/:id/resend', location.pathname); | 
|   | 
|     const { data, isPending, filterValues } = useListContext(); | 
|     const hasFilters = filterValues && Object.keys(filterValues).length > 0; | 
|   | 
|     if (isPending) return <LinearProgress />; | 
|     if (!data?.length && !hasFilters) { | 
|         return ( | 
|             <> | 
|                 <EmptyDataLoader> | 
|                     <MissionShow open={!!matchShow} groupNo={matchShow?.params.id} /> | 
|                 </EmptyDataLoader> | 
|             </> | 
|         ); | 
|     } | 
|   | 
|     return ( | 
|         <Stack component="div" sx={{ width: '100%' }}> | 
|             <Title title={'menu.mission'} /> | 
|             <ListToolbar filters={filters} actions={( | 
|                 <TopToolbar> | 
|                     <FilterButton /> | 
|                 </TopToolbar> | 
|             )} /> | 
|             <Card> | 
|                 <MissionListContent /> | 
|             </Card> | 
|             <MissionShow open={!!matchShow} id={matchShow?.params.id} /> | 
|             <MissionResend open={!!matchResend} id={matchResend?.params.id} /> | 
|         </Stack> | 
|     ); | 
| } | 
|   | 
| export default MissionList; |