diff --git a/src/App.tsx b/src/App.tsx index fd7b152..75b0fb8 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,19 +1,19 @@ import { useState } from 'react'; import { faker } from '@faker-js/faker'; -import { TodoItem } from './TodoItem'; +import { TodoItem, ToDoType } from './TodoItem'; import { nanoid } from 'nanoid'; -const generateFakeTodoItem = () => ({ +const generateFakeTodoItem = (): ToDoType => ({ label: faker.hacker.phrase(), status: faker.random.arrayElement(['open', 'done', 'archived']), id: nanoid(), }); -const generateNTodo = (size) => { +const generateNTodo = (size: number): ToDoType[] => { return Array.from(Array(size).keys()).map(generateFakeTodoItem); }; -const initialList = [ +const initialList: ToDoType[] = [ { label: 'This is my first todo item', status: 'open', @@ -32,10 +32,10 @@ const initialList = [ ...generateNTodo(10), ]; -function App() { +function App(): JSX.Element { const [todoList, setTodoList] = useState(initialList); - const updater = (id, newStatus) => { + const updater = (id: string, newStatus: string): void => { setTodoList((oldList) => oldList.map((it) => { if (it.id !== id) { @@ -57,7 +57,7 @@ function App() { key={item.id} label={item.label} status={item.status} - onChecked={(newState) => updater(item.id, newState)} + onChecked={(newState: string): void => updater(item.id, newState)} /> ))} diff --git a/src/TodoItem.tsx b/src/TodoItem.tsx index d52e923..7d7925b 100644 --- a/src/TodoItem.tsx +++ b/src/TodoItem.tsx @@ -1,6 +1,19 @@ import clsx from 'clsx'; -export const TodoItem = ({ status, label, onChecked }) => { +type ToDoType = { + label: string; + status: string, + id: string +}; + +interface ToDoItemProps { + status: string, + label: string, + onChecked: (numStatus: string) => void +} + +export type {ToDoType}; +export const TodoItem = ({status, label, onChecked}: ToDoItemProps): JSX.Element => { return (
{ disabled={status === 'archived'} type="checkbox" className="rounded text-pink-500 ml-8 cursor-pointer disabled:cursor-not-allowed disabled:bg-black disabled:hover:bg-black" - onChange={() => onChecked(status === 'open' ? 'done' : 'open')} + onChange={(): void => onChecked(status === 'open' ? 'done' : 'open')} />
);