Skip to content

Commit

Permalink
Solution fix3
Browse files Browse the repository at this point in the history
  • Loading branch information
OksanaShvets1 committed Nov 22, 2023
1 parent ed99ebe commit 4b0ae0a
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 18 deletions.
8 changes: 3 additions & 5 deletions src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
/* eslint-disable jsx-a11y/control-has-associated-label */
import React, { useContext } from 'react';
import { TodoContext, TodoProvider } from './context/TodoContext';
import React from 'react';
import { TodoProvider } from './context/TodoContext';
import { AddTodo } from './components/AddTodo';
import { TodoList } from './components/TodoList';

export const App: React.FC = () => {
const { todos } = useContext(TodoContext);

return (
<TodoProvider>
<div className="todoapp">
Expand All @@ -16,7 +14,7 @@ export const App: React.FC = () => {
<AddTodo />
</header>

<TodoList todos={todos} />
<TodoList />
</div>
</TodoProvider>
);
Expand Down
14 changes: 5 additions & 9 deletions src/components/TodoList.tsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
import React from 'react';
import React, { useContext } from 'react';
import { TodoItem } from './TodoItem';
import { Todo } from '../types/Todo';
import { TodoContext } from '../context/TodoContext';

type Props = {
todos: Todo[];
};

export const TodoList: React.FC<Props> = ({ todos }) => {
// eslint-disable-next-line no-console
console.log('Todos in TodoList:', todos);
export const TodoList: React.FC = () => {
const { todos } = useContext(TodoContext);

return (
<ul className="todo-list" data-cy="todoList">
{todos.map((todo) => (
{todos.map((todo: Todo) => (
<TodoItem key={todo.id} todo={todo} />
))}
</ul>
Expand Down
18 changes: 14 additions & 4 deletions src/context/TodoContext.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
import React, { useState, ReactNode, useMemo } from 'react';
import React, {
useState, ReactNode, useMemo,
} from 'react';
import { Todo } from '../types/Todo';

const getTodos = JSON.parse(localStorage.getItem('todos') || '[]') as Todo[];
const TODO_STORAGE_KEY = 'todos';

const getTodos = (): Todo[] => {
const storedTodos = localStorage.getItem(TODO_STORAGE_KEY);

return storedTodos
? JSON.parse(storedTodos) : [];
};

export const TodoContext = React.createContext<{
todos: Todo[];
setTodos: React.Dispatch<React.SetStateAction<Todo[]>>;
}>({
todos: getTodos,
todos: [],
setTodos: () => {},
});

Expand All @@ -16,7 +25,8 @@ interface TodoProviderProps {
}

export const TodoProvider: React.FC<TodoProviderProps> = ({ children }) => {
const [todos, setTodos] = useState(getTodos);
const [todos, setTodos] = useState<Todo[]>(getTodos());

const value = useMemo(() => ({
todos,
setTodos,
Expand Down

0 comments on commit 4b0ae0a

Please sign in to comment.