This repository was archived by the owner on Aug 26, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApp.tsx
65 lines (53 loc) · 1.48 KB
/
App.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import styles from './App.module.css'
import { useState } from 'react'
import { v4 as uuid } from 'uuid'
import { Header } from './components/Header'
import { NewTask } from './components/NewTask'
// 🗂️🛢️ From a super especial database 😅
import { tasks as dbTasks } from './db.js'
import { TasksBoard } from './components/TasksBoard'
export interface ITask {
id: string
content: string
isComplete: boolean
}
function App() {
const [tasks, setTask] = useState<ITask[]>(dbTasks)
function addNewTask(content: string): void {
const task: ITask = {
id: uuid(),
content,
isComplete: false
}
setTask(state => [task, ...state])
}
function deleteTask(id: string): void {
const filteredTasks = tasks.filter(task => task.id !== id)
setTask(filteredTasks)
}
function toggleTasksStatus(id: string): void {
let updatedTasks = tasks.map(task =>
task.id === id ? { ...task, isComplete: !task.isComplete } : task
) as ITask[]
updatedTasks = updatedTasks.sort((a, b) =>
a.isComplete && b.isComplete ? 0 : !a.isComplete && b.isComplete ? -1 : 1
)
setTask(updatedTasks)
}
return (
<>
<Header />
<div className={styles.wrapper}>
<main>
<NewTask onCreateNewTask={addNewTask} />
<TasksBoard
tasks={tasks}
onDeleteTask={deleteTask}
onToggleTasksStatus={toggleTasksStatus}
/>
</main>
</div>
</>
)
}
export default App