diff --git a/frappe/public/js/frappe/ui/notifications/notifications.js b/frappe/public/js/frappe/ui/notifications/notifications.js
index 849c858725..c2bede6b72 100644
--- a/frappe/public/js/frappe/ui/notifications/notifications.js
+++ b/frappe/public/js/frappe/ui/notifications/notifications.js
@@ -133,130 +133,6 @@ frappe.ui.Notifications = class Notifications {
// ------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------------
- get_open_document_config(e) {
- this.open_docs_config = {
- ToDo: { label: __('To Do') },
- Event: { label: __('Calendar'), route: 'List/Event/Calendar' }
- };
-
- let hide = $(e.currentTarget)
- .next()
- .hasClass('in');
- if (!hide) {
- frappe.ui.notifications.get_notification_config().then(r => {
- this.open_document_list = r;
- this.render_open_document_count();
- });
- }
- }
-
- render_open_document_count() {
- this.$open_docs.html('');
- let defaults = ['ToDo'];
- this.get_counts(this.open_document_list['open_count_doctype'], 1, defaults);
- let targets = { doctypes: {} },
- map = this.open_document_list['targets'];
-
- Object.keys(map).map(doctype => {
- Object.keys(map[doctype]).map(doc => {
- targets[doc] = map[doctype][doc];
- targets.doctypes[doc] = doctype;
- });
- });
-
- this.get_counts(targets, 1, null, ['doctypes'], true);
- this.get_counts(
- this.open_document_list['open_count_doctype'],
- 0,
- null,
- defaults
- );
- }
-
- get_counts(map, divide, keys, excluded = [], target = false) {
- let empty_map = 1;
- keys = keys
- ? keys
- : Object.keys(map).sort().filter(e => !excluded.includes(e));
- keys.map(key => {
- let doc_dt = map.doctypes ? map.doctypes[key] : undefined;
- if (map[key] > 0 || target) {
- this.add_open_document_html(key, map[key], doc_dt, target);
- empty_map = 0;
- }
- });
-
- if (divide && !empty_map) {
- this.$open_docs.append($('
'));
- }
- }
-
- add_open_document_html(name, value, doc_dt, target = false) {
- let label = this.open_docs_config[name]
- ? this.open_docs_config[name].label
- : name;
- let title = target ? `title="${__('Your Target')}"` : '';
- let $list_item = !target
- ? $(`
- ${__(label)}
- ${value}
- `)
- : $(`
- ${__(label)}
-
- `);
-
- this.$open_docs.append($list_item);
- if (!target) this.total += value;
- }
-
- route_to_document_type(e) {
- this.dropdown.removeClass('open');
- this.dropdown.trigger('hide.bs.dropdown');
- let doctype = $(e.currentTarget).attr('data-doctype');
- let docname = $(e.currentTarget).attr('data-docname');
- if (!docname) {
- let config = this.open_docs_config[doctype] || {};
- if (config.route) {
- frappe.set_route(config.route);
- } else if (config.click) {
- config.click();
- } else {
- frappe.ui.notifications.show_open_count_list(doctype);
- }
- } else {
- frappe.set_route('Form', doctype, docname);
- }
- }
-
- update_dropdown() {
- this.get_notifications_list(1).then(r => {
- let new_item = r[0];
- this.dropdown_items.unshift(new_item);
- if (this.dropdown_items.length > this.max_length) {
- this.dropdown_list
- .find('.recent-notification')
- .last()
- .remove();
- this.dropdown_items.pop();
- }
-
- this.insert_into_dropdown();
- });
- }
-
- insert_into_dropdown() {
- let new_item = this.dropdown_items[0];
- let new_item_html = this.get_dropdown_item_html(new_item);
- $(new_item_html).prependTo(this.dropdown_list.find(this.$notifications));
- this.change_activity_status();
- }
-
change_activity_status() {
if (this.dropdown_list.find('.activity-status')) {
this.dropdown_list.find('.activity-status').replaceWith(
@@ -272,7 +148,7 @@ frappe.ui.Notifications = class Notifications {
frappe.call(
'frappe.desk.doctype.notification_log.notification_log.mark_as_read',
{ docname: docname }
- ).then(()=> {
+ ).then(() => {
$el.removeClass('unread');
});
}
@@ -300,17 +176,6 @@ frappe.ui.Notifications = class Notifications {
);
}
- setup_notification_listeners() {
- frappe.realtime.on('notification', () => {
- this.dropdown.find('.notifications-indicator').show();
- this.update_dropdown();
- });
-
- frappe.realtime.on('indicator_hide', () => {
- this.dropdown.find('.notifications-indicator').hide();
- });
- }
-
setup_dropdown_events() {
this.dropdown.on('hide.bs.dropdown', e => {
let hide = $(e.currentTarget).data('closable');
@@ -349,7 +214,7 @@ frappe.ui.notifications = {
show_open_count_list(doctype) {
if (!frappe.ui.notifications.config) {
- this.get_notification_config().then(()=> {
+ this.get_notification_config().then(() => {
this.route_to_list_with_filters(doctype);
});
} else {
@@ -388,21 +253,45 @@ class BaseNotificaitonsView {
class NotificationsView extends BaseNotificaitonsView {
make() {
+ this.setup_notification_listeners();
this.get_notifications_list(this.max_length).then(list => {
this.dropdown_items = list;
this.render_notifications_dropdown();
+ this.setup_events();
});
}
+ update_dropdown() {
+ this.get_notifications_list(1).then(r => {
+ let new_item = r[0];
+ this.dropdown_items.unshift(new_item);
+ if (this.dropdown_items.length > this.max_length) {
+ this.dropdown_list
+ .find('.recent-notification')
+ .last()
+ .remove();
+ this.dropdown_items.pop();
+ }
+
+ this.insert_into_dropdown();
+ });
+ }
+
+ insert_into_dropdown() {
+ let new_item = this.dropdown_items[0];
+ let new_item_html = this.get_dropdown_item_html(new_item);
+ $(new_item_html).prependTo(this.dropdown_list.find(this.$notifications));
+ this.change_activity_status();
+ }
+
get_dropdown_item_html(field) {
let doc_link = this.get_item_link(field);
let read_class = field.read ? '' : 'unread';
- let mark_read_action = field.read ? '': 'data-action="mark_as_read"';
let message = field.subject;
let title = message.match(/(.*?)<\/b>/);
- message = title ? message.replace(title[1], frappe.ellipsis(title[1], 100)): message;
+ message = title ? message.replace(title[1], frappe.ellipsis(title[1], 100)) : message;
let timestamp = frappe.datetime.comment_when(field.creation);
let message_html = `