-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.ts
97 lines (87 loc) · 2.81 KB
/
index.ts
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import { TodoItem } from "./todoItem";
import { TodoCollection } from "./todoCollection";
import * as inquirer from "inquirer";
import { JsonTodoCollection } from "./jsonTodoCollection";
let todos: TodoItem[] = [
new TodoItem(1, "Buy Flowers"),
new TodoItem(2, "Get Shoes"),
new TodoItem(3, "Collect Tickets"),
new TodoItem(4, "Call Joe", true)
];
let collection: TodoCollection = new JsonTodoCollection("Adam", todos);
let showCompleted = true;
function displayTodoList(): void {
console.log(
`$(collection.userName)'s Todo list `
+ `(${collection.getItemCounts().incomplete} items to do)`);
collection.getTodoItems(showCompleted).forEach(item => item.printDetails());
}
enum Commands {
Add = "Add New Task",
Complete = "Complete Task",
Toggle = "Show/Hide Completed",
Purge = "Remove Completed Tasks",
Quit = "Quit"
}
function promptAdd(): void {
console.clear();
let add: string = "add";
inquirer.prompt({ type: "input", name: add, message: "Enter task:"})
.then(answers => {
if (answers[add] !== "") {
collection.addTodo(answers[add]);
}
promptUser();
})
}
function promptComplete(): void {
console.clear();
inquirer.prompt({
type: "checkbox",
name: "complete",
message: "Mark Tasks Complete",
choices: collection.getTodoItems(showCompleted).map(item =>
({name: item.task, value: item.id, checked: item.complete}))
}).then(answers => {
let completedTasks = answers["complete"] as number[];
collection.getTodoItems(true).forEach(item =>
collection.markComplete(item.id, completedTasks.find(id => id === item.id) != undefined));
promptUser();
})
}
function promptUser(): void {
console.clear();
displayTodoList();
inquirer.prompt({
type: "list",
name: "command",
message: "Choose option",
choices: Object.values(Commands)
}).then(answers => {
switch (answers["command"]) {
case Commands.Toggle:
showCompleted = !showCompleted;
promptUser();
break;
case Commands.Add:
promptAdd();
break;
case Commands.Complete:
if (collection.getItemCounts().incomplete > 0) {
promptComplete();
} else {
promptUser();
}
break;
case Commands.Purge:
collection.removeComplete();
promptUser();
break;
}
})
}
console.clear();
console.log(`${collection.userName}'s Todo List `
+ `(${collection.getItemCounts().incomplete} items to do)`);
collection.getTodoItems(true).forEach(item => item.printDetails());
promptUser();