e.dataTransfer.setData('text/plain', index.toString())}
- onDragOver={(e) => e.preventDefault()}
- onDrop={(e) => {
- e.preventDefault();
- const dragIndex = parseInt(e.dataTransfer.getData('text/plain'));
- onReorder(dragIndex, index);
- }}
- >
-

-
-
-
-
-
-
+
+ {images.map((image, index) => (
+
e.dataTransfer.setData('text/plain', index.toString())}
+ onDragOver={(e) => e.preventDefault()}
+ onDrop={(e) => {
+ e.preventDefault();
+ const dragIndex = parseInt(e.dataTransfer.getData('text/plain'));
+ onReorder(dragIndex, index);
+ }}
+ >
+

+
+
+
+
+
+
+
+
+
+
+ {image.caption}
-
-
- {image.caption}
-
-
- ))}
-
+ ))}
+
);
}
\ No newline at end of file
diff --git a/src/components/GalleryManager/GalleryModal.tsx b/src/components/GalleryManager/GalleryModal.tsx
new file mode 100644
index 0000000..a14af61
--- /dev/null
+++ b/src/components/GalleryManager/GalleryModal.tsx
@@ -0,0 +1,72 @@
+import { useState, useEffect } from 'react';
+import { X } from 'lucide-react';
+import { GalleryManager } from './index';
+import { useGallery } from '../../hooks/useGallery';
+import { GalleryImage } from '../../types';
+
+interface GalleryModalProps {
+ articleId: string | null;
+ onClose: () => void;
+}
+
+export function GalleryModal({ articleId, onClose }: GalleryModalProps) {
+ const { images: modalGalleryImages, loading: modalGalleryLoading, error: modalGalleryError, addImage: addGalleryImage, updateImage: updateGalleryImage, deleteImage: deleteGalleryImage, reorderImages: reorderGalleryImages } = useGallery(articleId || '');
+ const [modalDisplayedImages, setModalDisplayedImages] = useState
([]);
+ const [newImageUrl, setNewImageUrl] = useState('');
+
+ useEffect(() => {
+ if (articleId) {
+ setModalDisplayedImages(modalGalleryImages);
+ } else {
+ setModalDisplayedImages([]);
+ }
+ }, [articleId, modalGalleryImages]);
+
+ if (!articleId) return null;
+
+ return (
+
+
+
+
Управление галереей
+
+
+ {modalGalleryLoading ? (
+
+ ) : modalGalleryError ? (
+
Ошибка загрузки галереи: {modalGalleryError}
+ ) : (
+
{
+ console.log('Добавляем изображение в модальном окне:', imageData);
+ const newImage = await addGalleryImage(imageData);
+ setNewImageUrl('');
+ setModalDisplayedImages(prev => [...prev, newImage]);
+ }}
+ onReorder={(images) => {
+ console.log('Переупорядочиваем изображения в модальном окне:', images);
+ reorderGalleryImages(images.map(img => img.id));
+ setModalDisplayedImages(images);
+ }}
+ onDelete={(id) => {
+ console.log('Удаляем изображение в модальном окне:', id);
+ deleteGalleryImage(id);
+ setModalDisplayedImages(prev => prev.filter(img => img.id !== id));
+ }}
+ onEdit={(image) => {
+ console.log('Редактируем изображение в модальном окне:', image);
+ updateGalleryImage(image.id, { alt: image.alt }).catch(err => {
+ console.error('Ошибка при редактировании изображения в модальном окне:', err);
+ });
+ }}
+ />
+ )}
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/components/GalleryManager/index.tsx b/src/components/GalleryManager/index.tsx
index c30cfbb..dfb9d13 100644
--- a/src/components/GalleryManager/index.tsx
+++ b/src/components/GalleryManager/index.tsx
@@ -3,12 +3,10 @@ import { GalleryImage } from '../../types';
import { GalleryGrid } from './GalleryGrid';
import { ImageForm } from './ImageForm';
-
interface GalleryManagerProps {
images: GalleryImage[];
-// setImages: (images: GalleryImage[]) => void; // Добавляем setter для изображений
imageUrl: string;
- setImageUrl: (url: string) => void; // Добавил setImageUrl для обновления
+ setImageUrl: (url: string) => void;
onAddImage: (imageData: Omit) => void;
onReorder: (images: GalleryImage[]) => void;
onDelete: (id: string) => void;
@@ -16,18 +14,29 @@ interface GalleryManagerProps {
}
export function GalleryManager({
- images,
- //setImages,
- imageUrl,
- setImageUrl,
- onAddImage,
- onReorder,
- onDelete,
- onEdit
- }: GalleryManagerProps) {
+ images,
+ imageUrl,
+ setImageUrl,
+ onAddImage,
+ onReorder,
+ onDelete,
+ onEdit,
+ }: GalleryManagerProps) {
const [newImageUrl, setNewImageUrl] = useState('');
const [newImageCaption, setNewImageCaption] = useState('');
const [newImageAlt, setNewImageAlt] = useState('');
+ const [showEditModal, setShowEditModal] = useState(null);
+ const [editAltText, setEditAltText] = useState('');
+
+ // Отладка передачи images в GalleryGrid
+ useEffect(() => {
+ console.log('Images, переданные в GalleryGrid:', images);
+ }, [images]);
+
+ // Отладка изменения состояния showEditModal
+ useEffect(() => {
+ console.log('Текущее значение showEditModal:', showEditModal);
+ }, [showEditModal]);
// Следим за изменением imageUrl и обновляем newImageUrl
useEffect(() => {
@@ -43,17 +52,34 @@ export function GalleryManager({
url: newImageUrl,
caption: newImageCaption,
alt: newImageAlt || newImageCaption,
- width: 800, // Примерное значение, можно заменить на динамическое
+ width: 800, // Примерное значение, можно заменить на динамическое
height: 600,
- size: 100000, // Примерное значение
+ size: 100000, // Примерное значение
format: 'webp', // Формат по умолчанию
};
+ console.log('Добавляем новое изображение:', newImage);
onAddImage(newImage); // Вызываем функцию добавления
setNewImageUrl('');
setNewImageCaption('');
setNewImageAlt('');
- setImageUrl(''); // Очищаем после добавления
+ setImageUrl(''); // Очищаем после добавления
+ };
+
+ const handleEditClick = (image: GalleryImage) => {
+ console.log('Открываем модальное окно редактирования для изображения:', image);
+ console.log('ID изображения:', image.id);
+ setShowEditModal(image.id);
+ setEditAltText(image.alt || '');
+ console.log('Новое значение showEditModal:', image.id);
+ };
+
+ const handleEditSubmit = (image: GalleryImage) => {
+ const updatedImage = { ...image, alt: editAltText };
+ console.log('Сохраняем изменения для изображения:', updatedImage);
+ onEdit(updatedImage);
+ setShowEditModal(null);
+ setEditAltText('');
};
return (
@@ -76,17 +102,59 @@ export function GalleryManager({
Изображения галереи
onEdit(img)}
- onDelete={(id) => onDelete(id)}
+ onEdit={(img) => {
+ console.log('Вызываем onEdit из GalleryGrid:', img);
+ handleEditClick(img);
+ }}
+ onDelete={(id) => {
+ console.log('Вызываем onDelete из GalleryGrid:', id);
+ onDelete(id);
+ }}
onReorder={(dragIndex, dropIndex) => {
+ console.log('Переупорядочиваем изображения: dragIndex=', dragIndex, 'dropIndex=', dropIndex);
const reorderedImages = [...images];
const [draggedImage] = reorderedImages.splice(dragIndex, 1);
reorderedImages.splice(dropIndex, 0, draggedImage);
onReorder(reorderedImages);
- // setImages(reorderedImages); // Обновляем состояние изображений
}}
/>
+
+ {/* Модальное окно редактирования */}
+ {showEditModal && (
+ console.log('Рендерим модальное окно с showEditModal:', showEditModal),
+