This commit is contained in:
Samandar Turgunboyev
2025-11-05 15:43:19 +05:00
parent 889b82c8c1
commit 65a6c963f2
2 changed files with 48 additions and 38 deletions

View File

@@ -335,9 +335,9 @@ const StepOne = ({
value.amenities?.forEach((e, i) => { value.amenities?.forEach((e, i) => {
formData.append(`ticket_amenities[${i}]`, String(e)); formData.append(`ticket_amenities[${i}]`, String(e));
}); });
value.images.forEach((e) => { value.images.forEach((e, i) => {
if (e instanceof File) { if (e instanceof File) {
formData.append("ticket_images", e); formData.append(`ticket_images[${i}]`, e);
} }
}); });
value.amenities?.forEach((e, i) => { value.amenities?.forEach((e, i) => {
@@ -354,13 +354,17 @@ const StepOne = ({
} }
}); });
value.ticket_itinerary?.forEach((itinerary, i) => { value.ticket_itinerary?.forEach((itinerary, i) => {
itinerary.ticket_itinerary_image.forEach((img) => {
if (img.image instanceof File) {
formData.append(`ticket_itinerary[${i}]title`, itinerary.title);
formData.append(`ticket_itinerary[${i}]title_ru`, itinerary.title_ru);
formData.append(
`ticket_itinerary[${i}]duration`,
String(itinerary.duration),
);
}
});
// Har bir itinerary uchun asosiy maydonlar // Har bir itinerary uchun asosiy maydonlar
formData.append(`ticket_itinerary[${i}]title`, itinerary.title);
formData.append(`ticket_itinerary[${i}]title_ru`, itinerary.title_ru);
formData.append(
`ticket_itinerary[${i}]duration`,
String(itinerary.duration),
);
// 🖼 Rasmlar (faqat yangi yuklangan File-larni yuborish) // 🖼 Rasmlar (faqat yangi yuklangan File-larni yuborish)
if (Array.isArray(itinerary.ticket_itinerary_image)) { if (Array.isArray(itinerary.ticket_itinerary_image)) {
@@ -381,20 +385,23 @@ const StepOne = ({
} }
}); });
} }
itinerary.ticket_itinerary_image.forEach((img) => {
// 📍 Destinations (yonalishlar) if (Array.isArray(itinerary.ticket_itinerary_destinations)) {
if (Array.isArray(itinerary.ticket_itinerary_destinations)) { if (img.image instanceof File) {
itinerary.ticket_itinerary_destinations.forEach((dest, k) => { // 📍 Destinations (yonalishlar)
formData.append( itinerary.ticket_itinerary_destinations.forEach((dest, k) => {
`ticket_itinerary[${i}]ticket_itinerary_destinations[${k}]name`, formData.append(
dest.name, `ticket_itinerary[${i}]ticket_itinerary_destinations[${k}]name`,
); dest.name,
formData.append( );
`ticket_itinerary[${i}]ticket_itinerary_destinations[${k}]name_ru`, formData.append(
dest.name_ru, `ticket_itinerary[${i}]ticket_itinerary_destinations[${k}]name_ru`,
); dest.name_ru,
}); );
} });
}
}
});
}); });
value.hotel_meals.forEach((e, i) => { value.hotel_meals.forEach((e, i) => {

View File

@@ -33,13 +33,13 @@ export default function TicketsImagesModel({
useEffect(() => { useEffect(() => {
if (imageUrl) { if (imageUrl) {
if (Array.isArray(imageUrl)) { const urls = Array.isArray(imageUrl) ? imageUrl : [imageUrl];
setPreviews(imageUrl); setPreviews(urls);
} else {
setPreviews([imageUrl]); // 🔥 form bilan sinxronlash
} form.setValue(name, urls);
} }
}, [imageUrl]); }, [imageUrl, form, name]);
return ( return (
<FormField <FormField
@@ -62,20 +62,23 @@ export default function TicketsImagesModel({
const newFiles = e.target.files const newFiles = e.target.files
? Array.from(e.target.files) ? Array.from(e.target.files)
: []; : [];
const currentValue = form.getValues(name) || [];
const currentUrls = previews || [];
if (multiple) { if (multiple) {
// ✅ Bir nechta rasm // ✅ eski URLlarni va yangi fayllarni birlashtirish
const allFiles = [ const combined = [...currentValue, ...newFiles];
...(form.getValues(name) || []), form.setValue(name, combined);
...newFiles,
const newPreviews = [
...currentUrls,
...newFiles.map((file: File) =>
URL.createObjectURL(file),
),
]; ];
form.setValue(name, allFiles); setPreviews(newPreviews);
const urls = allFiles.map((file: File) =>
URL.createObjectURL(file),
);
setPreviews(urls);
} else { } else {
// ✅ Faqat bitta rasm (banner) // ✅ bitta rasm holati
const singleFile = newFiles[0] || null; const singleFile = newFiles[0] || null;
form.setValue(name, singleFile); form.setValue(name, singleFile);
setPreviews( setPreviews(