-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.mjs
More file actions
109 lines (97 loc) · 3.17 KB
/
Copy pathscript.mjs
File metadata and controls
109 lines (97 loc) · 3.17 KB
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
98
99
100
101
102
103
104
105
106
107
108
109
import { getUserIds } from "./common.mjs";
import { addData, getData } from "./storage.mjs";
import {
calculateRevisionDates,
formatDate,
stringifiedTodayDate,
upcomingItems,
} from "./dates.js";
const state = {
selectedUserId: null,
agenda: [],
};
const elements = {
userSelect: null,
statusMessage: null,
topicForm: null,
topicNameInput: null,
topicDateInput: null,
agendaList: null,
};
window.onload = function () {
const users = getUserIds();
elements.userSelect = document.getElementById("user-select");
elements.statusMessage = document.getElementById("status-message");
elements.topicForm = document.getElementById("add-topic");
elements.topicNameInput = document.getElementById("topic-name");
elements.topicDateInput = document.getElementById("topic-date");
elements.agendaList = document.getElementById("agenda-list");
elements.topicDateInput.value = stringifiedTodayDate();
populateUserDropdown(users);
elements.userSelect.addEventListener("change", handleUserSelection);
elements.topicForm.addEventListener("submit", submitTopic);
};
function populateUserDropdown(users) {
for (const user of users) {
const option = document.createElement("option");
option.value = user;
option.textContent = `User ${user}`;
elements.userSelect.appendChild(option);
}
}
function handleUserSelection(event) {
state.selectedUserId = event.target.value;
if (!state.selectedUserId) {
state.agenda = [];
elements.agendaList.textContent = "";
elements.statusMessage.textContent = "Select a user to see their agenda";
return;
}
state.agenda = getData(state.selectedUserId) || [];
renderAgenda();
}
function submitTopic(event) {
event.preventDefault();
if (!state.selectedUserId) {
elements.statusMessage.textContent = "Select a user before adding a topic";
return;
}
const topicData = new FormData(elements.topicForm);
const topicName = topicData.get("topic-name").trim();
const isDaplicate = state.agenda.some((item) => item.topic === topicName);
if (!topicName) {
elements.statusMessage.textContent = "Topic name can not be empty";
return;
}
if (isDaplicate) {
elements.statusMessage.textContent = "Topic already exist";
return;
}
const topicDate = topicData.get("topic-date");
const revisionDates = calculateRevisionDates(topicDate);
const items = revisionDates.map((date) => {
return { topic: topicName, date: date };
});
addData(state.selectedUserId, items);
state.agenda = getData(state.selectedUserId);
renderAgenda();
elements.topicForm.reset();
elements.topicDateInput.value = stringifiedTodayDate();
}
function renderAgenda() {
if (!state.selectedUserId) {
return;
}
elements.agendaList.textContent = "";
const upcomingAgendaItems = upcomingItems(state.agenda);
if (upcomingAgendaItems.length === 0) {
elements.statusMessage.textContent = "No agenda found for the current user";
} else {
elements.statusMessage.textContent = "";
}
upcomingAgendaItems.forEach((agendaItem) => {
const itemList = document.createElement("li");
itemList.textContent = `${agendaItem.topic} --- ${agendaItem.date}`;
elements.agendaList.appendChild(itemList);
});
}