diff --git a/.eslintrc.js b/.eslintrc.js index 624c804..bc2bfeb 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,15 +1,10 @@ module.exports = { root: true, parser: '@typescript-eslint/parser', - plugins: [ - '@typescript-eslint', - ], - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - ], + plugins: ['@typescript-eslint'], + extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'], rules: { - "@typescript-eslint/explicit-function-return-type": "error", - "@typescript-eslint/no-explicit-any": "error" - } -}; \ No newline at end of file + '@typescript-eslint/explicit-function-return-type': 'error', + '@typescript-eslint/no-explicit-any': 'error', + }, +}; diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..1521c8b --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +dist diff --git a/src/App.tsx b/src/App.tsx index fd7b152..de0932e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,19 +1,20 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; import { faker } from '@faker-js/faker'; import { TodoItem } from './TodoItem'; import { nanoid } from 'nanoid'; +import { Todo, TodoStatus } from './types'; -const generateFakeTodoItem = () => ({ +const generateFakeTodoItem = (): Todo => ({ label: faker.hacker.phrase(), status: faker.random.arrayElement(['open', 'done', 'archived']), id: nanoid(), }); -const generateNTodo = (size) => { +const generateNTodo = (size: number): Todo[] => { return Array.from(Array(size).keys()).map(generateFakeTodoItem); }; -const initialList = [ +const initialList: Todo[] = [ { label: 'This is my first todo item', status: 'open', @@ -32,10 +33,10 @@ const initialList = [ ...generateNTodo(10), ]; -function App() { +function App(): React.ReactElement { const [todoList, setTodoList] = useState(initialList); - const updater = (id, newStatus) => { + const updater = (id: string, newStatus: TodoStatus): void => { setTodoList((oldList) => oldList.map((it) => { if (it.id !== id) { @@ -57,7 +58,7 @@ function App() { key={item.id} label={item.label} status={item.status} - onChecked={(newState) => updater(item.id, newState)} + onChecked={(newState): void => updater(item.id, newState)} /> ))} diff --git a/src/TodoItem.tsx b/src/TodoItem.tsx index d52e923..f7fe6e7 100644 --- a/src/TodoItem.tsx +++ b/src/TodoItem.tsx @@ -1,6 +1,18 @@ import clsx from 'clsx'; +import React from 'react'; +import { TodoStatus } from './types'; -export const TodoItem = ({ status, label, onChecked }) => { +interface TodoItemProps { + status: TodoStatus; + label: string; + onChecked: (status: TodoStatus) => void; +} + +export const TodoItem = ({ + status, + label, + onChecked, +}: TodoItemProps): React.ReactElement => { return (