From f8439467092e6a4ab644ffd38c2a2075134589cc Mon Sep 17 00:00:00 2001 From: zainabyahya Date: Sat, 16 Mar 2024 21:39:38 +0300 Subject: [PATCH 1/4] solved task --- package-lock.json | 6 +++++ package.json | 1 + src/App.js | 5 +++- src/components/TodoItem.js | 50 +++++++++++++++++++++++++++++++++++ src/components/TodoList.js | 54 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 src/components/TodoItem.js create mode 100644 src/components/TodoList.js diff --git a/package-lock.json b/package-lock.json index e6a160a..6dc47ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "5.0.1", + "uuid4": "^2.0.3", "web-vitals": "^2.1.4" } }, @@ -17332,6 +17333,11 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/uuid4": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid4/-/uuid4-2.0.3.tgz", + "integrity": "sha512-CTpAkEVXMNJl2ojgtpLXHgz23dh8z81u6/HEPiQFOvBc/c2pde6TVHmH4uwY0d/GLF3tb7+VDAj4+2eJaQSdZQ==" + }, "node_modules/v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", diff --git a/package.json b/package.json index 88a269e..c84620f 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "5.0.1", + "uuid4": "^2.0.3", "web-vitals": "^2.1.4" }, "scripts": { diff --git a/src/App.js b/src/App.js index 0ff7d8a..84d8a4a 100644 --- a/src/App.js +++ b/src/App.js @@ -1,11 +1,14 @@ import "./App.css"; +import todoData from "./todoData"; +import TodoList from "./components/TodoList"; + // TODO: Import the todoData and pass it as a prop to the TodoList component function App() { return (
- {/* Call the TodoList Component Here */} +
); diff --git a/src/components/TodoItem.js b/src/components/TodoItem.js new file mode 100644 index 0000000..280ed4f --- /dev/null +++ b/src/components/TodoItem.js @@ -0,0 +1,50 @@ +import React, { useState } from "react"; + + +function TodoItem({ todoId, todo, handleDelete + , handleEditList }) { + const [isEditing, setEditing] = useState(false); + const [editedText, setEditText] = useState(todo.title); + + + const handleEdit = () => { + setEditing(true); + } + + const handelEditChange = (e) => { + setEditText(e.target.value); + }; + + const handleSave = (todoId) => { + const updatedTitle = { ...todo, title: editedText }; + if (updatedTitle.title.trim() === "") { + return; + } + + handleEditList(updatedTitle); + setEditing(false); + } + + return ( +
+ {isEditing ? ( + + ) : ( +

{todo.title}

+ )} + + + handleDelete(todo.id)}> + Delete + + + {isEditing ? ( + Save + ) : ( + Edit + )} +
+ ); +} + +export default TodoItem; \ No newline at end of file diff --git a/src/components/TodoList.js b/src/components/TodoList.js new file mode 100644 index 0000000..ff3499b --- /dev/null +++ b/src/components/TodoList.js @@ -0,0 +1,54 @@ +import { useState } from "react"; +import uuid4 from "uuid4"; +import TodoItem from "./TodoItem"; + + +function TodoList({ todoData }) { + const [todoList, setTodoList] = useState(todoData); + const [todoTitle, setTodoTitle] = useState(""); + + const handleTextChange = (event) => { + setTodoTitle(event.target.value); + }; + + const handleCreate = () => { + if (todoTitle.trim() === "") { + return; + } + const Task = { + id: uuid4(), + title: todoTitle, + done: false + } + setTodoList([...todoList, Task]); + setTodoTitle(""); + } + + const handleDelete = (todoId) => { + setTodoList(todoList.filter((item) => item.id !== todoId)); + }; + + const handleEditList = (editedText) => { + setTodoList((todoList) => + todoList.map((item) => + item.id === editedText.id ? editedText : item + ) + ); + } + return ( +
+ + + {todoList.map((todo) => ( + + ))} +
+ ); +} + +export default TodoList; \ No newline at end of file From d08b95715ca7c0f185d34853c8166e3065a3ce44 Mon Sep 17 00:00:00 2001 From: zainabyahya Date: Sun, 24 Mar 2024 12:14:29 +0300 Subject: [PATCH 2/4] add new features --- package-lock.json | 3 + package.json | 3 + src/App.css | 4 +- src/App.js | 8 +- src/assets/todo.jpeg | Bin 0 -> 37805 bytes src/assets/todoo.avif | Bin 0 -> 25267 bytes src/components/AddTask.js | 160 ++++++++++++++++++++++++++++++++++ src/components/EditTask.js | 127 +++++++++++++++++++++++++++ src/components/LandingPage.js | 21 +++++ src/components/Search.js | 46 ++++++++++ src/components/Task.js | 100 +++++++++++++++++++++ src/components/TodoItem.js | 78 +++++++++-------- src/components/TodoList.js | 123 ++++++++++++++++++-------- src/index.css | 8 +- src/todoData.js | 6 +- src/usersData.js | 22 +++++ tailwind.config.js | 9 ++ 17 files changed, 635 insertions(+), 83 deletions(-) create mode 100644 src/assets/todo.jpeg create mode 100644 src/assets/todoo.avif create mode 100644 src/components/AddTask.js create mode 100644 src/components/EditTask.js create mode 100644 src/components/LandingPage.js create mode 100644 src/components/Search.js create mode 100644 src/components/Task.js create mode 100644 src/usersData.js create mode 100644 tailwind.config.js diff --git a/package-lock.json b/package-lock.json index 6dc47ce..1a1791e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,9 @@ "react-scripts": "5.0.1", "uuid4": "^2.0.3", "web-vitals": "^2.1.4" + }, + "devDependencies": { + "tailwindcss": "^3.4.1" } }, "node_modules/@aashutoshrathi/word-wrap": { diff --git a/package.json b/package.json index c84620f..37f020b 100644 --- a/package.json +++ b/package.json @@ -35,5 +35,8 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "tailwindcss": "^3.4.1" } } diff --git a/src/App.css b/src/App.css index 13088c2..5e5f622 100644 --- a/src/App.css +++ b/src/App.css @@ -1,4 +1,4 @@ -:root { +/* :root { --peach: #ffe6e6; --pink: #e1afd1; --lightPurple: #ad88c6; @@ -46,4 +46,4 @@ to { transform: rotate(360deg); } -} +} */ \ No newline at end of file diff --git a/src/App.js b/src/App.js index 84d8a4a..a74fc28 100644 --- a/src/App.js +++ b/src/App.js @@ -1,15 +1,17 @@ import "./App.css"; import todoData from "./todoData"; import TodoList from "./components/TodoList"; +import LandingPage from "./components/LandingPage"; // TODO: Import the todoData and pass it as a prop to the TodoList component function App() { return ( -
-
+
+ +
-
+
); } diff --git a/src/assets/todo.jpeg b/src/assets/todo.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..71f5044491044c5366715fd3a324854df76890af GIT binary patch literal 37805 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 literal 0 HcmV?d00001 diff --git a/src/components/AddTask.js b/src/components/AddTask.js new file mode 100644 index 0000000..9eace56 --- /dev/null +++ b/src/components/AddTask.js @@ -0,0 +1,160 @@ +import React, { useState } from 'react'; +import uuid4 from 'uuid4'; +import { users } from "../usersData" + +function AddTask({ todoList, setTodoList, listType, setFilteredList }) { + let defaultDate = new Date() + defaultDate.setDate(defaultDate.getDate() + 3) + + const [isOpen, setIsOpen] = useState(false); + const [todoTitle, setTitle] = useState(""); + const [todoLevel, setLevel] = useState(""); + const [todoUser, setUser] = useState(null); + const [todoStart, setStart] = useState(defaultDate); + const [todoEnd, setEnd] = useState(defaultDate); + const [todoDescription, setDescription] = useState(""); + + + const addTask = () => { + setIsOpen(!isOpen); + }; + + const handleSubmit = (event) => { + event.preventDefault(); + + const startDate = new Date(todoStart); + const endDate = new Date(todoEnd); + + // Check if end date is before start date + if (endDate < startDate) { + alert("End date must be after start date"); + return; + } + const newTask = { + id: uuid4(), + title: todoTitle, + level: todoLevel, + user: todoUser, + startDate: todoStart, + endDate: todoEnd, + description: todoDescription, + done: false + }; + const updatedTodoList = [...todoList, newTask]; // Update todoList with the new task + setTodoList(updatedTodoList); // Update todoList state + + // Update filteredList using the updated todoList + if (listType === "completed") { + setFilteredList(updatedTodoList.filter(todo => todo.done)); + } else if (listType === "active") { + setFilteredList(updatedTodoList.filter(todo => !todo.done)); + } else { + setFilteredList(updatedTodoList); + } + + // Reset values and close modal + addTask(); + setTitle(""); + setLevel(""); + setStart(defaultDate); + setEnd(defaultDate); + setDescription(""); + + }; + const handleUser = (event) => { + const userId = event.target.value; + const user = users.find(user => user.id === Number(userId)); + setUser(user); + } + + + return ( + <> + {/* Modal toggle */} + + + {/* Main modal */} + {isOpen && ( +
+
+ {/* Modal content */} +
+ {/* Modal header */} +
+

+ Add New Task +

+ +
+ {/* Modal body */} +
+ +
+
+ + { + setTitle(event.target.value); + }} value={todoTitle} className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-primary-600 focus:border-primary-600 block w-full p-2.5" placeholder="Type task name" required /> +
+
+ + +
+
+ + +
+
+ + { + setStart(event.target.value); + }} value={todoStart} className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-primary-600 focus:border-primary-600 block w-full p-2.5" /> +
+
+ + { + setEnd(event.target.value); + }} value={todoEnd} className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-primary-600 focus:border-primary-600 block w-full p-2.5" /> +
+
+ + +
+
+ +
+
+
+
+ )} + + ); +} + +export default AddTask; diff --git a/src/components/EditTask.js b/src/components/EditTask.js new file mode 100644 index 0000000..4b9f33e --- /dev/null +++ b/src/components/EditTask.js @@ -0,0 +1,127 @@ +import React from 'react'; +import { useState } from 'react'; +import { users } from '../usersData'; + +function EditTask({ todo, setIsEditing, handleCancel, handleEditList }) { + const [editedTitle, setEditTitle] = useState(todo.title); + const [editedLevel, setEditLevel] = useState(todo.level); + const [editedUser, setEditUser] = useState(todo.user); + const [editedStart, setEditStart] = useState(todo.startDate); + const [editedEnd, setEditEnd] = useState(todo.endDate); + const [editedDescription, setEditDescription] = useState(todo.description); + + // Implement your edit functionality here + const handleSave = () => { + if (editedTitle === "") return; + + const updatedTask = { + ...todo, + title: editedTitle, + level: editedLevel ? editedLevel : "", + user: editedUser ? editedUser : "Not assigned", + startDate: editedStart ? editedStart : "", + endDate: editedEnd ? editedEnd : "", + description: editedDescription ? editedDescription : "", + done: todo.done + }; + + handleEditList(updatedTask); + setIsEditing(false); + } + + const handleEditUser = (event) => { + const userId = event.target.value; + const user = users.find(user => user.id === Number(userId)); + setEditUser(user); + } + return ( + <> + {/* Main modal */} +
+
+ {/* Modal content */} +
+ {/* Modal header */} +
+

+ Edit Task +

+ +
+ {/* Modal body */} +
+
+
+
+
+ + { + setEditTitle(event.target.value); + }} value={editedTitle} className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-primary-600 focus:border-primary-600 block w-full p-2.5" placeholder="Type task name" required /> +
+
+ + +
+
+ + +
+
+ + { + setEditStart(event.target.value); + }} value={editedStart} className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-primary-600 focus:border-primary-600 block w-full p-2.5" /> +
+
+ + { + setEditEnd(event.target.value); + }} value={editedEnd} className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-primary-600 focus:border-primary-600 block w-full p-2.5" /> +
+
+ + +
+
+
+ + +
+
+
+ +
+
+
+
+ + ); +} + +export default EditTask; diff --git a/src/components/LandingPage.js b/src/components/LandingPage.js new file mode 100644 index 0000000..7d926aa --- /dev/null +++ b/src/components/LandingPage.js @@ -0,0 +1,21 @@ +import React from 'react'; +import backgroundImage from '../assets/todoo.avif'; + +function LandingPage() { + return ( +
+ + ); +} + +export default LandingPage; diff --git a/src/components/Search.js b/src/components/Search.js new file mode 100644 index 0000000..ab0aa70 --- /dev/null +++ b/src/components/Search.js @@ -0,0 +1,46 @@ +import React, { useState } from "react"; + +function Search({ todoList }) { + const [filteredList, setFilteredList] = useState(todoList) + const [searchQuery, setSearchQuery] = useState(""); + + //Search list of objects + const handleSearch = (event) => { + const query = event.target.value + setSearchQuery(query) + + const searchList = todoList.filter((todo) => { + return todo.title.toLowerCase().indexOf(query.toLowerCase()) !== -1 + }) + + setFilteredList(searchList) + }; + + return ( +
+

Search Filter Array of Objects

+ +
+
+ +
+ + {filteredList.map((todo, index) => { + return ( +
+

{todo.title}

+
+ ); + })} +
+
+ ); +} + +export default Search; \ No newline at end of file diff --git a/src/components/Task.js b/src/components/Task.js new file mode 100644 index 0000000..6cd605a --- /dev/null +++ b/src/components/Task.js @@ -0,0 +1,100 @@ +import { useState } from 'react'; +import EditTask from './EditTask'; + +function Task({ todo, taskView, handleView, handleEditList }) { + const [isEditing, setIsEditing] = useState(false); + + const handleEdit = () => { + setIsEditing(true); + }; + + const handleCancel = () => { + setIsEditing(false); + }; + + return ( + <> + {/* Main modal */} + {taskView && ( +
+
+ {/* Modal header */} +
+

+ {todo.title} +

+ +
+ {/* Modal body */} +
+
+ {isEditing ? ( + + ) : ( + + )} +
+
+
+ +

{todo.title}

+
+
+ +

{todo.level}

+
+
+ +

{todo.user ? todo.user.name : "Not Assigned"}

+
+
+ +

{todo.startDate ? todo.startDate : "--:--:--"}

+ +
+
+ +

{todo.endDate ? todo.startDate : "--:--:--"}

+
+
+ +

{todo.description}

+
+
+ +
+
+
+ ) + } + + ); + +} +export default Task; \ No newline at end of file diff --git a/src/components/TodoItem.js b/src/components/TodoItem.js index 280ed4f..66a8e2c 100644 --- a/src/components/TodoItem.js +++ b/src/components/TodoItem.js @@ -1,50 +1,52 @@ import React, { useState } from "react"; +import Task from "./Task"; +function TodoItem({ todoId, todo, handleDelete, handleEditList }) { + const [isDone, setDone] = useState(todo.done); + const [taskView, setTaskView] = useState(false); -function TodoItem({ todoId, todo, handleDelete - , handleEditList }) { - const [isEditing, setEditing] = useState(false); - const [editedText, setEditText] = useState(todo.title); - - - const handleEdit = () => { - setEditing(true); - } - - const handelEditChange = (e) => { - setEditText(e.target.value); + const handleDone = () => { + setDone((prevDone) => !prevDone); // Use functional state update for consistency + handleEditList({ ...todo, done: !isDone }); }; - const handleSave = (todoId) => { - const updatedTitle = { ...todo, title: editedText }; - if (updatedTitle.title.trim() === "") { - return; - } - - handleEditList(updatedTitle); - setEditing(false); - } + const handleView = () => { + setTaskView((prevView) => !prevView); // Functional state update + }; return ( -
- {isEditing ? ( - - ) : ( -

{todo.title}

- )} - - - handleDelete(todo.id)}> +
  • +
    + + + {todo.title} + +
    + + {taskView && ( + )} -
  • + ); } -export default TodoItem; \ No newline at end of file +export default TodoItem; diff --git a/src/components/TodoList.js b/src/components/TodoList.js index ff3499b..91555aa 100644 --- a/src/components/TodoList.js +++ b/src/components/TodoList.js @@ -1,54 +1,107 @@ -import { useState } from "react"; -import uuid4 from "uuid4"; +import { useState, useEffect } from "react"; import TodoItem from "./TodoItem"; - +import AddTask from "./AddTask"; function TodoList({ todoData }) { + const options = ["All", "Active", "Completed"]; + const [todoList, setTodoList] = useState(todoData); - const [todoTitle, setTodoTitle] = useState(""); + const [listType, setType] = useState("All"); + const [filteredList, setFilteredList] = useState(todoList); + const [searchQuery, setSearchQuery] = useState(""); - const handleTextChange = (event) => { - setTodoTitle(event.target.value); - }; + const handleSearch = (event) => { + const query = event.target.value; + setSearchQuery(query); - const handleCreate = () => { - if (todoTitle.trim() === "") { - return; - } - const Task = { - id: uuid4(), - title: todoTitle, - done: false - } - setTodoList([...todoList, Task]); - setTodoTitle(""); - } + const searchList = todoList.filter((todo) => { + return todo.title.toLowerCase().indexOf(query.toLowerCase()) !== -1; + }); + + setFilteredList(searchList); + }; const handleDelete = (todoId) => { - setTodoList(todoList.filter((item) => item.id !== todoId)); + const updatedList = todoList.filter((item) => item.id !== todoId); + setTodoList(updatedList); + + if (listType === "Completed") { + setFilteredList(updatedList.filter(todo => todo.done)); + } else if (listType === "Active") { + setFilteredList(updatedList.filter(todo => !todo.done)); + } else { + setFilteredList(updatedList); + } }; - const handleEditList = (editedText) => { + const handleEditList = (updatedTask) => { + console.log(todoList); + console.log(updatedTask); setTodoList((todoList) => - todoList.map((item) => - item.id === editedText.id ? editedText : item + todoList.map((todo) => + todo.id === updatedTask.id ? updatedTask : todo ) ); + console.log(todoList); + + }; + + const handleSelect = (type) => { + setType(type); + if (type === "All") { + setFilteredList(todoList); + } else if (type === "Completed") { + setFilteredList(todoList.filter(todo => todo.done)); + } else if (type === "Active") { + setFilteredList(todoList.filter(todo => !todo.done)); + } } + return ( -
    - - - {todoList.map((todo) => ( - +
    +
    +

    T O D O

    + +
    + - ))} -
    +
      + {options.map((type, index) => ( +
    • handleSelect(type)} + className={`cursor-pointer text-gray-600 hover:text-gray-900 ${listType === type ? "font-bold text-blue-600" : "" + }`} + > + {type} +
    • + ))} +
    + { + filteredList.map((todo) => ( + + )) + } +
    +
    ); } -export default TodoList; \ No newline at end of file +export default TodoList; diff --git a/src/index.css b/src/index.css index ec2585e..a1ef556 100644 --- a/src/index.css +++ b/src/index.css @@ -1,4 +1,8 @@ -body { +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', @@ -10,4 +14,4 @@ body { code { font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace; -} +} */ \ No newline at end of file diff --git a/src/todoData.js b/src/todoData.js index d12d26f..386eed3 100644 --- a/src/todoData.js +++ b/src/todoData.js @@ -2,7 +2,7 @@ const todoData = [ { id: 1, title: "Go bungee jumping", - done: false, + done: true, }, { id: 2, @@ -17,12 +17,12 @@ const todoData = [ { id: 4, title: "Write a book", - done: false, + done: true, }, { id: 5, title: "Travel to every continent", - done: false, + done: true, }, { id: 6, diff --git a/src/usersData.js b/src/usersData.js new file mode 100644 index 0000000..9587c45 --- /dev/null +++ b/src/usersData.js @@ -0,0 +1,22 @@ +export const users = [ + { + id: 1, + name: "Alex" + }, + { + id: 2, + name: "John" + }, + { + id: 3, + name: "Jessica" + }, + { + id: 4, + name: "Marco" + }, + { + id: 5, + name: "Rebecca" + } +] \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..e5b64f3 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,9 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./src/**/*.{html,js}"], + theme: { + extend: {}, + }, + plugins: [], +} + From 3ff562c8b6eb47f433fe1471d19a40ea8e1e25f7 Mon Sep 17 00:00:00 2001 From: zainabyahya Date: Sun, 24 Mar 2024 21:01:55 +0300 Subject: [PATCH 3/4] fixed bugs --- src/components/EditTask.js | 1 - src/components/LandingPage.js | 7 +++++-- src/components/TodoItem.js | 5 ++--- src/components/TodoList.js | 3 +++ 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/components/EditTask.js b/src/components/EditTask.js index 4b9f33e..e24d590 100644 --- a/src/components/EditTask.js +++ b/src/components/EditTask.js @@ -24,7 +24,6 @@ function EditTask({ todo, setIsEditing, handleCancel, handleEditList }) { description: editedDescription ? editedDescription : "", done: todo.done }; - handleEditList(updatedTask); setIsEditing(false); } diff --git a/src/components/LandingPage.js b/src/components/LandingPage.js index 7d926aa..0b5d453 100644 --- a/src/components/LandingPage.js +++ b/src/components/LandingPage.js @@ -11,9 +11,12 @@ function LandingPage() { bg - {/* Content will be placed here */} +
    +

    To Do List

    +

    Organize your tasks efficiently with our Todo List app.

    +
    ); } diff --git a/src/components/TodoItem.js b/src/components/TodoItem.js index 66a8e2c..5570239 100644 --- a/src/components/TodoItem.js +++ b/src/components/TodoItem.js @@ -30,13 +30,12 @@ function TodoItem({ todoId, todo, handleDelete, handleEditList }) { {todo.title} - + {taskView && ( { + console.log(todoId); const updatedList = todoList.filter((item) => item.id !== todoId); + console.log(updatedList); setTodoList(updatedList); if (listType === "Completed") { @@ -93,6 +95,7 @@ function TodoList({ todoData }) { filteredList.map((todo) => ( Date: Sun, 24 Mar 2024 21:04:14 +0300 Subject: [PATCH 4/4] deleted Search component --- src/components/Search.js | 46 ---------------------------------------- 1 file changed, 46 deletions(-) delete mode 100644 src/components/Search.js diff --git a/src/components/Search.js b/src/components/Search.js deleted file mode 100644 index ab0aa70..0000000 --- a/src/components/Search.js +++ /dev/null @@ -1,46 +0,0 @@ -import React, { useState } from "react"; - -function Search({ todoList }) { - const [filteredList, setFilteredList] = useState(todoList) - const [searchQuery, setSearchQuery] = useState(""); - - //Search list of objects - const handleSearch = (event) => { - const query = event.target.value - setSearchQuery(query) - - const searchList = todoList.filter((todo) => { - return todo.title.toLowerCase().indexOf(query.toLowerCase()) !== -1 - }) - - setFilteredList(searchList) - }; - - return ( -
    -

    Search Filter Array of Objects

    - -
    -
    - -
    - - {filteredList.map((todo, index) => { - return ( -
    -

    {todo.title}

    -
    - ); - })} -
    -
    - ); -} - -export default Search; \ No newline at end of file