@@ -58,7 +58,7 @@ const MyRequests: FC = () => {
|
||||
<div className="space-y-1">
|
||||
{item.items.map((requestItem) => (
|
||||
<div key={requestItem.id}>
|
||||
{requestItem.product.title} {requestItem.quantity} عدد
|
||||
{requestItem.product.title}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
|
||||
@@ -49,10 +49,6 @@ const RequestDetail: FC = () => {
|
||||
<div className="text-xs text-desc">عنوان:</div>
|
||||
<div className="text-sm font-medium text-black">{item.product.title}</div>
|
||||
</div>
|
||||
<div className='flex items-center gap-2'>
|
||||
<div className="text-xs text-desc">تعداد:</div>
|
||||
<div className="text-sm font-medium text-black">{item.quantity}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import { useEffect, useMemo, 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'
|
||||
@@ -19,7 +17,6 @@ import { clx } from '@/helpers/utils'
|
||||
const emptyValues: RequestType = {
|
||||
productId: undefined,
|
||||
attachments: [],
|
||||
quantity: undefined,
|
||||
description: '',
|
||||
attributes: [],
|
||||
}
|
||||
@@ -37,7 +34,6 @@ const Request: FC<Props> = ({ editIndex, initialItem, onSaved, onCancelEdit }) =
|
||||
const { data } = useGetProducts()
|
||||
const { setItems, items } = useRequestStore()
|
||||
const [productSelected, setProductSelected] = useState<ProductType>()
|
||||
const [quantitySelect, setQuantitySelect] = useState<string>('')
|
||||
const [voiceFile, setVoiceFile] = useState<File>()
|
||||
const [files, setFiles] = useState<File[]>([])
|
||||
const singleUpload = useSingleUpload()
|
||||
@@ -48,7 +44,6 @@ const Request: FC<Props> = ({ editIndex, initialItem, onSaved, onCancelEdit }) =
|
||||
enableReinitialize: true,
|
||||
validationSchema: Yup.object({
|
||||
productId: Yup.string().required('این فیلد اجباری می باشد'),
|
||||
quantity: Yup.number().required('این فیلد اجباری می باشد'),
|
||||
}),
|
||||
onSubmit: async (values) => {
|
||||
const attachments: AttachmentsType[] = [...(values.attachments ?? [])]
|
||||
@@ -97,11 +92,7 @@ const Request: FC<Props> = ({ editIndex, initialItem, onSaved, onCancelEdit }) =
|
||||
const resolvedProduct = useMemo(() => {
|
||||
if (productSelected) return productSelected
|
||||
if (!activeProductId || !data?.data) return undefined
|
||||
const product = data.data.find((p) => p.id === activeProductId)
|
||||
if (!product) return undefined
|
||||
const quantities = [...product.quantities]
|
||||
if (quantities[0] !== 0) quantities.unshift(0)
|
||||
return { ...product, quantities }
|
||||
return data.data.find((p) => p.id === activeProductId)
|
||||
}, [productSelected, activeProductId, data])
|
||||
|
||||
const { data: attributes } = useGetAttributes(resolvedProduct?.id)
|
||||
@@ -112,17 +103,7 @@ const Request: FC<Props> = ({ editIndex, initialItem, onSaved, onCancelEdit }) =
|
||||
const product = data.data.find((p) => p.id === initialItem.productId)
|
||||
if (!product) return
|
||||
|
||||
const quantities = [...product.quantities]
|
||||
if (quantities[0] !== 0) quantities.unshift(0)
|
||||
|
||||
setProductSelected({ ...product, quantities })
|
||||
|
||||
const qty = initialItem.quantity
|
||||
if (qty !== undefined && quantities.includes(qty)) {
|
||||
setQuantitySelect(String(qty))
|
||||
} else {
|
||||
setQuantitySelect('0')
|
||||
}
|
||||
setProductSelected(product)
|
||||
}, [initialItem, data])
|
||||
|
||||
const handleProductChange = (e: ChangeEvent<HTMLSelectElement>) => {
|
||||
@@ -130,12 +111,9 @@ const Request: FC<Props> = ({ editIndex, initialItem, onSaved, onCancelEdit }) =
|
||||
const product = data?.data?.find((o) => o.id === productId)
|
||||
|
||||
if (product) {
|
||||
const quantities = [...product.quantities]
|
||||
if (quantities[0] !== 0) quantities.unshift(0)
|
||||
setProductSelected({ ...product, quantities })
|
||||
setProductSelected(product)
|
||||
formik.setFieldValue('productId', productId)
|
||||
formik.setFieldValue('attributes', [])
|
||||
setQuantitySelect('')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,46 +157,6 @@ const Request: FC<Props> = ({ editIndex, initialItem, onSaved, onCancelEdit }) =
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className='mt-6 rowTwoInput'>
|
||||
<Select
|
||||
items={
|
||||
resolvedProduct?.quantities?.map((item) => ({
|
||||
label: item === 0 ? 'انتخاب دلخواه' : String(item),
|
||||
value: String(item),
|
||||
})) ?? []
|
||||
}
|
||||
label='تعداد'
|
||||
placeholder='انتخاب'
|
||||
value={quantitySelect}
|
||||
onChange={(e) => {
|
||||
const value = e.target.value
|
||||
setQuantitySelect(value)
|
||||
if (value !== '0') {
|
||||
formik.setFieldValue('quantity', Number(value))
|
||||
}
|
||||
}}
|
||||
onBlur={formik.handleBlur}
|
||||
name='quantity'
|
||||
error_text={
|
||||
formik.touched.quantity && formik.errors.quantity
|
||||
? formik.errors.quantity
|
||||
: ''
|
||||
}
|
||||
/>
|
||||
|
||||
<Input
|
||||
label='تعداد دلخواه'
|
||||
readOnly={quantitySelect !== '0'}
|
||||
{...formik.getFieldProps('quantity')}
|
||||
type='number'
|
||||
error_text={
|
||||
formik.touched.quantity && formik.errors.quantity
|
||||
? formik.errors.quantity
|
||||
: ''
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className='mt-6'>
|
||||
<VoiceRecorder
|
||||
value={formik.values.description ?? ''}
|
||||
|
||||
@@ -58,14 +58,11 @@ const RequestItemsList: FC<Props> = ({
|
||||
<div className='text-sm font-medium truncate'>
|
||||
{getProductTitle(item.productId)}
|
||||
</div>
|
||||
<div className='text-description text-xs mt-1'>
|
||||
تعداد: {item.quantity}
|
||||
{item.attachments.length > 0 && (
|
||||
<span className='mr-2'>
|
||||
· {item.attachments.length} پیوست
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
{item.attachments.length > 0 && (
|
||||
<div className='text-description text-xs mt-1'>
|
||||
{item.attachments.length} پیوست
|
||||
</div>
|
||||
)}
|
||||
<div className='flex gap-2 mt-3'>
|
||||
<button
|
||||
type='button'
|
||||
|
||||
@@ -19,7 +19,6 @@ export type AttachmentsType = {
|
||||
|
||||
export type RequestType = {
|
||||
productId?: string;
|
||||
quantity?: number;
|
||||
attributes: {
|
||||
fieldId: string;
|
||||
value: string | number;
|
||||
@@ -89,7 +88,6 @@ export interface MyRequestType extends RowDataType {
|
||||
}[];
|
||||
description: string;
|
||||
product: ProductType;
|
||||
quantity: number;
|
||||
subTotal: number;
|
||||
total: number;
|
||||
unitPrice: number;
|
||||
@@ -161,7 +159,6 @@ export type RequestDetailItemType = {
|
||||
product: RequestDetailProductType;
|
||||
attributes: RequestDetailItemAttributeType[];
|
||||
request: string;
|
||||
quantity: number;
|
||||
description: string;
|
||||
attachments: AttachmentsType[];
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user