4.13.3: Исправлена обработка кнопки назад
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 2m2s
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 2m2s
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user