From 8402e3e25a3f0506c87d82dec4c4b8bc87aa2499 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Thu, 2 Jul 2026 19:49:28 +0330 Subject: [PATCH] update order list --- src/pages/order/List.tsx | 61 +++++++++++++++++++++---- src/pages/order/service/OrderService.ts | 19 ++++++-- 2 files changed, 67 insertions(+), 13 deletions(-) diff --git a/src/pages/order/List.tsx b/src/pages/order/List.tsx index c8510a9..2d6ab53 100644 --- a/src/pages/order/List.tsx +++ b/src/pages/order/List.tsx @@ -1,10 +1,10 @@ import Filters, { type FilterValues } from '@/components/Filters' -import { type FC, useState } from 'react' +import { type FC, useEffect, useState } from 'react' import Table from '@/components/Table' import { AddSquare, Edit2, Printer, Receipt21 } from 'iconsax-react' import { useGetOrders } from './hooks/useOrderData' import moment from 'moment-jalaali' -import { Link } from 'react-router-dom' +import { Link, useSearchParams } from 'react-router-dom' import { Paths } from '@/config/Paths' import type { OrderListItemType } from './types/Types' import Button from '@/components/Button' @@ -14,12 +14,42 @@ import CategoriesSelect from '../product/components/CategoriesSelect' import { getOrderStatusBadgeClass, getOrderStatusLabel } from './constants/orderStatus' const OrdersList: FC = () => { + const [searchParams, setSearchParams] = useSearchParams() - const [designId, setDesignId] = useState() - const [categoryId, setCategoryId] = useState() - const [userId, setUserId] = useState() + const [designId, setDesignId] = useState( + () => searchParams.get('designerId') ?? searchParams.get('designId') ?? undefined, + ) + const [categoryId, setCategoryId] = useState( + () => searchParams.get('categoryId') ?? undefined, + ) + const [userId, setUserId] = useState( + () => searchParams.get('userId') ?? undefined, + ) const [filters, setFilters] = useState({}) + useEffect(() => { + const nextCategoryId = searchParams.get('categoryId') ?? undefined + const nextUserId = searchParams.get('userId') ?? undefined + const nextDesignId = + searchParams.get('designerId') ?? searchParams.get('designId') ?? undefined + + setCategoryId(nextCategoryId) + setUserId(nextUserId) + setDesignId(nextDesignId) + }, [searchParams]) + + const updateSearchParam = (key: string, value?: string) => { + setSearchParams((current) => { + const next = new URLSearchParams(current) + if (value) { + next.set(key, value) + } else { + next.delete(key) + } + return next + }, { replace: true }) + } + const { data } = useGetOrders({ designId, categoryId, userId, ...filters }) return ( @@ -62,18 +92,33 @@ const OrdersList: FC = () => { setUserId(id || undefined)} + value={userId ?? ''} + onChange={(id) => { + const nextUserId = id || undefined + setUserId(nextUserId) + updateSearchParam('userId', nextUserId) + }} /> setDesignId(id || undefined)} + value={designId ?? ''} + onChange={(id) => { + const nextDesignId = id || undefined + setDesignId(nextDesignId) + updateSearchParam('designerId', nextDesignId) + }} />
setCategoryId(e.target.value || undefined)} + value={categoryId ?? ''} + onChange={(e) => { + const nextCategoryId = e.target.value || undefined + setCategoryId(nextCategoryId) + updateSearchParam('categoryId', nextCategoryId) + }} />
diff --git a/src/pages/order/service/OrderService.ts b/src/pages/order/service/OrderService.ts index 5ef0faa..94dff78 100644 --- a/src/pages/order/service/OrderService.ts +++ b/src/pages/order/service/OrderService.ts @@ -27,11 +27,20 @@ export type GetOrdersParams = { const cleanParams = (params?: GetOrdersParams) => { if (!params) return undefined; - return Object.fromEntries( - Object.entries(params).filter( - (entry) => entry[1] != null && entry[1] !== "", - ) as [string, string][], - ); + const { designId, ...rest } = params; + const query: Record = {}; + + for (const [key, value] of Object.entries(rest)) { + if (value != null && value !== "") { + query[key] = value; + } + } + + if (designId) { + query.designerId = designId; + } + + return Object.keys(query).length > 0 ? query : undefined; }; export const getOrders = async (params?: GetOrdersParams) => {