diff --git a/frappe/desk/doctype/kanban_board/kanban_board.py b/frappe/desk/doctype/kanban_board/kanban_board.py index 6913377af5..ae77d6fbac 100644 --- a/frappe/desk/doctype/kanban_board/kanban_board.py +++ b/frappe/desk/doctype/kanban_board/kanban_board.py @@ -160,4 +160,11 @@ def set_indicator(board_name, column_name, indicator): column.indicator = indicator board.save() - return board \ No newline at end of file + return board + + +@frappe.whitelist() +def save_filters(board_name, filters): + '''Save filters silently''' + frappe.db.set_value('Kanban Board', board_name, 'filters', + filters, update_modified=False) diff --git a/frappe/public/js/frappe/list/doclistview.js b/frappe/public/js/frappe/list/doclistview.js index 5c548826c3..389a7edbe5 100644 --- a/frappe/public/js/frappe/list/doclistview.js +++ b/frappe/public/js/frappe/list/doclistview.js @@ -139,9 +139,18 @@ frappe.views.DocListView = frappe.ui.Listing.extend({ this.setup_filterable(); this.init_filters(); this.init_sort_selector(); + this.set_title(); this.init_headers(); }, + set_title: function() { + if(this.current_view==='Kanban') { + this.page.set_title(this.kanban_board); + } else { + this.page.set_title(__(this.doctype)); + } + }, + init_headers: function() { this.page.main.find(".list-headers").empty(); @@ -350,6 +359,7 @@ frappe.views.DocListView = frappe.ui.Listing.extend({ // if view has changed, re-render header if(this.current_view !== this.last_view) { + this.set_title(); this.init_headers(); this.dirty = true; } @@ -357,6 +367,7 @@ frappe.views.DocListView = frappe.ui.Listing.extend({ // if kanban board changed, set filters if(this.current_view==="Kanban" && this.kanban_board!==this.last_kanban_board) { + this.set_title(); this.init_headers(); this.set_kanban_board_filters(); return; diff --git a/frappe/public/js/frappe/list/list_sidebar.js b/frappe/public/js/frappe/list/list_sidebar.js index 19bc5b5d77..e00ea0c8f4 100644 --- a/frappe/public/js/frappe/list/list_sidebar.js +++ b/frappe/public/js/frappe/list/list_sidebar.js @@ -51,7 +51,6 @@ frappe.views.ListSidebar = Class.extend({ if(this.current_view === 'Kanban') { this.kanban_board = route[3]; - this.page.set_title(this.doctype +" - "+ this.kanban_board); } } diff --git a/frappe/public/js/frappe/views/kanban/kanban_view.js b/frappe/public/js/frappe/views/kanban/kanban_view.js index d33956cac4..c75562fa2a 100644 --- a/frappe/public/js/frappe/views/kanban/kanban_view.js +++ b/frappe/public/js/frappe/views/kanban/kanban_view.js @@ -66,22 +66,28 @@ frappe.provide("frappe.views"); }); }, set_filter_state: function (updater) { - updater.set({ - filters_modified: is_filters_modified(this.board, this.cur_list) - }); + is_filters_modified(this.board, this.cur_list) + .then(function(flag) { + updater.set({ + filters_modified: flag + }); + }); }, save_filters: function (updater) { var filters = JSON.stringify(this.cur_list.filter_list.get_filters()); - frappe.db.set_value( - 'Kanban Board', this.board.name, - 'filters', filters, - function() { - updater.set({ filters_modified: false }); - show_alert({ - message: __("Filters saved"), - indicator: 'green' - }, 1); - }); + frappe.call({ + method: method_prefix + 'save_filters', + args: { + board_name: this.board.name, + filters: filters + } + }).then(function(r) { + updater.set({ filters_modified: false }); + show_alert({ + message: __('Filters saved'), + indicator: 'green' + }, 0.5); + }); }, add_card: function (updater, card_title, column_title) { var doc = frappe.model.get_new_doc(this.doctype); @@ -285,13 +291,15 @@ frappe.provide("frappe.views"); } function bind_save_filter() { + var set_filter_state = function () { + fluxify.doAction('set_filter_state'); + } + if(isBound(self.cur_list.wrapper, 'render-complete', set_filter_state)) return; + store.on('change:filters_modified', function (modified) { if(modified) fluxify.doAction('save_filters'); }); - - self.cur_list.wrapper.on('render-complete', function () { - fluxify.doAction('set_filter_state'); - }); + self.cur_list.wrapper.on('render-complete', set_filter_state); } function setup_restore_columns() { @@ -959,8 +967,12 @@ frappe.provide("frappe.views"); } function is_filters_modified(board, cur_list) { - var list_filters = JSON.stringify(cur_list.filter_list.get_filters()); - return list_filters !== board.filters; + return new Promise(function(resolve, reject) { + setTimeout(function() { + var list_filters = JSON.stringify(cur_list.filter_list.get_filters()); + resolve(list_filters !== board.filters); + }, 2000); + }) } function is_active_column(col) { @@ -1007,4 +1019,15 @@ frappe.provide("frappe.views"); callback(indicators); }); } + + function isBound(el, event, fn) { + var events = $._data(el[0], 'events'); + var handlers = events[event]; + var flag = false; + handlers.forEach(function(h) { + if(h.handler.name === fn.name) + flag = true; + }); + return flag; + } })(); \ No newline at end of file