From ebbddb504f01d50fd152bfb95775026e546af7aa Mon Sep 17 00:00:00 2001 From: Abdelfettah Date: Tue, 22 Feb 2022 16:43:25 +0100 Subject: [PATCH] =?UTF-8?q?Types=20modifi=C3=A9s,=20=C3=A0=20tester?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 16 ++++++++-------- src/TodoItem.tsx | 17 +++++++++++++++-- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index fd7b152..b0a326e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,19 +1,19 @@ -import { useState } from 'react'; +import { useState, ReactElement } from 'react'; import { faker } from '@faker-js/faker'; -import { TodoItem } from './TodoItem'; +import { TodoItem,TypeTodo } from './TodoItem'; import { nanoid } from 'nanoid'; -const generateFakeTodoItem = () => ({ +const generateFakeTodoItem = (): TypeTodo => ({ label: faker.hacker.phrase(), status: faker.random.arrayElement(['open', 'done', 'archived']), id: nanoid(), }); -const generateNTodo = (size) => { +const generateNTodo = (size: number): TypeTodo[] => { return Array.from(Array(size).keys()).map(generateFakeTodoItem); }; -const initialList = [ +const initialList: TypeTodo[] = [ { 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..2379975 100644 --- a/src/TodoItem.tsx +++ b/src/TodoItem.tsx @@ -1,6 +1,19 @@ import clsx from 'clsx'; -export const TodoItem = ({ status, label, onChecked }) => { +interface TypeTodo { + label: string; + status: string; + id: string; +} + +interface ToDoItemProps { + status: string, + label: string, + onChecked: (numStatus: string) => void +} + +export type {TypeTodo}; +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')} />
);