Untitled
user_3499465273
plain_text
3 years ago
7.1 kB
6
Indexable
import { useState, useEffect } from "react"; import "./App.css"; import Header from "./Components/Header/Header"; import List from "./Components/List/List"; import Footer from "./Components/Footer/Footer"; import NewNoteForm from "./Components/NewNoteForm/NewNoteForm"; import todoService from "./services/todos"; import ToastNotification from "./Components/ToastNotification/ToastNotification"; function App() { const [todos, setTodos] = useState([ { title: "test note", content: "", status: 0 }, ]); const [doList, setDoList] = useState([]); const [doingList, setDoingList] = useState([]); const [doneList, setDoneList] = useState([]); const [newTitle, setNewTitle] = useState(""); const [newContent, setNewContent] = useState(""); const [notification, setNotification] = useState(""); const [todoToEdit, setTodoToEdit] = useState({}); const [editMode, setEditMode] = useState(false); useEffect(() => { console.log("effect"); todoService.getAll().then((response) => { console.log("promise fulfilled"); setTodos(response); }); }, []); useEffect(() => { setDoList([...todos].filter((todo) => todo.status === 0)); setDoingList([...todos].filter((todo) => todo.status === 1)); setDoneList([...todos].filter((todo) => todo.status === 2)); }, [todos]); const handleTitleChange = (event) => { setNewTitle(event.target.value); }; const handleContentChange = (event) => { setNewContent(event.target.value); }; const addNoteButton = (event) => { event.preventDefault(); document.getElementById("new-note__window").style.display = "flex"; }; const cancelAddNote = (event) => { event.preventDefault(); document.getElementById("new-note__window").style.display = "none"; }; const saveNewNote = (event) => { event.preventDefault(); // const newTodos = [...todos].concat({ // title: newTitle, // content: newContent, // status: 0, // }); const newTodo = { title: newTitle, content: newContent, status: 0 }; todoService .create(newTodo) .then((response) => { setTodos([...todos].concat(response)); setNewTitle(""); setNewContent(""); document.getElementById("new-note__window").style.display = "none"; showToast("👍 Success"); }) .catch((error) => { console.log("error", error); showToast("👎 Failed"); }); // setTodos(newTodos); }; const deleteNote = (event) => { event.preventDefault(); const targetId = +event.target.id; todoService .remove(targetId) .then((response) => { showToast("👍 Success"); const newTodos = [...todos].filter( (todo) => todo.id !== targetId ); setTodos([...newTodos]); }) .catch((error) => { console.log("error", error); showToast("👎 Failed"); }); }; const editNote = (event) => { event.preventDefault(); const id = +event.target.id; setTodoToEdit([...todos].find((todo) => todo.id === id)); setEditMode(true); document.getElementById("new-note__window").style.display = "flex"; }; const moveNoteRight = (event) => { event.preventDefault(); const targetId = +event.target.id; const todoToUpdate = todos.find((todo) => todo.id === targetId); const newStatus = todoToUpdate.status + 1; const updatedTodo = { ...todoToUpdate, status: newStatus }; todoService .update(updatedTodo.id, updatedTodo) .then((response) => { setTodos( [...todos].map((todo) => todo.id !== updatedTodo.id ? todo : updatedTodo ) ); showToast("👍 Success"); }) .catch((error) => { console.log("error", error); showToast("👎 Failed"); }); }; const moveNoteLeft = (event) => { event.preventDefault(); const targetId = +event.target.id; const todoToUpdate = todos.find((todo) => todo.id === targetId); const newStatus = todoToUpdate.status - 1; const updatedTodo = { ...todoToUpdate, status: newStatus }; todoService .update(updatedTodo.id, updatedTodo) .then((response) => { setTodos( [...todos].map((todo) => todo.id !== updatedTodo.id ? todo : updatedTodo ) ); showToast("👍 Success"); }) .catch((error) => { console.log("error", error); showToast("👎 Failed"); }); }; const showToast = (message) => { setNotification(message); document.getElementById("toast-notification").style.display = "flex"; setTimeout(() => { document.getElementById("toast-notification").style.display = "none"; }, 5000); }; return ( <div className="App"> <Header /> <NewNoteForm titleValue={newTitle} contentValue={newContent} onCancel={cancelAddNote} onTitleChange={handleTitleChange} onContentChange={handleContentChange} onSave={saveNewNote} toDoToEdit={todoToEdit} editMode={editMode} /> <ToastNotification message={notification} /> <div className="lists-container"> <List todos={doList} title="do" onAdd={addNoteButton} onDelete={deleteNote} onMoveRight={moveNoteRight} onEdit={editNote} /> <List todos={doingList} title="doing" onMoveRight={moveNoteRight} onMoveLeft={moveNoteLeft} onDelete={deleteNote} onEdit={editNote} /> <List todos={doneList} title="done" onMoveLeft={moveNoteLeft} onDelete={deleteNote} onEdit={editNote} /> </div> {/* <Footer /> */} </div> ); } export default App;
Editor is loading...