-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathui.js
121 lines (104 loc) · 3.32 KB
/
ui.js
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
110
111
112
113
114
115
116
117
118
119
120
121
export class ChatUI {
constructor(l) {
this.list = l;
}
set list(l) {
this._list = l;
}
get list() {
return this._list;
}
formatDate(timestamp) {
const mesageDate = new Date(timestamp.toDate());
const currentDate = new Date();
let isToday = this.isSameDay(mesageDate, currentDate);
if (isToday) {
return this.formatTime(mesageDate);
} else {
return this.formatDateTime(mesageDate);
}
}
isSameDay(date1, date2) {
return (
date1.getFullYear() === date2.getFullYear() &&
date1.getMonth() === date2.getMonth() &&
date1.getDate() == date2.getDate()
);
}
formatTime(date) {
const hours = String(date.getHours()).padStart(2, "0");
const minutes = String(date.getMinutes()).padStart(2, "0");
return `${hours}:${minutes}`;
}
formatDateTime(date) {
const day = String(date.getDate()).padStart(2, "0");
const month = String(date.getMonth() + 1).padStart(2, "0");
const year = date.getFullYear();
const hours = String(date.getHours()).padStart(2, "0");
const minutes = String(date.getMinutes()).padStart(2, "0");
return `${day}.${month}.${year} - ${hours}:${minutes}`;
}
templateLI(docFromDb) {
const li = document.createElement("li");
const div1 = document.createElement("div");
const div2 = document.createElement("div");
const img = document.createElement("img");
img.src = "delete.png";
const time = this.formatDate(docFromDb.created_at);
div1.textContent = `${docFromDb.username}: ${docFromDb.message}`;
div2.textContent = `${time}`;
if (docFromDb.username === localStorage.username) {
li.classList.add("userMessage");
} else {
li.classList.add("otherMessage");
}
li.append(div1, div2, img);
img.addEventListener("click", (e) => {
console.log(
`clicked on trash bin -> ${document.message}, user: ${document.username}`
);
this.deleteMessage(e, docFromDb);
});
return this.list.append(li);
}
delete() {
this.list.innerHTML = "";
}
async deleteMessage(event, document) {
if (document.username !== localStorage.username) {
event.target.parentElement.remove();
} else {
if (confirm("Do you want to permanently delete this message") == true) {
try {
const querySnapshot = await db
.collection("chats")
.where("username", "==", document.username)
.where("message", "==", document.message)
.get();
querySnapshot.forEach(async (doc) => {
await doc.ref.delete();
console.log("Document successfully deleted from Firestore!");
});
} catch (error) {
console.error("Error removing document: ", error);
}
event.target.parentElement.remove();
}
}
}
organizeMessages() {
const messages = this.list.children;
const currentUser = localStorage.username;
for (let i = 0; i < messages.length; i++) {
const message = messages[i];
const isCurrentUserMessage = message.innerText.includes(currentUser);
if (isCurrentUserMessage) {
message.classList.add("userMessage");
message.classList.remove("otherMessage");
} else {
message.classList.remove("userMessage");
message.classList.add("otherMessage");
}
}
}
}