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