From 3026801cf0e635c2ca62a4a4b7c8cdbaa4f68cf6 Mon Sep 17 00:00:00 2001 From: prssanna Date: Thu, 21 Jan 2021 10:30:16 +0530 Subject: [PATCH] fix: kanban switcher in page custom actions --- .../public/js/frappe/list/list_view_select.js | 42 ++++++++++++++----- frappe/public/js/frappe/ui/page.js | 12 +++--- .../js/frappe/views/kanban/kanban_view.js | 2 +- 3 files changed, 38 insertions(+), 18 deletions(-) diff --git a/frappe/public/js/frappe/list/list_view_select.js b/frappe/public/js/frappe/list/list_view_select.js index 2010ffabf6..c21d15315d 100644 --- a/frappe/public/js/frappe/list/list_view_select.js +++ b/frappe/public/js/frappe/list/list_view_select.js @@ -113,16 +113,9 @@ frappe.views.ListViewSelect = class ListViewSelect condition: true, action: () => this.setup_kanban_boards(), current_view_handler: () => { - frappe.views.KanbanView.get_kanbans(this.doctype).then((kanbans) => { - this.setup_dropdown_in_sidebar( - 'Kanban', - kanbans, - { - label: __('New Kanban Board'), - action: () => frappe.views.KanbanView.show_kanban_dialog(this.doctype) - } - ); - }); + frappe.views.KanbanView.get_kanbans(this.doctype).then((kanbans) => + this.setup_kanban_switcher(kanbans) + ); } }, } @@ -154,7 +147,7 @@ frappe.views.ListViewSelect = class ListViewSelect `; } else { items.map(item => { - if (item.name == frappe.utils.to_title_case(frappe.get_route().slice(-1)[0] || '')) { + if (item.name == this.get_page_name()) { placeholder = item.name; } html += `
  • ${item.name}
  • `; @@ -173,6 +166,33 @@ frappe.views.ListViewSelect = class ListViewSelect views_wrapper.removeClass('hide'); } + setup_kanban_switcher(kanbans) { + const kanban_switcher = + this.page.add_custom_button_group( + __('Select Kanban'), null, this.list_view.$filter_section + ); + + kanbans.map(k => { + this.page.add_custom_menu_item( + kanban_switcher, + k.name, + () => this.set_route('kanban', k.name), + false + ); + }); + + this.page.add_custom_menu_item( + kanban_switcher, + __('Create New Kanban Board'), + () => frappe.views.KanbanView.show_kanban_dialog(this.doctype), + true + ); + } + + get_page_name() { + return frappe.utils.to_title_case(frappe.get_route().slice(-1)[0] || '') + } + get_reports() { // add reports linked to this doctype to the dropdown let added = []; diff --git a/frappe/public/js/frappe/ui/page.js b/frappe/public/js/frappe/ui/page.js index 2b13423af5..89f477fd6c 100644 --- a/frappe/public/js/frappe/ui/page.js +++ b/frappe/public/js/frappe/ui/page.js @@ -436,9 +436,9 @@ frappe.ui.Page = Class.extend({ if (standard) { $li.appendTo(parent); } else { - this.divider = parent.find(".divider"); + this.divider = parent.find(".dropdown-divider"); if(!this.divider.length) { - this.divider = $('
  • ').prependTo(parent); + this.divider = $('').prependTo(parent); } $li.addClass("user-action").insertBefore(this.divider); } @@ -506,7 +506,7 @@ frappe.ui.Page = Class.extend({ }, add_divider: function() { - return $('
  • ').appendTo(this.menu); + return $('').appendTo(this.menu); }, get_or_add_inner_group_button: function(label) { @@ -693,7 +693,7 @@ frappe.ui.Page = Class.extend({ add_custom_button_group: function(label, icon, parent) { let dropdown_label = ``; if (icon) { @@ -708,7 +708,7 @@ frappe.ui.Page = Class.extend({ } let custom_btn_group = $(` -
    +
    @@ -717,7 +717,7 @@ frappe.ui.Page = Class.extend({ `); if (!parent) parent = this.custom_actions; - this.custom_actions.removeClass('hide').append(custom_btn_group); + parent.removeClass('hide').append(custom_btn_group); return custom_btn_group.find('.dropdown-menu'); }, diff --git a/frappe/public/js/frappe/views/kanban/kanban_view.js b/frappe/public/js/frappe/views/kanban/kanban_view.js index 665cf096e4..58b8314a49 100644 --- a/frappe/public/js/frappe/views/kanban/kanban_view.js +++ b/frappe/public/js/frappe/views/kanban/kanban_view.js @@ -205,7 +205,7 @@ frappe.views.KanbanView.get_kanbans = function (doctype) { .then((kanban_boards) => { if (kanban_boards) { kanban_boards.forEach(board => { - let route = `/app/${frappe.router.slug(board.reference_doctype)}/kanban/${board.name}`; + let route = `/app/${frappe.router.slug(board.reference_doctype)}/view/kanban/${board.name}`; kanbans.push({ name: board.name, route: route }); }); }