From 1eda377fbf3c0f97274799600980878eed4fbe6b Mon Sep 17 00:00:00 2001 From: Yana Date: Tue, 4 Feb 2025 14:25:21 +0200 Subject: [PATCH] fix tests and errors --- src/App.tsx | 19 +++++-- src/components/TodoFilter/TodoFilter.tsx | 67 ++++++++---------------- src/components/TodoList/TodoList.tsx | 16 +++--- src/components/TodoModal/TodoModal.tsx | 8 +-- 4 files changed, 49 insertions(+), 61 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 3ebb15ea8..34fb36131 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -12,14 +12,16 @@ import { Todo } from './types/Todo'; export const App: React.FC = () => { const [allTodos, setAllTodos] = useState([]); + const [filteredTodos, setFilteredTodos] = useState([]); const [todos, setTodos] = useState([]); const [loading, setLoading] = useState(false); - const [selectedId, setSelectedId] = useState(0); + const [selectedId, setSelectedId] = useState(null); useEffect(() => { setLoading(true); getTodos().then(todosFromServer => { setAllTodos(todosFromServer); + setFilteredTodos(todosFromServer); setTodos(todosFromServer); setLoading(false); }); @@ -27,25 +29,32 @@ export const App: React.FC = () => { const handleFilterAll = useCallback(() => { setTodos(allTodos); + setFilteredTodos(allTodos); }, [allTodos]); const handleFilterActive = useCallback(() => { - setTodos(allTodos.filter(todo => !todo.completed)); + const activeTodos = allTodos.filter(todo => !todo.completed); + + setFilteredTodos(activeTodos); + setTodos(activeTodos); }, [allTodos]); const handleFilterComplete = useCallback(() => { - setTodos(allTodos.filter(todo => todo.completed)); + const completedTodos = allTodos.filter(todo => todo.completed); + + setFilteredTodos(completedTodos); + setTodos(completedTodos); }, [allTodos]); const filterByTitle = useCallback( (query: string) => { setTodos( - todos.filter(todo => + filteredTodos.filter(todo => todo.title.toLowerCase().includes(query.toLowerCase()), ), ); }, - [todos], + [filteredTodos], ); return ( diff --git a/src/components/TodoFilter/TodoFilter.tsx b/src/components/TodoFilter/TodoFilter.tsx index d4ce33f7a..3f2d3d74e 100644 --- a/src/components/TodoFilter/TodoFilter.tsx +++ b/src/components/TodoFilter/TodoFilter.tsx @@ -1,4 +1,4 @@ -import React, { ChangeEvent, useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; type Props = { onFilterAll: () => void; @@ -13,64 +13,39 @@ export const TodoFilter: React.FC = ({ onFilterCompleted, onFilterByTitle, }) => { - const [isQuery, setIsQuery] = useState(false); const [query, setQuery] = useState(''); const [filterStatus, setFilterStatus] = useState('all'); - function handleChange(event: ChangeEvent) { - const status = event.target.value; - - setFilterStatus(status); - - switch (status) { - case 'all': - onFilterAll(); - break; - - case 'active': - onFilterActive(); - break; - - case 'completed': - onFilterCompleted(); - break; - - default: - break; - } - } - function handleTitleChange(event: React.ChangeEvent) { const newQuery = event.target.value; setQuery(newQuery); - onFilterByTitle(newQuery.toLowerCase()); - setIsQuery(newQuery.length > 0); } function clearInput() { setQuery(''); - setIsQuery(false); - onFilterByTitle(''); } useEffect(() => { - if (!query) { - switch (filterStatus) { - case 'all': - onFilterAll(); - break; - case 'active': - onFilterActive(); - break; - case 'completed': - onFilterCompleted(); - break; - default: - break; - } + if (filterStatus === 'all') { + onFilterAll(); + } else if (filterStatus === 'active') { + onFilterActive(); + } else if (filterStatus === 'completed') { + onFilterCompleted(); + } + + if (query !== '') { + onFilterByTitle(query); } - }, [query, filterStatus, onFilterActive, onFilterAll, onFilterCompleted]); + }, [ + query, + filterStatus, + onFilterAll, + onFilterActive, + onFilterCompleted, + onFilterByTitle, + ]); return (
@@ -79,7 +54,7 @@ export const TodoFilter: React.FC = ({