4.13.3: Исправлена обработка кнопки назад
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 2m2s

This commit is contained in:
poignatov
2026-02-04 14:09:48 +03:00
parent a169da9387
commit 43df4d76ce
5 changed files with 142 additions and 3 deletions

View File

@@ -72,6 +72,50 @@ function TaskList({ onNavigate, data, loading, backgroundLoading, error, onRetry
setSelectedTaskForDetail(null)
}
// Добавляем запись в историю при открытии модального окна и обрабатываем "назад"
const historyPushedRef = useRef(false)
const selectedTaskForDetailRef = useRef(selectedTaskForDetail)
// Обновляем ref при изменении значения
useEffect(() => {
selectedTaskForDetailRef.current = selectedTaskForDetail
}, [selectedTaskForDetail])
useEffect(() => {
if (selectedTaskForDetail && !historyPushedRef.current) {
// Добавляем запись в историю при открытии модального окна
window.history.pushState({ modalOpen: true, type: 'task-detail' }, '', window.location.href)
historyPushedRef.current = true
} else if (!selectedTaskForDetail) {
historyPushedRef.current = false
}
if (!selectedTaskForDetail) return
const handlePopState = (event) => {
// Проверяем наличие модального окна в DOM
const taskDetailModal = document.querySelector('.task-detail-modal-overlay')
// Используем ref для получения актуального состояния
const currentTaskDetail = selectedTaskForDetailRef.current
// Проверяем, открыто ли модальное окно (по состоянию или в DOM)
if (currentTaskDetail || taskDetailModal) {
// Закрываем модальное окно
setSelectedTaskForDetail(null)
historyPushedRef.current = false
// Предотвращаем дальнейшую обработку в App.jsx
// Следующее нажатие "назад" обработается App.jsx нормально
return
}
}
window.addEventListener('popstate', handlePopState)
return () => {
window.removeEventListener('popstate', handlePopState)
}
}, [selectedTaskForDetail])
// Функция для вычисления следующей даты по repetition_date