-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathChatView.mjs
More file actions
79 lines (69 loc) · 2.61 KB
/
ChatView.mjs
File metadata and controls
79 lines (69 loc) · 2.61 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
/* eslint-disable no-unused-vars */
import MessagesViewModel from './viewmodels/MessagesViewModel';
import MessageViewModel from './viewmodels/MessageViewModel';
/* eslint-enable no-unused-vars */
export default class ChatView {
constructor(id) {
this._id = id;
}
get id() {
return this._id;
}
/* eslint-disable no-cond-assign */
/* eslint-disable no-unused-vars */
querySelector(selector, interval, fulfillmentCallback = (timeElapsed, currentElement, previousElement) => (currentElement || timeElapsed >= 3000), rootElement = document) {
/* eslint-enable no-unused-vars */
return new Promise((resolve) => {
let result = [], currentElement, previousElement = null, timeElapsed = 0;
void function _querySelector() {
currentElement = rootElement.querySelector(selector);
if (result = fulfillmentCallback(timeElapsed += +interval, currentElement, (previousElement || currentElement))) {
resolve((result === true) ? null : result);
} else {
previousElement = currentElement;
setTimeout(_querySelector, interval);
}
}();
});
}
/* eslint-disable no-unused-vars */
querySelectorAll(selector, interval, fulfillmentCallback = (timeElapsed, currentElements, previousElements) => ((currentElements.length || timeElapsed >= 3000) ? currentElements : false), rootElement = document) {
/* eslint-enable no-unused-vars */
return new Promise((resolve) => {
let result = [], currentElements, previousElements = [], timeElapsed = 0;
void function _querySelectorAll() {
currentElements = rootElement.querySelectorAll(selector);
if (result = fulfillmentCallback(timeElapsed += +interval, currentElements, (previousElements || currentElements))) {
resolve(result);
} else {
previousElements = currentElements;
setTimeout(_querySelectorAll, interval);
}
}();
});
}
/* eslint-enable no-cond-assign */
hasNewMessage() {
console.log('Checking for new messages');
return new Promise(async (resolve) => {
resolve(!!(await this.getMessages()).remove(this._messagesViewModel).length);
});
}
popNewMessages() {
console.log('Popping new messages');
return new Promise(async (resolve) => {
const newMessages = (await this.getMessages()).remove(this._messagesViewModel);
console.log('New messages', newMessages);
newMessages.forEach(newMessage => this._messagesViewModel.push(newMessage));
resolve(newMessages);
});
}
/* eslint-disable no-unused-vars */
async postMessage(msg) {
/* eslint-enable no-unused-vars */
throw 'async postMessage() must be implemented.';
}
async getMessages() {
throw 'async getMessages() must be implemented.';
}
}