diff --git a/src/components/shared/ImageWithFallback.module.css b/src/components/shared/ImageWithFallback.module.css index ccae8b8..8e9d5c0 100644 --- a/src/components/shared/ImageWithFallback.module.css +++ b/src/components/shared/ImageWithFallback.module.css @@ -7,6 +7,10 @@ display: flex; justify-content: center; align-items: center; + touch-action: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; } .image { @@ -14,6 +18,8 @@ height: 100%; object-fit: cover; transition: opacity 0.3s ease; + pointer-events: none; + touch-action: none; } .hidden { diff --git a/src/components/shared/ImageWithFallback.tsx b/src/components/shared/ImageWithFallback.tsx index 6ec746b..dc8fc2b 100644 --- a/src/components/shared/ImageWithFallback.tsx +++ b/src/components/shared/ImageWithFallback.tsx @@ -8,6 +8,7 @@ interface ImageWithFallbackProps { onClick?: () => void; onContextMenu?: (e: React.MouseEvent) => void; maxRetries?: number; + isDeleteMode?: boolean; } const ImageWithFallback: React.FC = ({ @@ -16,7 +17,8 @@ const ImageWithFallback: React.FC = ({ className = '', onClick, onContextMenu, - maxRetries = 2 // По умолчанию 2 попытки автоматической перезагрузки + maxRetries = 2, // По умолчанию 2 попытки автоматической перезагрузки + isDeleteMode = false }) => { const [loading, setLoading] = useState(true); const [error, setError] = useState(false); @@ -112,6 +114,12 @@ const ImageWithFallback: React.FC = ({ className={`${styles.container} ${className}`} onClick={handleClick} onContextMenu={onContextMenu} + onTouchStart={(e) => { + // Предотвращаем стандартное поведение только если не в режиме удаления + if (!isDeleteMode && onContextMenu) { + e.preventDefault(); + } + }} > {/* Показываем индикатор загрузки, если изображение загружается */} {loading && ( @@ -125,6 +133,7 @@ const ImageWithFallback: React.FC = ({ ref={imgRef} src={imageSrc} alt={alt} + draggable="false" className={`${styles.image} ${error ? styles.hidden : ''}`} onLoad={handleLoad} onError={handleError} diff --git a/src/components/shared/NotificationModal.tsx b/src/components/shared/NotificationModal.tsx index 1923d1e..cda775c 100644 --- a/src/components/shared/NotificationModal.tsx +++ b/src/components/shared/NotificationModal.tsx @@ -12,6 +12,7 @@ interface NotificationModalProps { showGalleryButton?: boolean; // Параметр для управления видимостью кнопки "В галерею" showButtons?: boolean; // Новый параметр для управления видимостью всех кнопок continueButtonText?: string; // Новый параметр для изменения текста кнопки "Продолжить" + galleryButtonText?: string; // Новый параметр для изменения текста кнопки "В галерею" } const NotificationModal: React.FC = ({ @@ -24,7 +25,8 @@ const NotificationModal: React.FC = ({ onContinueClick, showGalleryButton = true, // По умолчанию кнопка "В галерею" видима showButtons = true, // По умолчанию все кнопки видимы - continueButtonText = 'Продолжить' // По умолчанию текст кнопки "Продолжить" + continueButtonText = 'Продолжить', // По умолчанию текст кнопки "Продолжить" + galleryButtonText = 'В галерею' // По умолчанию текст кнопки "В галерею" }) => { if (!isVisible) return null; @@ -53,7 +55,7 @@ const NotificationModal: React.FC = ({ className={`${styles.button} ${styles.secondaryButton}`} onClick={onGalleryClick} > - Отмена + {galleryButtonText} )}