/
todoProvider.tsx
41 lines (33 loc) · 931 Bytes
/
todoProvider.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import React, { createContext, useState } from 'react';
import {
getTodos as getTodosAPI,
completeTodo as completeTodoAPI,
iTodo,
} from '../api/todos';
interface iTodoContext {
todos: iTodo[];
completeTodo: (item: string) => void;
getTodos: () => void;
}
interface TodoProviderProps {
children?: React.ReactNode;
}
export const todoContext = createContext<iTodoContext>({
todos: [],
completeTodo: () => {},
getTodos: () => {},
});
const TodoProvider: React.FunctionComponent = ({
children,
}: TodoProviderProps) => {
const [todos, setTodos] = useState<iTodo[]>([]);
const getTodos = () => getTodosAPI().then(todos => setTodos(todos));
const completeTodo = (item: string) =>
completeTodoAPI(item).then(todos => setTodos(todos));
return (
<todoContext.Provider value={{ todos, completeTodo, getTodos }}>
{children}
</todoContext.Provider>
);
};
export default TodoProvider;