diff --git a/App.js b/App.js new file mode 100644 index 0000000..f927186 --- /dev/null +++ b/App.js @@ -0,0 +1,116 @@ +import React, { useEffect, useState } from 'react'; +import TaskForm from './TaskForm'; +import TaskList from './TaskList'; +import { fetchTasks } from './api'; + +const App = () => { + const [tasks, setTasks] = useState([]); + + const loadTasks = async () => { + const tasks = await fetchTasks(); + setTasks(tasks); + }; + + useEffect(() => { + loadTasks(); + }, []); + + return ( +
+

Todo List

+ + +
+ ); +}; + +export default App; + +import React, { useState } from 'react'; +import { createTask } from './api'; + +const TaskForm = ({ onTaskAdded }) => { + const [task, setTask] = useState(''); + + const handleSubmit = async (e) => { + e.preventDefault(); + if (!task) return; + await createTask({ name: task }); + setTask(''); + onTaskAdded(); + }; + + return ( +
+

Todo List

+
+ setTask(e.target.value)} + placeholder="Enter todo" + className="border-2 border-gray-300 bg-white h-10 px-5 pr-16 rounded-lg text-sm focus:outline-none" + /> + +
+
+ ); +}; + +export default TaskForm; + +const TaskList = ({ tasks, onEdit, onDelete, onToggleComplete }) => { + return ( +
+
+

TODO

+
+ {tasks.filter(task => !task.completed).map((task) => ( +
+
+ onToggleComplete(task.id)} + className="mr-2" + /> + {task.name} +
+
+ + +
+
+ ))} +
+
+
+

COMPLETED

+
+ {tasks.filter(task => task.completed).map((task) => ( +
+
+ onToggleComplete(task.id)} + className="mr-2" + /> + {task.name} +
+
+ + +
+
+ ))} +
+
+
+ ); +}; + +export default TaskList; +