feature/change-days #49
@ -77,5 +77,6 @@
|
||||
"dry-wash.notFound.button.back": "Back to Home",
|
||||
"dry-wash.errorBoundary.title": "Something went wrong",
|
||||
"dry-wash.errorBoundary.description": "We are already working on fixing the issue",
|
||||
"dry-wash.errorBoundary.button.reload": "Reload Page"
|
||||
"dry-wash.errorBoundary.button.reload": "Reload Page",
|
||||
"dry-wash.washTime.timeSlot": "{{start}} - {{end}}"
|
||||
}
|
||||
|
@ -8,8 +8,14 @@ enum ArmEndpoints {
|
||||
const armService = () => {
|
||||
const endpoint = getConfigValue('dry-wash.api');
|
||||
|
||||
const fetchOrders = async () => {
|
||||
const response = await fetch(`${endpoint}${ArmEndpoints.ORDERS}`);
|
||||
const fetchOrders = async ({ date }: { date: Date }) => {
|
||||
const response = await fetch(`${endpoint}${ArmEndpoints.ORDERS}`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({ date }),
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`Failed to fetch orders: ${response.status}`);
|
||||
|
31
src/components/DateNavigator/DateNavigator.tsx
Normal file
31
src/components/DateNavigator/DateNavigator.tsx
Normal file
@ -0,0 +1,31 @@
|
||||
import React from 'react';
|
||||
import { Box, Button, Text } from '@chakra-ui/react';
|
||||
import { ArrowBackIcon, ArrowForwardIcon } from '@chakra-ui/icons';
|
||||
|
||||
interface DateNavigatorProps {
|
||||
currentDate: Date;
|
||||
onPreviousDate: () => void;
|
||||
onNextDate: () => void;
|
||||
}
|
||||
|
||||
const DateNavigator = ({
|
||||
currentDate,
|
||||
onPreviousDate,
|
||||
onNextDate,
|
||||
}: DateNavigatorProps) => {
|
||||
return (
|
||||
<Box display='flex' alignItems='center' justifyContent='flex-start' mb='5'>
|
||||
<Button onClick={onPreviousDate}>
|
||||
<ArrowBackIcon />
|
||||
</Button>
|
||||
<Text mx='4' fontSize='lg' fontWeight='bold'>
|
||||
{currentDate.toLocaleDateString()}
|
||||
</Text>
|
||||
<Button onClick={onNextDate}>
|
||||
<ArrowForwardIcon />
|
||||
</Button>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default DateNavigator;
|
1
src/components/DateNavigator/index.ts
Normal file
1
src/components/DateNavigator/index.ts
Normal file
@ -0,0 +1 @@
|
||||
export { default } from './DateNavigator';
|
@ -13,10 +13,12 @@ import {
|
||||
useToast,
|
||||
} from '@chakra-ui/react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
import OrderItem from '../OrderItem';
|
||||
import { OrderProps } from '../OrderItem/OrderItem';
|
||||
import { armService } from '../../api/arm';
|
||||
import DateNavigator from '../DateNavigator';
|
||||
|
||||
const TABLE_HEADERS = [
|
||||
'carNumber' as const,
|
||||
@ -39,13 +41,14 @@ const Orders = () => {
|
||||
const [orders, setOrders] = useState<OrderProps[]>([]);
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
const [currentDate, setCurrentDate] = useState(new Date());
|
||||
|
||||
useEffect(() => {
|
||||
const loadOrders = async () => {
|
||||
setLoading(true);
|
||||
|
||||
try {
|
||||
const data = await fetchOrders();
|
||||
const data = await fetchOrders({ date: currentDate });
|
||||
setOrders(data.body);
|
||||
} catch (err) {
|
||||
setError(err.message);
|
||||
@ -62,13 +65,26 @@ const Orders = () => {
|
||||
};
|
||||
|
||||
loadOrders();
|
||||
}, [toast, t]);
|
||||
}, [toast, t, currentDate]);
|
||||
|
||||
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>
|
||||
|
@ -2,9 +2,9 @@ import React from 'react';
|
||||
import { Text, Button, Center, VStack, Heading } from '@chakra-ui/react';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { Player } from '@lottiefiles/react-lottie-player';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
import animate from '../../assets/animation/notFound.json';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
const NotFound = () => {
|
||||
const { t } = useTranslation('~', {
|
||||
|
@ -23,7 +23,7 @@ router.get('/arm/masters', (req, res) => {
|
||||
);
|
||||
});
|
||||
|
||||
router.get('/arm/orders', (req, res) => {
|
||||
router.post('/arm/orders', (req, res) => {
|
||||
res
|
||||
.status(/error/.test(STUBS.orders) ? 500 : 200)
|
||||
.send(
|
||||
|
Loading…
Reference in New Issue
Block a user