Унификация отображения ошибок: 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,5 +1,6 @@
|
||||
import React, { useState, useEffect, useRef } from 'react'
|
||||
import { useAuth } from './auth/AuthContext'
|
||||
import Toast from './Toast'
|
||||
import './TaskForm.css'
|
||||
|
||||
const API_URL = '/api/tasks'
|
||||
@@ -17,7 +18,8 @@ function TaskForm({ onNavigate, taskId }) {
|
||||
const [subtasks, setSubtasks] = useState([])
|
||||
const [projects, setProjects] = useState([])
|
||||
const [loading, setLoading] = useState(false)
|
||||
const [error, setError] = useState('')
|
||||
const [error, setError] = useState('') // Только для валидации
|
||||
const [toastMessage, setToastMessage] = useState(null)
|
||||
const [loadingTask, setLoadingTask] = useState(false)
|
||||
const [isDeleting, setIsDeleting] = useState(false)
|
||||
const debounceTimer = useRef(null)
|
||||
@@ -534,7 +536,7 @@ function TaskForm({ onNavigate, taskId }) {
|
||||
// Возвращаемся к списку задач
|
||||
onNavigate?.('tasks')
|
||||
} catch (err) {
|
||||
setError(err.message)
|
||||
setToastMessage({ text: err.message || 'Ошибка при сохранении задачи', type: 'error' })
|
||||
console.error('Error saving task:', err)
|
||||
} finally {
|
||||
setLoading(false)
|
||||
@@ -567,7 +569,7 @@ function TaskForm({ onNavigate, taskId }) {
|
||||
onNavigate?.('tasks')
|
||||
} catch (err) {
|
||||
console.error('Error deleting task:', err)
|
||||
setError('Ошибка при удалении задачи')
|
||||
setToastMessage({ text: err.message || 'Ошибка при удалении задачи', type: 'error' })
|
||||
setIsDeleting(false)
|
||||
}
|
||||
}
|
||||
@@ -864,7 +866,10 @@ function TaskForm({ onNavigate, taskId }) {
|
||||
))}
|
||||
</div>
|
||||
|
||||
{error && <div className="error-message">{error}</div>}
|
||||
{/* Показываем ошибку валидации только если это ошибка валидации, не ошибка действия */}
|
||||
{error && (error.includes('обязательно') || error.includes('должны быть заполнены') || error.includes('нельзя одновременно')) && (
|
||||
<div className="error-message">{error}</div>
|
||||
)}
|
||||
|
||||
<div className="form-actions">
|
||||
<button type="submit" disabled={loading || isDeleting} className="submit-button">
|
||||
@@ -893,6 +898,13 @@ function TaskForm({ onNavigate, taskId }) {
|
||||
)}
|
||||
</div>
|
||||
</form>
|
||||
{toastMessage && (
|
||||
<Toast
|
||||
message={toastMessage.text}
|
||||
type={toastMessage.type}
|
||||
onClose={() => setToastMessage(null)}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user