update order list

This commit is contained in:
2026-07-02 19:49:28 +03:30
parent b76b4704de
commit 8402e3e25a
2 changed files with 67 additions and 13 deletions
+53 -8
View File
@@ -1,10 +1,10 @@
import Filters, { type FilterValues } from '@/components/Filters' 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 Table from '@/components/Table'
import { AddSquare, Edit2, Printer, Receipt21 } from 'iconsax-react' import { AddSquare, Edit2, Printer, Receipt21 } from 'iconsax-react'
import { useGetOrders } from './hooks/useOrderData' import { useGetOrders } from './hooks/useOrderData'
import moment from 'moment-jalaali' import moment from 'moment-jalaali'
import { Link } from 'react-router-dom' import { Link, useSearchParams } from 'react-router-dom'
import { Paths } from '@/config/Paths' import { Paths } from '@/config/Paths'
import type { OrderListItemType } from './types/Types' import type { OrderListItemType } from './types/Types'
import Button from '@/components/Button' import Button from '@/components/Button'
@@ -14,12 +14,42 @@ import CategoriesSelect from '../product/components/CategoriesSelect'
import { getOrderStatusBadgeClass, getOrderStatusLabel } from './constants/orderStatus' import { getOrderStatusBadgeClass, getOrderStatusLabel } from './constants/orderStatus'
const OrdersList: FC = () => { const OrdersList: FC = () => {
const [searchParams, setSearchParams] = useSearchParams()
const [designId, setDesignId] = useState<string | undefined>() const [designId, setDesignId] = useState<string | undefined>(
const [categoryId, setCategoryId] = useState<string | undefined>() () => searchParams.get('designerId') ?? searchParams.get('designId') ?? undefined,
const [userId, setUserId] = useState<string | undefined>() )
const [categoryId, setCategoryId] = useState<string | undefined>(
() => searchParams.get('categoryId') ?? undefined,
)
const [userId, setUserId] = useState<string | undefined>(
() => searchParams.get('userId') ?? undefined,
)
const [filters, setFilters] = useState<FilterValues>({}) const [filters, setFilters] = useState<FilterValues>({})
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 }) const { data } = useGetOrders({ designId, categoryId, userId, ...filters })
return ( return (
@@ -62,18 +92,33 @@ const OrdersList: FC = () => {
<UserSearch <UserSearch
placeholder='جستجوی کاربر' placeholder='جستجوی کاربر'
className='w-[220px]' className='w-[220px]'
onChange={(id) => setUserId(id || undefined)} value={userId ?? ''}
onChange={(id) => {
const nextUserId = id || undefined
setUserId(nextUserId)
updateSearchParam('userId', nextUserId)
}}
/> />
<DesignerSearch <DesignerSearch
className='w-[220px]' className='w-[220px]'
placeholder='جستجوی طراح' placeholder='جستجوی طراح'
onChange={(id) => setDesignId(id || undefined)} value={designId ?? ''}
onChange={(id) => {
const nextDesignId = id || undefined
setDesignId(nextDesignId)
updateSearchParam('designerId', nextDesignId)
}}
/> />
<div className='w-[220px]'> <div className='w-[220px]'>
<CategoriesSelect <CategoriesSelect
isDisableShowLable isDisableShowLable
placeholder='جستجوی نوع' placeholder='جستجوی نوع'
onChange={(e) => setCategoryId(e.target.value || undefined)} value={categoryId ?? ''}
onChange={(e) => {
const nextCategoryId = e.target.value || undefined
setCategoryId(nextCategoryId)
updateSearchParam('categoryId', nextCategoryId)
}}
/> />
</div> </div>
</div> </div>
+14 -5
View File
@@ -27,11 +27,20 @@ export type GetOrdersParams = {
const cleanParams = (params?: GetOrdersParams) => { const cleanParams = (params?: GetOrdersParams) => {
if (!params) return undefined; if (!params) return undefined;
return Object.fromEntries( const { designId, ...rest } = params;
Object.entries(params).filter( const query: Record<string, string> = {};
(entry) => entry[1] != null && entry[1] !== "",
) as [string, string][], 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) => { export const getOrders = async (params?: GetOrdersParams) => {