import React, { useEffect, useState } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { Task } from '../../entities/Task'; import { Project } from '../../entities/Project'; import TaskModal from './TaskModal'; import { fetchTaskByUid, fetchTaskById, updateTask, deleteTask, } from '../../utils/tasksService'; import { createProject } from '../../utils/projectsService'; import { useStore } from '../../store/useStore'; const TaskView: React.FC = () => { const { uid } = useParams<{ uid: string }>(); const navigate = useNavigate(); const store = useStore(); const [task, setTask] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [isSubtaskRedirect, setIsSubtaskRedirect] = useState(false); useEffect(() => { const fetchTask = async () => { if (!uid) { setError('No task UID provided'); setLoading(false); return; } try { const taskData = await fetchTaskByUid(uid); // Check if this is a subtask and redirect to parent if so if (taskData.parent_task_id) { setIsSubtaskRedirect(true); try { const parentTask = await fetchTaskById( taskData.parent_task_id ); setTask(parentTask); } catch (parentError) { // If parent task fetch fails, fall back to showing the subtask console.error( 'Error fetching parent task:', parentError ); setTask(taskData); setIsSubtaskRedirect(false); } } else { setTask(taskData); } } catch { setError('An error occurred while fetching the task'); } finally { setLoading(false); } }; fetchTask(); }, [uid]); const handleClose = () => { navigate(-1); // Go back to previous page }; const handleTaskUpdate = async (updatedTask: Task) => { try { if (task?.id) { const updated = await updateTask(task.id, updatedTask); setTask(updated); } } catch (error) { console.error('Error updating task:', error); } }; const handleTaskDelete = async (taskId: number) => { try { await deleteTask(taskId); navigate('/today'); // Navigate back to today view after deletion } catch (error) { console.error('Error deleting task:', error); throw error; } }; const handleCreateProject = async (name: string): Promise => { try { return await createProject({ name }); } catch (error) { console.error('Error creating project:', error); throw error; } }; if (loading) { return (
Loading task...
); } if (error || !task) { return (
{error || 'Task not found'}
); } return ( ); }; export default TaskView;