diff --git a/src/pages/formBuilder/hooks/useFormBuilderData.ts b/src/pages/formBuilder/hooks/useFormBuilderData.ts index 3a50f09..66bbda1 100644 --- a/src/pages/formBuilder/hooks/useFormBuilderData.ts +++ b/src/pages/formBuilder/hooks/useFormBuilderData.ts @@ -96,3 +96,11 @@ export const useDeleteFieldValue = () => { mutationFn: (id: number) => api.deleteFieldValue(id), }); }; + +export const useGetEntityField = (entityId: number) => { + return useQuery({ + queryKey: ["entity-field", entityId], + queryFn: () => api.getEntityField(entityId), + enabled: !!entityId, + }); +}; diff --git a/src/pages/formBuilder/service/FormBuilderService.ts b/src/pages/formBuilder/service/FormBuilderService.ts index 50fb9c0..4cdef04 100644 --- a/src/pages/formBuilder/service/FormBuilderService.ts +++ b/src/pages/formBuilder/service/FormBuilderService.ts @@ -6,6 +6,7 @@ import type { FieldResponseType, FieldValueDetailResponseType, FieldValuesResponseType, + GetEnitityFieldResponseType, } from "../types/Types"; export const createField = async (id: number, params: CreateFieldType) => { @@ -15,14 +16,14 @@ export const createField = async (id: number, params: CreateFieldType) => { export const getFields = async (id: number) => { const { data } = await axios.get( - `/admin/entity/${id}/field`, + `/admin/entity/${id}/field` ); return data; }; export const getFieldDetail = async (id: number) => { const { data } = await axios.get( - `/admin/entity/field/${id}`, + `/admin/entity/field/${id}` ); return data; }; @@ -39,14 +40,14 @@ export const deleteFields = async (id: number) => { export const getFieldValues = async (id: number) => { const { data } = await axios.get( - `/admin/entity/field/${id}/option`, + `/admin/entity/field/${id}/option` ); return data; }; export const createFieldValues = async ( id: number, - params: CreateFieldValueType, + params: CreateFieldValueType ) => { const { data } = await axios.post(`/admin/entity/field/${id}/option`, params); return data; @@ -54,18 +55,18 @@ export const createFieldValues = async ( export const updateFieldValues = async ( id: number, - params: CreateFieldValueType, + params: CreateFieldValueType ) => { const { data } = await axios.patch( `/admin/entity/field/option/${id}`, - params, + params ); return data; }; export const getFieldValueDetail = async (id: number) => { const { data } = await axios.get( - `/admin/entity/field/option/${id}`, + `/admin/entity/field/option/${id}` ); return data; }; @@ -74,3 +75,10 @@ export const deleteFieldValue = async (id: number) => { const { data } = await axios.delete(`/admin/entity/field/option/${id}`); return data; }; + +export const getEntityField = async (entityId: number) => { + const { data } = await axios.get( + `/admin/entity/${entityId}/field` + ); + return data; +}; diff --git a/src/pages/formBuilder/types/Types.ts b/src/pages/formBuilder/types/Types.ts index ac92f45..4a90d99 100644 --- a/src/pages/formBuilder/types/Types.ts +++ b/src/pages/formBuilder/types/Types.ts @@ -10,7 +10,7 @@ export type CreateFieldType = { entityType:string, // 'product' | 'print' } -export type FieldType = { +export interface FieldType { createdAt: string, id: number, isRequired: boolean, @@ -37,5 +37,10 @@ export type FieldValueType = { value: string, } +export interface EntityType extends FieldType { + options: FieldValueType[] +} + export type FieldValuesResponseType = BaseResponse; export type FieldValueDetailResponseType = BaseResponse; +export type GetEnitityFieldResponseType = BaseResponse; diff --git a/src/pages/order/OrderDetail.tsx b/src/pages/order/OrderDetail.tsx index 6665cce..2c89d25 100644 --- a/src/pages/order/OrderDetail.tsx +++ b/src/pages/order/OrderDetail.tsx @@ -3,6 +3,7 @@ import { Receipt1 } from 'iconsax-react' import { useParams } from 'react-router-dom' import { useGetOrderDetails } from './hooks/useOrderData' import TicketSection from './components/TicketSection' +import OrderItem from './components/OrderItem' const OrderDetail: FC = () => { @@ -32,42 +33,7 @@ const OrderDetail: FC = () => { { data?.data?.items?.map((item) => { return ( -
-
- {/* Product Image */} -
- -
- - {/* Order Details */} -
-
-
عنوان:
-
{item.product.title}
-
-
-
نام طرح:
-
{'orderData.designer'}
-
-
-
تعداد:
-
{item.quantity}
-
-
-
تخمین زمان:
-
{data?.data?.estimatedDays}
-
-
-
- - {/* Order Description */} -
-
شرح سفارش:
-

- {item.description} -

-
-
+ ) }) } diff --git a/src/pages/order/components/OrderItem.tsx b/src/pages/order/components/OrderItem.tsx new file mode 100644 index 0000000..f6e7715 --- /dev/null +++ b/src/pages/order/components/OrderItem.tsx @@ -0,0 +1,76 @@ +import { type FC } from 'react' +import type { OrderItemType } from '../types/Types' +import { useGetEntityField } from '@/pages/formBuilder/hooks/useFormBuilderData' + +type Props = { + item: OrderItemType, + estimatedDays?: number, +} + +const OrderItem: FC = ({ item, estimatedDays }) => { + + const { data: fields } = useGetEntityField(item.product?.id) + + + return ( +
+
+ {/* Product Image */} +
+ +
+ + {/* Order Details */} +
+
+
عنوان:
+
{item.product.title}
+
+
+
نام طرح:
+
{'orderData.designer'}
+
+
+
تعداد:
+
{item.quantity}
+
+
+
تخمین زمان:
+
{estimatedDays}
+
+
+
+ + {/* Order Description */} +
+
شرح سفارش:
+

+ {item.description} +

+
+ +
+ ویژگی ها +
+ { + fields?.data?.map((field) => { + const value = item.attributes?.find((o => Number(o.attributeId) === Number(field.id))) + + + return ( +
+
+ {field.name} : +
+
+ {value?.value || '-'} +
+
+ ) + }) + } +
+ ) +} + +export default OrderItem \ No newline at end of file diff --git a/src/pages/order/types/Types.ts b/src/pages/order/types/Types.ts index 76f0b03..8be4ade 100644 --- a/src/pages/order/types/Types.ts +++ b/src/pages/order/types/Types.ts @@ -114,20 +114,25 @@ export interface MyOrderType extends RowDataType { subTotal: number; taxAmount: number; total: number; - items: { - adminDescription?: string; - attachments: { - type: string; - url: string; - }[]; - description: string; - product: ProductType; - quantity: number; - subTotal: number; - total: number; - unitPrice: number; - }[]; + items: OrderItemType[]; } +export type OrderItemType = { + adminDescription?: string; + attachments: { + type: string; + url: string; + }[]; + description: string; + product: ProductType; + quantity: number; + subTotal: number; + total: number; + unitPrice: number; + attributes: { + attributeId: number; + value: string; + }[]; +}; export type TicketsResponseType = BaseResponse; export type OrderDetailResponseType = BaseResponse;