forked from scrollback/scrollback
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrequests.es6
110 lines (79 loc) · 2.88 KB
/
requests.es6
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
/* eslint-env browser */
"use strict";
const getAvatar = require("../lib/get-avatar.js");
module.exports = (core, config, store) => {
const promisedAction = require("../lib/promised-action.es6")(core, config, store);
core.on("conf-show", tabs => {
let container = document.createElement("div"),
users;
users = store.getRelatedUsers(tabs.room.id).filter(user => user && user.transitionType === "request");
if (users.length) {
container.classList.add("request-item");
users.forEach(user => {
let messagediv = document.createElement("div");
messagediv.classList.add("request-item-message");
let avatar = document.createElement("img");
avatar.src = getAvatar(user.picture, 64);
let message = document.createTextNode(user.id + " wants to be a " + user.transitionRole);
messagediv.appendChild(avatar);
messagediv.appendChild(message);
let approve = document.createElement("a");
approve.textContent = "Approve";
approve.classList.add("button");
approve.classList.add("approve");
let decline = document.createElement("a");
decline.textContent = "Decline";
decline.classList.add("button");
decline.classList.add("decline");
let actionsdiv = document.createElement("div");
actionsdiv.classList.add("request-item-actions");
actionsdiv.appendChild(approve);
actionsdiv.appendChild(decline);
let requestdiv = document.createElement("div");
requestdiv.classList.add("request-item");
requestdiv.appendChild(messagediv);
requestdiv.appendChild(actionsdiv);
container.appendChild(requestdiv);
function onDone(text) {
approve.classList.add("disabled");
approve.classList.remove("working");
decline.classList.add("disabled");
decline.classList.remove("working");
message.textContent = text === false ? "An error occured!" : text;
}
function onApprove() {
decline.classList.add("disabled");
approve.classList.add("working");
promisedAction("admit", {
to: tabs.room.id,
ref: user.id,
role: user.transitionRole
})
.catch(() => onDone(false))
.then(res => onDone(res.role !== user.role ? (user.id + " is now a " + res.role) : false));
}
function onDecline() {
approve.classList.add("disabled");
decline.classList.add("working");
promisedAction("admit", {
to: tabs.room.id,
ref: user.id,
role: user.role
})
.catch(() => onDone(false))
.then(res => onDone(res.role === user.role ? (user.id + "'s request was declined.") : false));
}
approve.addEventListener("click", onApprove, false);
decline.addEventListener("click", onDecline, false);
});
} else {
container.classList.add("request-item-empty");
container.textContent = "There are no requests right now.";
}
tabs.requests = {
html: container,
text: "Requests",
badge: users.length
};
}, 700);
};