fix: improve file_ids handling in VariantManager and ProductFormPage
This commit is contained in:
parent
a228605ba0
commit
b97f72aeae
|
|
@ -1,4 +1,4 @@
|
|||
import React, { useState } from 'react';
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { Plus, Trash2, Edit3, Package, X, Edit, Image as ImageIcon } from 'lucide-react';
|
||||
import { ProductVariantFormData, ProductImage } from '../../pages/products/core/_models';
|
||||
import { Button } from './Button';
|
||||
|
|
@ -44,7 +44,11 @@ const VariantForm: React.FC<VariantFormProps> = ({ variant, onSave, onCancel, is
|
|||
}
|
||||
);
|
||||
|
||||
const [uploadedImages, setUploadedImages] = useState<ProductImage[]>(variant?.file_ids || []);
|
||||
const [uploadedImages, setUploadedImages] = useState<ProductImage[]>(
|
||||
Array.isArray(variant?.file_ids) && variant.file_ids.length > 0 && typeof variant.file_ids[0] === 'object'
|
||||
? variant.file_ids
|
||||
: []
|
||||
);
|
||||
const [attributes, setAttributes] = useState<Record<string, any>>(variant?.attributes || {});
|
||||
const [meta, setMeta] = useState<Record<string, any>>(variant?.meta || {});
|
||||
const [newAttributeKey, setNewAttributeKey] = useState('');
|
||||
|
|
@ -55,6 +59,11 @@ const VariantForm: React.FC<VariantFormProps> = ({ variant, onSave, onCancel, is
|
|||
const { mutateAsync: uploadFile } = useFileUpload();
|
||||
const { mutate: deleteFile } = useFileDelete();
|
||||
|
||||
// Sync formData.file_ids with uploadedImages
|
||||
useEffect(() => {
|
||||
setFormData(prev => ({ ...prev, file_ids: uploadedImages }));
|
||||
}, [uploadedImages]);
|
||||
|
||||
const handleInputChange = (field: keyof ProductVariantFormData, value: any) => {
|
||||
if (typeof value === 'string') {
|
||||
value = persianToEnglish(value);
|
||||
|
|
@ -125,11 +134,13 @@ const VariantForm: React.FC<VariantFormProps> = ({ variant, onSave, onCancel, is
|
|||
};
|
||||
|
||||
const handleSave = () => {
|
||||
const fileIds = uploadedImages.map(img => Number(img.id)).filter(id => !isNaN(id));
|
||||
|
||||
const convertedData = convertPersianNumbersInObject({
|
||||
...formData,
|
||||
attributes,
|
||||
meta,
|
||||
file_ids: uploadedImages
|
||||
file_ids: fileIds
|
||||
});
|
||||
|
||||
onSave(convertedData);
|
||||
|
|
|
|||
|
|
@ -223,7 +223,7 @@ const ProductFormPage = () => {
|
|||
stock_number: variant.stock_number,
|
||||
weight: variant.weight,
|
||||
product_option_id: variant.product_option_id || null,
|
||||
file_ids: (variant.file_ids || []).map((img: any) => Number(img.id)).filter((id: number) => !isNaN(id)),
|
||||
file_ids: Array.isArray(variant.file_ids) ? variant.file_ids.filter((id: any) => typeof id === 'number' && !isNaN(id)) : [],
|
||||
attributes: variant.attributes && Object.keys(variant.attributes).length > 0 ? variant.attributes : {},
|
||||
meta: variant.meta && Object.keys(variant.meta).length > 0 ? variant.meta : {}
|
||||
})) || [];
|
||||
|
|
@ -248,7 +248,7 @@ const ProductFormPage = () => {
|
|||
stock_number: variant.stock_number,
|
||||
weight: variant.weight,
|
||||
product_option_id: variant.product_option_id || null,
|
||||
file_ids: (variant.file_ids || []).map((img: any) => Number(img.id)).filter((id: number) => !isNaN(id)),
|
||||
file_ids: Array.isArray(variant.file_ids) ? variant.file_ids.filter((id: any) => typeof id === 'number' && !isNaN(id)) : [],
|
||||
attributes: variant.attributes && Object.keys(variant.attributes).length > 0 ? variant.attributes : {},
|
||||
meta: variant.meta && Object.keys(variant.meta).length > 0 ? variant.meta : {}
|
||||
})) || [];
|
||||
|
|
|
|||
Loading…
Reference in New Issue