All checks were successful
		
		
	
	it-academy/dry-wash-pl/pipeline/pr-main This commit looks good
				
			
		
			
				
	
	
		
			125 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import React, { useEffect, useState } from 'react';
 | |
| import {
 | |
|   Box,
 | |
|   Heading,
 | |
|   Table,
 | |
|   Thead,
 | |
|   Tbody,
 | |
|   Tr,
 | |
|   Th,
 | |
|   Spinner,
 | |
|   Text,
 | |
|   Td,
 | |
| } from '@chakra-ui/react';
 | |
| import { useTranslation } from 'react-i18next';
 | |
| import dayjs from 'dayjs';
 | |
| 
 | |
| import OrderItem from '../OrderItem';
 | |
| import { OrderProps } from '../OrderItem/OrderItem';
 | |
| import DateNavigator from '../DateNavigator';
 | |
| import {
 | |
|   useGetMastersQuery,
 | |
|   useGetOrdersQuery,
 | |
| } from '../../__data__/service/api';
 | |
| import useShowToast from '../../hooks/useShowToast';
 | |
| 
 | |
| const TABLE_HEADERS = [
 | |
|   'carNumber' as const,
 | |
|   'orderDate' as const,
 | |
|   'status' as const,
 | |
|   'masters' as const,
 | |
|   'telephone' as const,
 | |
|   'location' as const,
 | |
| ];
 | |
| 
 | |
| const Orders = () => {
 | |
|   const { t } = useTranslation('~', {
 | |
|     keyPrefix: 'dry-wash.arm.order',
 | |
|   });
 | |
|   const showToast = useShowToast();
 | |
| 
 | |
|   const [currentDate, setCurrentDate] = useState(new Date());
 | |
|   const {
 | |
|     data: orders,
 | |
|     isLoading: isOrdersLoading,
 | |
|     isSuccess: isOrdersSuccess,
 | |
|     isError: isOrdersError,
 | |
|     error: ordersError,
 | |
|   } = useGetOrdersQuery({ date: currentDate });
 | |
| 
 | |
|   const {
 | |
|     data: masters,
 | |
|     isLoading: isMastersLoading,
 | |
|     isSuccess: isMastersSuccess,
 | |
|     isError: isMastersError,
 | |
|     error: mastersError,
 | |
|   } = useGetMastersQuery();
 | |
| 
 | |
|   const isLoading = isOrdersLoading || isMastersLoading;
 | |
|   const isSuccess = isOrdersSuccess && isMastersSuccess;
 | |
|   const isError = isOrdersError || isMastersError;
 | |
| 
 | |
|   useEffect(() => {
 | |
|     if (isError) {
 | |
|       showToast(t('error.title'), 'error');
 | |
|     }
 | |
|   }, [isError, ordersError, mastersError, t]);
 | |
| 
 | |
|   return (
 | |
|     <Box p='8'>
 | |
|       <Heading size='lg' mb='5'>
 | |
|         {t('title')}
 | |
|       </Heading>
 | |
| 
 | |
|       <DateNavigator
 | |
|         currentDate={currentDate}
 | |
|         onPreviousDate={() =>
 | |
|           setCurrentDate((prevDate) =>
 | |
|             dayjs(prevDate).subtract(1, 'day').toDate(),
 | |
|           )
 | |
|         }
 | |
|         onNextDate={() =>
 | |
|           setCurrentDate((prevDate) => dayjs(prevDate).add(1, 'day').toDate())
 | |
|         }
 | |
|       />
 | |
| 
 | |
|       <Table variant='simple' colorScheme='blackAlpha'>
 | |
|         <Thead>
 | |
|           <Tr>
 | |
|             {TABLE_HEADERS.map((name, key) => (
 | |
|               <Th key={key}>{t(`table.header.${name}`)}</Th>
 | |
|             ))}
 | |
|           </Tr>
 | |
|         </Thead>
 | |
|         <Tbody>
 | |
|           {isLoading && (
 | |
|             <Tr>
 | |
|               <Td colSpan={TABLE_HEADERS.length} textAlign='center' py='8'>
 | |
|                 <Spinner size='lg' />
 | |
|               </Td>
 | |
|             </Tr>
 | |
|           )}
 | |
|           {isSuccess && orders.length === 0 && (
 | |
|             <Tr>
 | |
|               <Td colSpan={TABLE_HEADERS.length}>
 | |
|                 <Text>{t('table.empty')}</Text>
 | |
|               </Td>
 | |
|             </Tr>
 | |
|           )}
 | |
|           {isSuccess &&
 | |
|             orders.map((order, index) => (
 | |
|               <OrderItem
 | |
|                 allMasters={masters}
 | |
|                 key={index}
 | |
|                 {...order}
 | |
|                 status={order.status as OrderProps['status']}
 | |
|               />
 | |
|             ))}
 | |
|         </Tbody>
 | |
|       </Table>
 | |
|     </Box>
 | |
|   );
 | |
| };
 | |
| 
 | |
| export default Orders;
 |