diff --git a/src/pages/products/components/UpdateVariant.tsx b/src/pages/products/components/UpdateVariant.tsx index 1e94ffa..fe5d9f4 100644 --- a/src/pages/products/components/UpdateVariant.tsx +++ b/src/pages/products/components/UpdateVariant.tsx @@ -14,7 +14,7 @@ import type { FieldInputProps } from 'formik' import * as Yup from 'yup' interface FormikFieldProps { - field: FieldInputProps + field: FieldInputProps form: { values: { discount_type: string } } } @@ -58,20 +58,26 @@ const UpdateVariant: FC = ({ variant, onUpdate }) => { specialSale_endDate: Yup.string() }) - const initialValues = useMemo(() => ({ - retailPrice: variantData?.results?.productVariant?.price?.retailPrice?.toString() || '', - order_limit: variantData?.results?.productVariant?.price?.order_limit?.toString() || '', - sellerSpecialCode: variantData?.results?.productVariant?.sellerSpecialCode, - stock: variantData?.results?.productVariant?.stock?.toString() || '', - discount_type: '', - discount_value: variantData?.results?.productVariant?.price?.discount_percent?.toString() || '', - specialSale_order_limit: variantData?.results?.productVariant?.price?.specialSale_order_limit?.toString() || '', - specialSale_quantity: variantData?.results?.productVariant?.price?.specialSale_quantity?.toString() || '', - specialSale_endDate: variantData?.results?.productVariant?.price?.specialSale_endDate || '' - }), [variantData]) + const initialValues = useMemo(() => { + const discountPercent = variantData?.results?.productVariant?.price?.discount_percent + const hasDiscount = discountPercent !== undefined && discountPercent !== null && Number(discountPercent) > 0 + return { + retailPrice: variantData?.results?.productVariant?.price?.retailPrice?.toString() || '', + order_limit: variantData?.results?.productVariant?.price?.order_limit?.toString() || '', + sellerSpecialCode: variantData?.results?.productVariant?.sellerSpecialCode, + stock: variantData?.results?.productVariant?.stock?.toString() || '', + discount_type: hasDiscount ? 'percent' : '', + discount_value: hasDiscount ? Number(discountPercent) : undefined, + specialSale_order_limit: variantData?.results?.productVariant?.price?.specialSale_order_limit?.toString() || '', + specialSale_quantity: variantData?.results?.productVariant?.price?.specialSale_quantity?.toString() || '', + specialSale_endDate: variantData?.results?.productVariant?.price?.specialSale_endDate || '' + } + }, [variantData]) const handleSubmit = (values: typeof initialValues) => { - const discountValue = parseFloat(values.discount_value as string) || 0 + const discountValue = typeof values.discount_value === 'number' + ? values.discount_value + : (values.discount_value ? parseFloat(values.discount_value as string) || 0 : 0) const baseData = { productId: id!, @@ -243,8 +249,12 @@ const UpdateVariant: FC = ({ variant, onUpdate }) => { label={form.values.discount_type === 'percent' ? 'درصد تخفیف (%)' : 'مقدار تخفیف (تومان)'} placeholder={form.values.discount_type === 'percent' ? 'مثال: 10' : 'مثال: 50000'} type="number" - value={field.value} - onChange={(e: React.ChangeEvent) => setFieldValue('discount_value', e.target.value)} + value={field.value !== undefined && field.value !== null ? String(field.value) : ''} + onChange={(e: React.ChangeEvent) => { + const value = e.target.value + const numValue = value === '' ? undefined : Number(value) + setFieldValue('discount_value', isNaN(numValue as number) ? undefined : numValue) + }} /> )} diff --git a/src/pages/products/types/Types.ts b/src/pages/products/types/Types.ts index d559929..7f4619f 100644 --- a/src/pages/products/types/Types.ts +++ b/src/pages/products/types/Types.ts @@ -241,6 +241,7 @@ export type ProductVariantDetailType = { product_status: string; isFreeShip: boolean; isWholeSale: boolean; + saleFormat: SaleFormatType; size?: SizeType; color?: ColorType; meterage?: MeterageType; @@ -250,8 +251,7 @@ export type GetProductVariantsResponseType = { status: number; success: boolean; results: { - count: number; - productVariants: ProductVariantDetailType[]; + productVariant: ProductVariantDetailType; }; };