Унификация отображения ошибок: LoadingError для загрузки, Toast для действий
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 34s
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 34s
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
import React, { useState, useEffect, useMemo, useRef } from 'react'
|
||||
import { useAuth } from './auth/AuthContext'
|
||||
import TaskDetail from './TaskDetail'
|
||||
import LoadingError from './LoadingError'
|
||||
import Toast from './Toast'
|
||||
import './TaskList.css'
|
||||
|
||||
const API_URL = '/api/tasks'
|
||||
|
||||
function TaskList({ onNavigate, data, loading, backgroundLoading, onRefresh }) {
|
||||
function TaskList({ onNavigate, data, loading, backgroundLoading, error, onRetry, onRefresh }) {
|
||||
const { authFetch } = useAuth()
|
||||
// Инициализируем tasks из data, если data есть, иначе пустой массив
|
||||
const [tasks, setTasks] = useState(() => data && Array.isArray(data) ? data : [])
|
||||
@@ -351,7 +352,7 @@ function TaskList({ onNavigate, data, loading, backgroundLoading, onRefresh }) {
|
||||
setPostponeDate('')
|
||||
} catch (err) {
|
||||
console.error('Error postponing task:', err)
|
||||
alert(err.message || 'Ошибка при переносе задачи')
|
||||
setToast({ message: err.message || 'Ошибка при переносе задачи', type: 'error' })
|
||||
} finally {
|
||||
setIsPostponing(false)
|
||||
}
|
||||
@@ -632,6 +633,15 @@ function TaskList({ onNavigate, data, loading, backgroundLoading, onRefresh }) {
|
||||
const hasDataInState = tasks && Array.isArray(tasks) && tasks.length > 0
|
||||
const hasData = hasDataInProps || hasDataInState
|
||||
|
||||
// Показываем ошибку загрузки, если есть ошибка и нет данных
|
||||
if (error && !hasData && !loading) {
|
||||
return (
|
||||
<div className="task-list">
|
||||
<LoadingError onRetry={onRetry} />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
// Показываем загрузку только если:
|
||||
// 1. Идет загрузка (loading = true)
|
||||
// 2. Это не фоновая загрузка (backgroundLoading = false)
|
||||
@@ -657,6 +667,7 @@ function TaskList({ onNavigate, data, loading, backgroundLoading, onRefresh }) {
|
||||
{toast && (
|
||||
<Toast
|
||||
message={toast.message}
|
||||
type={toast.type || 'success'}
|
||||
onClose={() => setToast(null)}
|
||||
/>
|
||||
)}
|
||||
@@ -721,7 +732,7 @@ function TaskList({ onNavigate, data, loading, backgroundLoading, onRefresh }) {
|
||||
taskId={selectedTaskForDetail}
|
||||
onClose={handleCloseDetail}
|
||||
onRefresh={onRefresh}
|
||||
onTaskCompleted={() => setToast({ message: 'Задача выполнена' })}
|
||||
onTaskCompleted={() => setToast({ message: 'Задача выполнена', type: 'success' })}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user