fix: discount on variant

This commit is contained in:
hamid zarghami
2025-10-29 15:09:54 +03:30
parent c2b9bceb55
commit 720f75df88
2 changed files with 27 additions and 17 deletions
+25 -15
View File
@@ -14,7 +14,7 @@ import type { FieldInputProps } from 'formik'
import * as Yup from 'yup'
interface FormikFieldProps {
field: FieldInputProps<string | number>
field: FieldInputProps<string | number | undefined>
form: { values: { discount_type: string } }
}
@@ -58,20 +58,26 @@ const UpdateVariant: FC<UpdateVariantProps> = ({ 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<UpdateVariantProps> = ({ 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<HTMLInputElement>) => setFieldValue('discount_value', e.target.value)}
value={field.value !== undefined && field.value !== null ? String(field.value) : ''}
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
const value = e.target.value
const numValue = value === '' ? undefined : Number(value)
setFieldValue('discount_value', isNaN(numValue as number) ? undefined : numValue)
}}
/>
)}
</Field>
+2 -2
View File
@@ -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;
};
};