From 1f33fa7a7f393c98a472537fc640b51b0645cb1a Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Tue, 27 Jan 2026 11:16:46 +0330 Subject: [PATCH] submit order base --- .env | 2 +- src/components/Button.tsx | 2 +- src/config/axios.ts | 4 +- src/pages/order/NewOrder.tsx | 46 +++++++++++++++-- src/pages/order/components/Order.tsx | 68 ++++++++++++++++--------- src/pages/order/service/OrderService.ts | 2 +- src/pages/order/store/OrderStore.ts | 2 +- src/pages/order/type/Types.ts | 2 +- 8 files changed, 94 insertions(+), 34 deletions(-) diff --git a/.env b/.env index 7b0e99e..52f1c95 100644 --- a/.env +++ b/.env @@ -1,3 +1,3 @@ VITE_TOKEN_NAME = 'negareh_t' VITE_REFRESH_TOKEN_NAME = 'negareh_rt' -VITE_API_BASE_URL = 'http://192.168.99.226:4000' +VITE_API_BASE_URL = 'http://10.24.161.1:4000' diff --git a/src/components/Button.tsx b/src/components/Button.tsx index fc951fa..f105e87 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -26,7 +26,7 @@ const Button: FC = memo((props: Props) => {
{ !props.percentage ? - + : {props.percentage}% } diff --git a/src/config/axios.ts b/src/config/axios.ts index 6bcdf09..37697f9 100644 --- a/src/config/axios.ts +++ b/src/config/axios.ts @@ -8,7 +8,9 @@ const instance = axios.create({ instance.interceptors.request.use( (config) => { - const token = getToken(); + const token = + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIwMUtGWjREWDhTNVJNOFMzMDc1NVZTWUNQUSIsImlhdCI6MTc2OTQ5NzYyMSwiZXhwIjoxNzY5NDk4ODIxfQ.YK6hQh3y-msWITy2sdLMsmwBvwXC5iHa3OxtWphyWQI" || + getToken(); if (token) { config.headers.Authorization = `Bearer ${token}`; } diff --git a/src/pages/order/NewOrder.tsx b/src/pages/order/NewOrder.tsx index f0f0486..92625a9 100644 --- a/src/pages/order/NewOrder.tsx +++ b/src/pages/order/NewOrder.tsx @@ -1,14 +1,50 @@ -import { type FC } from 'react' +import { useState, type FC } from 'react' import Order from './components/Order' +import Button from '@/components/Button' +import { TickSquare } from 'iconsax-react' +import { useOrderStore } from './store/OrderStore' +import { useSubmitOrder } from './hooks/useOrderData' +import { toast } from '@/shared/toast' const NewOrder: FC = () => { + + const { mutate: submitOrder, isPending } = useSubmitOrder() + const [showOrders, setShowOrders] = useState([0]) + const { items } = useOrderStore() + + const onSubmit = () => { + if (items.length > 0) { + submitOrder(items) + } else { + toast('حداقل یک سفارش باید اضافه کنید.', 'error') + } + } + + return (
-

- سفارش جدید -

+
+

+ سفارش جدید +

+ +
+ + {showOrders.map((item) => { + return ( + setShowOrders([...showOrders, showOrders.length])} key={item} /> + ) + })} -
) } diff --git a/src/pages/order/components/Order.tsx b/src/pages/order/components/Order.tsx index 2308d08..10e41bf 100644 --- a/src/pages/order/components/Order.tsx +++ b/src/pages/order/components/Order.tsx @@ -5,7 +5,7 @@ import Select from '@/components/Select' import UploadBox from '@/components/UploadBox' import VoiceRecorder from '@/components/VoiceRecorder' import { COLORS } from '@/constants/colors' -import { AddSquare } from 'iconsax-react' +import { AddSquare, Edit } from 'iconsax-react' import ProductsSelect from './ProductsSelect' import { useFormik } from 'formik' import * as Yup from 'yup' @@ -13,12 +13,19 @@ import type { AttachmentsType, OrderType, ProductType } from '../type/Types' import { useGetProducts } from '../hooks/useOrderData' import ManageAttribute from './ManageAttribute' import { useMultiUpload, useSingleUpload } from '@/pages/uploader/hooks/useUploader' -import { useAuthStore } from '../store/OrderStore' +import { useOrderStore } from '../store/OrderStore' +import { clx } from '@/helpers/utils' -const Order: FC = () => { +type Props = { + addNewItem: () => void, +} + +const Order: FC = ({ addNewItem }) => { const { data } = useGetProducts() - const { setItems, items } = useAuthStore() + const { setItems, items } = useOrderStore() + const [indexOrder, setIndexOrder] = useState(-1) + const [isEditMode, setIsEditMode] = useState(false) const [productSelected, setProductSelected] = useState() const [voiceFile, setVoiceFile] = useState() const [files, setFiles] = useState([]) @@ -27,14 +34,15 @@ const Order: FC = () => { const formik = useFormik({ initialValues: { - productId: 0, + productId: undefined, attachments: [], quantity: undefined, description: '', attributes: [] }, validationSchema: Yup.object({ - + productId: Yup.number().required('این فیلد اجباری می باشد'), + quantity: Yup.number().required('این فیلد اجباری می باشد'), }), onSubmit: async (values) => { const attachments: AttachmentsType[] = [] @@ -60,8 +68,21 @@ const Order: FC = () => { } }) } - values.attachments = attachments - setItems([...items, values]) + if (indexOrder === -1) { + values.attachments = attachments + setIndexOrder(items.length) + setItems([...items, values]) + addNewItem() + setIsEditMode(true) + } else { + if (values.attachments.length) { + values.attachments = [...values.attachments, ...attachments] + + } + const items_edit = [...items] + items_edit[indexOrder] = values + setItems(items_edit) + } } }) @@ -85,19 +106,8 @@ const Order: FC = () => {
- - {/* { readOnly={Number(formik.values.quantity) !== 0} {...formik.getFieldProps('quantity')} type='number' + error_text={formik.touched.quantity && formik.errors.quantity ? formik.errors.quantity : ''} + />
@@ -149,13 +162,22 @@ const Order: FC = () => {
diff --git a/src/pages/order/service/OrderService.ts b/src/pages/order/service/OrderService.ts index 21fc741..052d4f5 100644 --- a/src/pages/order/service/OrderService.ts +++ b/src/pages/order/service/OrderService.ts @@ -7,6 +7,6 @@ export const getProducts = async () => { }; export const submitOrder = async (params: OrderType[]) => { - const { data } = await axios.post(`/public/order`, params); + const { data } = await axios.post(`/public/order`, { items: params }); return data; }; diff --git a/src/pages/order/store/OrderStore.ts b/src/pages/order/store/OrderStore.ts index 972fcc4..d9236ac 100644 --- a/src/pages/order/store/OrderStore.ts +++ b/src/pages/order/store/OrderStore.ts @@ -1,7 +1,7 @@ import { create } from "zustand"; import type { StoreType } from "../type/Types"; -export const useAuthStore = create((set) => ({ +export const useOrderStore = create((set) => ({ items: [], setItems(value) { set({ items: value }); diff --git a/src/pages/order/type/Types.ts b/src/pages/order/type/Types.ts index f0c1884..7de56ec 100644 --- a/src/pages/order/type/Types.ts +++ b/src/pages/order/type/Types.ts @@ -17,7 +17,7 @@ export type AttachmentsType = { }; export type OrderType = { - productId: number; + productId?: number; quantity?: number; attributes: { attributeId: number;