diff --git a/src/containers/home/index.tsx b/src/containers/home/index.tsx index 7f56d7a..5861ad5 100644 --- a/src/containers/home/index.tsx +++ b/src/containers/home/index.tsx @@ -1,29 +1,55 @@ -import React, { FC } from 'react'; +import React, { ChangeEvent, FC, FormEvent, useState } from 'react'; import TodoList from './TodoList'; import { Button } from '../../components/button'; import { Container } from '../../components/container'; -import { useListTodos } from '../../core/services/todo'; +import { useListTodos } from '../../core/services/listTodo'; +import { useCreateTodo } from '../../core/services/createTodo'; export const Home: FC = () => { + const [todoTitle, setTodoTitle] = useState(''); const { loading, error, data } = useListTodos(); + const { createTodo } = useCreateTodo(todoTitle); - if (error) { - return

Sorry...

; - } + const handleChange = (e: ChangeEvent) => { + setTodoTitle(() => e.target.value); + }; + + const handleSubmit = (e: FormEvent) => { + e.preventDefault(); + createTodo(); + }; return (

Your tasks

Hi there!

- {!loading && !!data && } - - + {error ? ( +

{error.message}. Sorry...

+ ) : ( + !loading && + !!data && ( + <> + +
+ + + +
+ + ) + )}
); }; diff --git a/src/core/services/createTodo.ts b/src/core/services/createTodo.ts new file mode 100644 index 0000000..7e398fd --- /dev/null +++ b/src/core/services/createTodo.ts @@ -0,0 +1,23 @@ +import { gql, useMutation } from '@apollo/client'; + +import Todo from '../models/todo'; + +const CREATE_TODO = gql` + mutation CreateTodo($title: String!) { + createTodo(title: $title) { + todo { + todoId + title + isDone + } + } + } +`; + +export const useCreateTodo = (todoTitle: string) => { + const [createTodo, result] = useMutation< + { createTodo: Todo }, + { title: string } + >(CREATE_TODO, { variables: { title: todoTitle } }); + return { createTodo, result }; +}; diff --git a/src/core/services/todo.ts b/src/core/services/listTodo.ts similarity index 100% rename from src/core/services/todo.ts rename to src/core/services/listTodo.ts