Create component select + fix filter
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { useMemo } from 'react'
|
||||
import type { FieldType } from '@/components/Filters'
|
||||
import { OrderStatus, PaymentStatusEnum } from '../enum/Enum'
|
||||
|
||||
export const useOrderFiltersFields = (): FieldType[] => {
|
||||
return useMemo(() => [
|
||||
@@ -9,30 +10,33 @@ export const useOrderFiltersFields = (): FieldType[] => {
|
||||
placeholder: 'جستجو (شماره سفارش یا نام مشتری)',
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'status',
|
||||
placeholder: 'وضعیت',
|
||||
defaultValue: '',
|
||||
type: 'multiselect',
|
||||
name: 'statuses',
|
||||
placeholder: 'وضعیت سفارش',
|
||||
defaultValue: [],
|
||||
options: [
|
||||
{ label: 'همه', value: '' },
|
||||
{ label: 'در انتظار تایید', value: 'PENDING' },
|
||||
{ label: 'در حال آماده سازی', value: 'PREPARING' },
|
||||
{ label: 'آماده تحویل', value: 'READY' },
|
||||
{ label: 'تحویل داده شده', value: 'DELIVERED' },
|
||||
{ label: 'لغو شده', value: 'CANCELLED' },
|
||||
{ label: 'تایید نشده', value: 'REJECTED' },
|
||||
{ label: 'در انتظار پرداخت', value: OrderStatus.PENDING_PAYMENT },
|
||||
{ label: 'پرداخت شده', value: OrderStatus.PAID },
|
||||
{ label: 'در حال آماده سازی', value: OrderStatus.PREPARING },
|
||||
{ label: 'آماده', value: OrderStatus.READY },
|
||||
{ label: 'تحویل به پیشخدمت', value: OrderStatus.DELIVERED_TO_WAITER },
|
||||
{ label: 'تحویل به پذیرش', value: OrderStatus.DELIVERED_TO_RECEPTIONIST },
|
||||
{ label: 'ارسال شده', value: OrderStatus.SHIPPED },
|
||||
{ label: 'تکمیل شده', value: OrderStatus.COMPLETED },
|
||||
{ label: 'لغو شده', value: OrderStatus.CANCELED },
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'deliveryType',
|
||||
placeholder: 'نوع تحویل',
|
||||
name: 'paymentStatus',
|
||||
placeholder: 'وضعیت پرداخت',
|
||||
defaultValue: '',
|
||||
options: [
|
||||
{ label: 'همه', value: '' },
|
||||
{ label: 'تحویل با پیک', value: 'DELIVERY' },
|
||||
{ label: 'سرو در رستوران', value: 'DINE_IN' },
|
||||
{ label: 'تحویل در ماشین', value: 'PICKUP' },
|
||||
{ label: '--', value: '' },
|
||||
{ label: 'در انتظار', value: PaymentStatusEnum.Pending },
|
||||
{ label: 'پرداخت شده', value: PaymentStatusEnum.Paid },
|
||||
{ label: 'ناموفق', value: PaymentStatusEnum.Failed },
|
||||
{ label: 'بازگشت شده', value: PaymentStatusEnum.Refunded },
|
||||
],
|
||||
},
|
||||
], [])
|
||||
|
||||
@@ -10,7 +10,7 @@ export const useOrderFilters = () => {
|
||||
const [limit] = useState(DEFAULT_LIMIT);
|
||||
|
||||
const apiParams = useMemo(() => {
|
||||
const params: Record<string, string | number> = {
|
||||
const params: Record<string, string | number | string[]> = {
|
||||
page: currentPage,
|
||||
limit: limit,
|
||||
};
|
||||
@@ -19,12 +19,12 @@ export const useOrderFilters = () => {
|
||||
params.search = filters.search as string;
|
||||
}
|
||||
|
||||
if (filters.status) {
|
||||
params.status = filters.status as string;
|
||||
if (filters.statuses && Array.isArray(filters.statuses) && filters.statuses.length > 0) {
|
||||
params.statuses = filters.statuses as string[];
|
||||
}
|
||||
|
||||
if (filters.deliveryType) {
|
||||
params.deliveryType = filters.deliveryType as string;
|
||||
if (filters.paymentStatus) {
|
||||
params.paymentStatus = filters.paymentStatus as string;
|
||||
}
|
||||
|
||||
return params;
|
||||
|
||||
@@ -5,8 +5,8 @@ export interface GetOrdersParams {
|
||||
page?: number;
|
||||
limit?: number;
|
||||
search?: string;
|
||||
status?: string;
|
||||
deliveryType?: string;
|
||||
statuses?: string[];
|
||||
paymentStatus?: string;
|
||||
}
|
||||
|
||||
export interface ChangeOrderStatusParams {
|
||||
@@ -20,9 +20,34 @@ export interface RefundPaymentParams {
|
||||
export const getOrders = async (
|
||||
params?: GetOrdersParams
|
||||
): Promise<GetOrdersResponse> => {
|
||||
const { data } = await axios.get<GetOrdersResponse>("/admin/orders", {
|
||||
params,
|
||||
});
|
||||
const queryParams = new URLSearchParams();
|
||||
|
||||
if (params?.page) {
|
||||
queryParams.append('page', params.page.toString());
|
||||
}
|
||||
|
||||
if (params?.limit) {
|
||||
queryParams.append('limit', params.limit.toString());
|
||||
}
|
||||
|
||||
if (params?.search) {
|
||||
queryParams.append('search', params.search);
|
||||
}
|
||||
|
||||
if (params?.statuses && Array.isArray(params.statuses) && params.statuses.length > 0) {
|
||||
params.statuses.forEach((status) => {
|
||||
queryParams.append('statuses', status);
|
||||
});
|
||||
}
|
||||
|
||||
if (params?.paymentStatus) {
|
||||
queryParams.append('paymentStatus', params.paymentStatus);
|
||||
}
|
||||
|
||||
const queryString = queryParams.toString();
|
||||
const url = queryString ? `/admin/orders?${queryString}` : '/admin/orders';
|
||||
|
||||
const { data } = await axios.get<GetOrdersResponse>(url);
|
||||
return data;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user