@@ -1,5 +1,4 @@
|
||||
import { OrderStatusEnum } from '@/pages/order/enum/OrderEnum'
|
||||
import { RequestStatusEnum } from '@/pages/request/enum/RequestEnum'
|
||||
import { ProformaInvoiceStatusEnum } from '@/pages/invoice/enum/InvoiceEnum'
|
||||
import { PaymentStatusEnum } from '@/pages/payment/enum/Enum'
|
||||
|
||||
@@ -17,10 +16,6 @@ export type StatusConfig = {
|
||||
* برای اضافه کردن وضعیت جدید: یک کلید (مقدار enum یا string از API) و مقدار { label, variant } بگذار.
|
||||
*/
|
||||
export const statusRegistry: Record<string, StatusConfig> = {
|
||||
// --- RequestStatusEnum ---
|
||||
[RequestStatusEnum.PENDING]: { label: 'در انتظار تایید', variant: 'warning' },
|
||||
// INVOICED shared with OrderStatusEnum (same value 'invoiced') — see OrderStatusEnum.INVOICED below
|
||||
|
||||
// --- ProformaInvoiceStatusEnum ---
|
||||
[ProformaInvoiceStatusEnum.ALL]: { label: 'همه', variant: 'neutral' },
|
||||
[ProformaInvoiceStatusEnum.NOT_CONFIRMED]: { label: 'تایید نشده', variant: 'warning' },
|
||||
@@ -44,7 +39,7 @@ export const statusRegistry: Record<string, StatusConfig> = {
|
||||
[OrderStatusEnum.CANCELED]: { label: 'لغو شده', variant: 'error' },
|
||||
|
||||
// --- PaymentStatusEnum ---
|
||||
// Pending shared with RequestStatusEnum.PENDING and ticket (same value 'pending') — see above and ticket section
|
||||
// Pending shared with ticket (same value 'pending') — see ticket section
|
||||
[PaymentStatusEnum.Paid]: { label: 'پرداخت شده', variant: 'success' },
|
||||
[PaymentStatusEnum.Failed]: { label: 'ناموفق', variant: 'error' },
|
||||
[PaymentStatusEnum.Refunded]: { label: 'مسترد شده', variant: 'info' },
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import Tabs from '@/components/Tabs'
|
||||
import { useState, type FC } from 'react'
|
||||
import { TabMyRequestsEnum } from './enum/RequestEnum'
|
||||
import Filters from '@/components/Filters'
|
||||
import { useState, type FC } from 'react'
|
||||
import Button from '@/components/Button'
|
||||
import { AddSquare, Eye } from 'iconsax-react'
|
||||
import Table from '@/components/Table'
|
||||
@@ -12,8 +10,7 @@ import { Paths } from '@/config/Paths'
|
||||
|
||||
const MyRequests: FC = () => {
|
||||
const [page, setPage] = useState<number>(1)
|
||||
const [activeTab, setActiveTab] = useState<TabMyRequestsEnum>(TabMyRequestsEnum.ALL)
|
||||
const { data } = useGetMyRequests(page, activeTab)
|
||||
const { data } = useGetMyRequests(page)
|
||||
|
||||
return (
|
||||
<div className='mt-5'>
|
||||
@@ -21,18 +18,6 @@ const MyRequests: FC = () => {
|
||||
درخواست های من
|
||||
</h1>
|
||||
|
||||
<div className='mt-10'>
|
||||
<Tabs
|
||||
items={[
|
||||
{ label: 'همه', value: TabMyRequestsEnum.ALL },
|
||||
{ label: 'در انتظار تایید', value: TabMyRequestsEnum.PENDING },
|
||||
{ label: 'فاکتور شده', value: TabMyRequestsEnum.INVOICED },
|
||||
]}
|
||||
activeTab={activeTab}
|
||||
onTabChange={(tab) => setActiveTab(tab as TabMyRequestsEnum)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className='mt-16 flex justify-between items-center'>
|
||||
<Filters
|
||||
fields={[
|
||||
@@ -68,12 +53,16 @@ const MyRequests: FC = () => {
|
||||
},
|
||||
{
|
||||
key: 'items',
|
||||
title: 'تعداد اقلام',
|
||||
render: (item) => {
|
||||
return (
|
||||
<div>{item.items.length}</div>
|
||||
)
|
||||
}
|
||||
title: 'اقلام',
|
||||
render: (item) => (
|
||||
<div className="space-y-1">
|
||||
{item.items.map((requestItem) => (
|
||||
<div key={requestItem.id}>
|
||||
{requestItem.product.title} {requestItem.quantity} عدد
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
key: 'createdAt',
|
||||
@@ -84,10 +73,6 @@ const MyRequests: FC = () => {
|
||||
)
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'status',
|
||||
title: 'وضعیت درخواست',
|
||||
},
|
||||
{
|
||||
key: 'actions',
|
||||
title: '',
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
export const enum TabMyRequestsEnum {
|
||||
ALL = "all",
|
||||
PENDING = "pending",
|
||||
INVOICED = "invoiced",
|
||||
}
|
||||
|
||||
export const enum FieldTypeEnum {
|
||||
text = "text",
|
||||
textarea = "textarea",
|
||||
@@ -13,8 +7,3 @@ export const enum FieldTypeEnum {
|
||||
checkbox = "checkbox",
|
||||
date = "date",
|
||||
}
|
||||
|
||||
export enum RequestStatusEnum {
|
||||
PENDING = "pending",
|
||||
INVOICED = "invoiced",
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import { useMutation, useQuery } from "@tanstack/react-query";
|
||||
import * as api from "../service/RequestService";
|
||||
import type { TabMyRequestsEnum } from "../enum/RequestEnum";
|
||||
import type { AddTicketType } from "../type/Types";
|
||||
|
||||
export const useGetProducts = () => {
|
||||
@@ -24,10 +23,10 @@ export const useSubmitRequest = () => {
|
||||
});
|
||||
};
|
||||
|
||||
export const useGetMyRequests = (page: number = 1, statuses: TabMyRequestsEnum) => {
|
||||
export const useGetMyRequests = (page: number = 1) => {
|
||||
return useQuery({
|
||||
queryKey: ["my-requests", page, statuses],
|
||||
queryFn: () => api.getMyRequests(page, statuses),
|
||||
queryKey: ["my-requests", page],
|
||||
queryFn: () => api.getMyRequests(page),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ import type {
|
||||
ProductsResponseType,
|
||||
TicketsResponseType,
|
||||
} from "../type/Types";
|
||||
import { RequestStatusEnum, TabMyRequestsEnum } from "../enum/RequestEnum";
|
||||
|
||||
export const getProducts = async () => {
|
||||
const { data } = await axios.get<ProductsResponseType>(`/public/products`);
|
||||
@@ -27,23 +26,9 @@ export const submitRequest = async (params: RequestType[]) => {
|
||||
return data;
|
||||
};
|
||||
|
||||
export const getMyRequests = async (
|
||||
page: number = 1,
|
||||
active: TabMyRequestsEnum,
|
||||
) => {
|
||||
const statuses =
|
||||
active === TabMyRequestsEnum.PENDING
|
||||
? [RequestStatusEnum.PENDING]
|
||||
: active === TabMyRequestsEnum.INVOICED
|
||||
? [RequestStatusEnum.INVOICED]
|
||||
: undefined;
|
||||
|
||||
let query = `?page=${page}`;
|
||||
if (statuses) {
|
||||
query += `&statuses=${statuses}`;
|
||||
}
|
||||
export const getMyRequests = async (page: number = 1) => {
|
||||
const { data } = await axios.get<MyRequestsResponseType>(
|
||||
`/public/request${query}`,
|
||||
`/public/request?page=${page}`,
|
||||
);
|
||||
return data;
|
||||
};
|
||||
|
||||
@@ -77,7 +77,6 @@ export interface MyRequestType extends RowDataType {
|
||||
orderNumber: number;
|
||||
paidAmount: number;
|
||||
paymentMethod: string;
|
||||
status: string;
|
||||
subTotal: number;
|
||||
taxAmount: number;
|
||||
total: number;
|
||||
@@ -174,7 +173,6 @@ export type RequestDetailType = {
|
||||
deletedAt: string | null;
|
||||
user: RequestDetailUserType;
|
||||
requestNumber: number;
|
||||
status: string;
|
||||
items: RequestDetailItemType[];
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user