fix: discount on variant
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user