diff --git a/src/pages/home/components/ServiceItem.tsx b/src/pages/home/components/ServiceItem.tsx index ad67b49..ff44a81 100644 --- a/src/pages/home/components/ServiceItem.tsx +++ b/src/pages/home/components/ServiceItem.tsx @@ -1,10 +1,11 @@ import { type FC } from 'react' +import { type ProductType } from '@/pages/request/type/Types' -const ServiceItem: FC = () => { +const ServiceItem: FC<{ product: ProductType }> = ({ product }) => { return (
- + {product.title}
) diff --git a/src/pages/home/components/Services.tsx b/src/pages/home/components/Services.tsx index 94ccee7..4d5fa6b 100644 --- a/src/pages/home/components/Services.tsx +++ b/src/pages/home/components/Services.tsx @@ -2,9 +2,11 @@ import { t } from '@/locale' import { type FC } from 'react' import { Swiper, SwiperSlide } from 'swiper/react' import ServiceItem from './ServiceItem' +import { useGetProducts } from '@/pages/request/hooks/useRequestData' const Services: FC = () => { + const { data } = useGetProducts(); return (

@@ -22,18 +24,13 @@ const Services: FC = () => { }, }} > - - - - - - - - - - - - + { + data?.data.map((item) => ( + + + + )) + }

diff --git a/src/pages/home/components/StatCard.tsx b/src/pages/home/components/StatCard.tsx index c36b92c..50a4e7c 100644 --- a/src/pages/home/components/StatCard.tsx +++ b/src/pages/home/components/StatCard.tsx @@ -4,7 +4,7 @@ import { type FC, type ReactNode } from 'react' type Props = { icon: ReactNode, - count: number, + count: number | undefined, description: string } diff --git a/src/pages/home/components/Stats.tsx b/src/pages/home/components/Stats.tsx index 2e0753a..12953a2 100644 --- a/src/pages/home/components/Stats.tsx +++ b/src/pages/home/components/Stats.tsx @@ -4,8 +4,12 @@ import { t } from '@/locale' import { BoxTick, BoxTime, ReceiptText, TruckTick } from 'iconsax-react' import { type FC } from 'react' import StatCard from './StatCard' +import { useGetOrderStats } from '@/pages/order/hooks/useOrderData' const Stats: FC = () => { + + const { data } = useGetOrderStats(); + return ( { className='mt-5' > { />} /> { />} /> { />} /> { return useQuery({ - queryKey: ['my-orders', page, statuses], + queryKey: ["my-orders", page, statuses], queryFn: () => api.getMyOrders(page, statuses), - }) -} + }); +}; export const useGetOrderDetails = (id: string) => { return useQuery({ - queryKey: ['order', id], + queryKey: ["order", id], queryFn: () => api.getOrderDetails(id), enabled: !!id, - }) -} + }); +}; export const useGetTickets = (orderId: string) => { return useQuery({ - queryKey: ['tickets', orderId], + queryKey: ["tickets", orderId], queryFn: () => api.getTickets(orderId), enabled: !!orderId, - }) -} + }); +}; export const useAddTicket = () => { return useMutation({ @@ -35,8 +35,15 @@ export const useAddTicket = () => { requestId, params, }: { - requestId: string - params: AddTicketType + requestId: string; + params: AddTicketType; }) => api.addTicket(requestId, params), - }) -} + }); +}; + +export const useGetOrderStats = () => { + return useQuery({ + queryKey: ["order-stats"], + queryFn: api.getOrderStats, + }); +}; diff --git a/src/pages/order/service/OrderService.ts b/src/pages/order/service/OrderService.ts index b3047f0..5839303 100644 --- a/src/pages/order/service/OrderService.ts +++ b/src/pages/order/service/OrderService.ts @@ -1,11 +1,12 @@ -import axios from '@/config/axios' +import axios from "@/config/axios"; import type { AddTicketType, MyOrdersResponseType, OrderDetailResponseType, + OrderStatsResponseType, TicketsResponseType, -} from '../type/Types' -import { RequestStatusEnum, TabMyRequestsEnum } from '../enum/OrderEnum' +} from "../type/Types"; +import { RequestStatusEnum, TabMyRequestsEnum } from "../enum/OrderEnum"; export const getMyOrders = async ( page: number = 1, @@ -25,36 +26,41 @@ export const getMyOrders = async ( RequestStatusEnum.READY_TO_PRINTING, ] : active === TabMyRequestsEnum.CANCELLED - ? [RequestStatusEnum.CANCELED] - : active === TabMyRequestsEnum.DELIVERED - ? [RequestStatusEnum.DELIVERED] - : undefined + ? [RequestStatusEnum.CANCELED] + : active === TabMyRequestsEnum.DELIVERED + ? [RequestStatusEnum.DELIVERED] + : undefined; - let query = `?page=${page}` + let query = `?page=${page}`; if (statuses) { - query += `&statuses=${statuses}` + query += `&statuses=${statuses}`; } const { data } = await axios.get( `/public/orders${query}`, - ) - return data -} + ); + return data; +}; export const getOrderDetails = async (id: string) => { const { data } = await axios.get( `/public/orders/${id}`, - ) - return data -} + ); + return data; +}; export const getTickets = async (id: string) => { const { data } = await axios.get( `/public/ticket/ref/${id}`, - ) - return data -} + ); + return data; +}; export const addTicket = async (id: string, params: AddTicketType) => { - const { data } = await axios.post(`/public/ticket/ref/${id}`, params) - return data -} + const { data } = await axios.post(`/public/ticket/ref/${id}`, params); + return data; +}; + +export const getOrderStats = async () => { + const { data } = await axios.get(`/public/orders/stats`); + return data; +}; diff --git a/src/pages/order/type/Types.ts b/src/pages/order/type/Types.ts index f1563e5..0b9f9bc 100644 --- a/src/pages/order/type/Types.ts +++ b/src/pages/order/type/Types.ts @@ -55,3 +55,12 @@ export interface OrderType extends RowDataType { export type MyOrdersResponseType = BaseResponse export type OrderDetailResponseType = BaseResponse + +export type OrderStatsType = { + requestsCount: number + invoicesCount: number + inProgressOrdersCount: number + completedOrdersCount: number +} + +export type OrderStatsResponseType = BaseResponse