-
Notifications
You must be signed in to change notification settings - Fork 49
/
humhub.mail.conversation.js
119 lines (102 loc) · 3.67 KB
/
humhub.mail.conversation.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
humhub.module('mail.conversation', function (module, require, $) {
var Widget = require('ui.widget').Widget;
var modal = require('ui.modal');
var client = require('client');
var event = require('event');
var mail = require('mail.notification');
var user = require('user');
var view = require('ui.view');
var submitEditEntry = function (evt) {
modal.submit(evt).then(function (response) {
if (response.success) {
var entry = getEntry(evt.$trigger.data('entry-id'));
if (entry) {
setTimeout(function () {
entry.replace(response.content);
}, 300)
}
return;
}
module.log.error(null, true);
}).catch(function (e) {
module.log.error(e, true);
});
};
var deleteEntry = function (evt) {
var entry = getEntry(evt.$trigger.data('entry-id'));
if (!entry) {
module.log.error(null, true);
return;
}
client.post(entry.options.deleteUrl).then(function (response) {
modal.global.close();
if (response.success) {
setTimeout(function () {
entry.remove();
}, 1000);
}
}).catch(function (e) {
module.log.error(e, true);
});
};
var getEntry = function (id) {
return Widget.instance('.mail-conversation-entry[data-entry-id="' + id + '"]');
};
var getRootView = function () {
return Widget.instance('#mail-conversation-root');
};
var init = function () {
event.on('humhub:modules:mail:live:NewUserMessage', function (evt, events) {
if(!$('#inbox').length) {
return;
}
var root = getRootView();
var updated = false;
var updatedMessages = [];
events.forEach(function (event) {
var isOwn = event.data['user_guid'] == user.guid();
updatedMessages.push(event.data.message_id);
if (!updated && root && root.options.messageId == event.data.message_id) {
root.loadUpdate();
updated = true;
root.markSeen(event.data.message_id);
} else if (!isOwn && root) {
var $entry = getOverViewEntry(event.data.message_id);
if(!$entry.is('.selected')) {
$entry.find('.new-message-badge').show();
}
}
});
Widget.instance('#inbox').updateEntries(updatedMessages);
}).on('humhub:modules:mail:live:UserMessageDeleted', function (evt, events, update) {
if(!$('#inbox').length) {
return;
}
events.forEach(function (event) {
var entry = getEntry(event.data.entry_id);
if (entry) {
entry.remove();
}
mail.setMailMessageCount(event.data.count);
});
});
};
var getOverViewEntry = function (id) {
return $('#mail-conversation-overview').find('[data-message-preview="' + id + '"]');
};
var leave = function (evt) {
client.post(evt).then(function (response) {
if (response.redirect) {
client.pjax.redirect(response.redirect);
}
}).catch(function (e) {
module.log.error(e, true);
});
};
module.export({
init: init,
leave: leave,
submitEditEntry: submitEditEntry,
deleteEntry: deleteEntry,
});
});