import { useState, type ChangeEvent, type FC } from 'react' import Button from '@/components/Button' import Input from '@/components/Input' import Select from '@/components/Select' import UploadBox from '@/components/UploadBox' import VoiceRecorder from '@/components/VoiceRecorder' import { COLORS } from '@/constants/colors' import { AddSquare, Edit } from 'iconsax-react' import { useFormik } from 'formik' import * as Yup from 'yup' import type { AttachmentsType, CreateOrderType } from '../types/Types' import { useGetAttributes, useGetProducts } from '../hooks/useOrderData' import ManageAttribute from './ManageAttribute' import { useMultiUpload, useSingleUpload } from '@/pages/uploader/hooks/useUploader' import { useOrderStore } from '../store/OrderStore' import { clx } from '@/helpers/utils' import ProductsSelect from './ProductsSelect' import type { ProductType } from '@/pages/product/types/Types' type Props = { addNewItem: () => void, } const Order: FC = ({ addNewItem }) => { const { data } = useGetProducts() 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([]) const { data: attributes } = useGetAttributes(productSelected?.id) const singleUpload = useSingleUpload() const multiUpload = useMultiUpload() const formik = useFormik({ initialValues: { productId: undefined, attachments: [], quantity: undefined, description: '', attributes: [], discount: undefined, unitPrice: undefined, }, validationSchema: Yup.object({ productId: Yup.number().required('این فیلد اجباری می باشد'), quantity: Yup.number().required('این فیلد اجباری می باشد'), unitPrice: Yup.number().required('این فیلد اجباری می باشد'), }), onSubmit: async (values) => { const attachments: AttachmentsType[] = [] if (files.length) { await multiUpload.mutateAsync(files, { onSuccess: (data) => { data?.data?.map((item) => { attachments.push({ type: 'uploads_attach', url: item.url }) }) } }) } if (voiceFile) { await singleUpload.mutateAsync(voiceFile, { onSuccess: (data) => { attachments.push({ type: 'voice', url: data?.data?.url }) } }) } 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) } } }) const handleChange = (e: ChangeEvent) => { const productId = e.target.value const product = data?.data?.find(o => Number(o.id) === Number(productId)) if (product) { if (product.quantities[0] !== 0) { product.quantities.unshift(0) } setProductSelected(product) formik.setFieldValue('productId', productId) } } return (
اطلاعات سفارش
formik.setFieldValue('description', value)} label='پیام صوتی' onRecordingComplete={(blob) => { const file = new File([blob], "recording.wav", { type: blob.type }); setVoiceFile(file); }} />
) } export default Order