|
|
@ -1,19 +1,19 @@ |
|
|
import { useState } from 'react'; |
|
|
import { useState } from 'react'; |
|
|
import { faker } from '@faker-js/faker'; |
|
|
import { faker } from '@faker-js/faker'; |
|
|
import { TodoItem } from './TodoItem'; |
|
|
|
|
|
|
|
|
import { TodoItem, ToDoType } from './TodoItem'; |
|
|
import { nanoid } from 'nanoid'; |
|
|
import { nanoid } from 'nanoid'; |
|
|
|
|
|
|
|
|
const generateFakeTodoItem = () => ({ |
|
|
|
|
|
|
|
|
const generateFakeTodoItem = (): ToDoType => ({ |
|
|
label: faker.hacker.phrase(), |
|
|
label: faker.hacker.phrase(), |
|
|
status: faker.random.arrayElement(['open', 'done', 'archived']), |
|
|
status: faker.random.arrayElement(['open', 'done', 'archived']), |
|
|
id: nanoid(), |
|
|
id: nanoid(), |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
const generateNTodo = (size) => { |
|
|
|
|
|
|
|
|
const generateNTodo = (size: number): ToDoType[] => { |
|
|
return Array.from(Array(size).keys()).map(generateFakeTodoItem); |
|
|
return Array.from(Array(size).keys()).map(generateFakeTodoItem); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
const initialList = [ |
|
|
|
|
|
|
|
|
const initialList: ToDoType[] = [ |
|
|
{ |
|
|
{ |
|
|
label: 'This is my first todo item', |
|
|
label: 'This is my first todo item', |
|
|
status: 'open', |
|
|
status: 'open', |
|
|
@ -32,10 +32,10 @@ const initialList = [ |
|
|
...generateNTodo(10), |
|
|
...generateNTodo(10), |
|
|
]; |
|
|
]; |
|
|
|
|
|
|
|
|
function App() { |
|
|
|
|
|
|
|
|
function App(): JSX.Element { |
|
|
const [todoList, setTodoList] = useState(initialList); |
|
|
const [todoList, setTodoList] = useState(initialList); |
|
|
|
|
|
|
|
|
const updater = (id, newStatus) => { |
|
|
|
|
|
|
|
|
const updater = (id: string, newStatus: string): void => { |
|
|
setTodoList((oldList) => |
|
|
setTodoList((oldList) => |
|
|
oldList.map((it) => { |
|
|
oldList.map((it) => { |
|
|
if (it.id !== id) { |
|
|
if (it.id !== id) { |
|
|
@ -57,7 +57,7 @@ function App() { |
|
|
key={item.id} |
|
|
key={item.id} |
|
|
label={item.label} |
|
|
label={item.label} |
|
|
status={item.status} |
|
|
status={item.status} |
|
|
onChecked={(newState) => updater(item.id, newState)} |
|
|
|
|
|
|
|
|
onChecked={(newState: string): void => updater(item.id, newState)} |
|
|
/> |
|
|
/> |
|
|
))} |
|
|
))} |
|
|
</div> |
|
|
</div> |
|
|
|