From 9eb24e8a13b27cd62e1257bc5be3d04a31b70567 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 30 Dec 2016 13:06:35 +0530 Subject: [PATCH] [fix] treeview fixes frappe/erpnext#7318 --- frappe/public/js/frappe/list/doclistview.js | 4 +++ frappe/public/js/frappe/ui/tree.js | 27 ++++++++++++--------- frappe/public/js/frappe/views/treeview.js | 19 +++++++++------ 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/frappe/public/js/frappe/list/doclistview.js b/frappe/public/js/frappe/list/doclistview.js index dc33612e00..0e73416ea0 100644 --- a/frappe/public/js/frappe/list/doclistview.js +++ b/frappe/public/js/frappe/list/doclistview.js @@ -60,6 +60,10 @@ $(document).on("save", function(event, doc) { }); frappe.views.set_list_as_dirty = function(doctype) { + if(frappe.views.trees[doctype]) { + frappe.views.trees[doctype].tree.refresh(); + } + var list_page = "List/" + doctype; if(frappe.pages[list_page]) { if(frappe.pages[list_page].doclistview) { diff --git a/frappe/public/js/frappe/ui/tree.js b/frappe/public/js/frappe/ui/tree.js index 8756376ce1..24d03bdfcc 100644 --- a/frappe/public/js/frappe/ui/tree.js +++ b/frappe/public/js/frappe/ui/tree.js @@ -24,6 +24,9 @@ frappe.ui.Tree = Class.extend({ }); this.rootnode.toggle(); }, + refresh: function() { + this.selected_node.reload_parent(); + }, get_selected_node: function() { return this.selected_node; }, @@ -50,11 +53,11 @@ frappe.ui.TreeNode = Class.extend({ }, make: function() { var me = this; - this.$a = $('') + this.tree_link = $('') .click(function(event) { me.tree.selected_node = me; me.tree.wrapper.find(".tree-link.active").removeClass("active"); - me.$a.addClass("active"); + me.tree_link.addClass("active"); if(me.tree.toolbar) { me.show_toolbar(); } @@ -82,9 +85,9 @@ frappe.ui.TreeNode = Class.extend({ icon_html = ''; } $(icon_html + ' ' + this.get_label() + ""). - appendTo(this.$a); + appendTo(this.tree_link); - this.$a.find('i, a').click(function() { + this.tree_link.find('i, a').click(function() { setTimeout(function() { me.toolbar.find(".btn-expand").click(); }, 100); }); }, @@ -113,7 +116,7 @@ frappe.ui.TreeNode = Class.extend({ }, make_toolbar: function() { var me = this; - this.toolbar = $('').insertAfter(this.$a); + this.toolbar = $('').insertAfter(this.tree_link); $.each(this.tree.toolbar, function(i, item) { if(item.toggle_btn) { @@ -179,20 +182,20 @@ frappe.ui.TreeNode = Class.extend({ } // open close icon - this.$a.find('i').removeClass(); + this.tree_link.find('i').removeClass(); if(!this.expanded) { - this.$a.find('i').addClass('fa fa-fw fa-folder-open text-muted'); + this.tree_link.find('i').addClass('fa fa-fw fa-folder-open text-muted'); } else { - this.$a.find('i').addClass('fa fa-fw fa-folder text-muted'); + this.tree_link.find('i').addClass('fa fa-fw fa-folder text-muted'); } } // select this link this.tree.wrapper.find('.selected') .removeClass('selected'); - this.$a.toggleClass('selected'); + this.tree_link.toggleClass('selected'); this.expanded = !this.expanded; - + this.expanded ? this.parent.addClass('opened') : this.parent.removeClass('opened'); @@ -202,7 +205,7 @@ frappe.ui.TreeNode = Class.extend({ this.load(); }, reload_parent: function() { - this.parent_node.load(); + this.parent_node.load_all(); }, load_all: function(callback) { var me = this; @@ -240,7 +243,7 @@ frappe.ui.TreeNode = Class.extend({ if (data) { $.each(data, function(i, v) { var child_node = node.addnode(v); - child_node.$a + child_node.tree_link .data('node-data', v) .data('node', child_node); }); diff --git a/frappe/public/js/frappe/views/treeview.js b/frappe/public/js/frappe/views/treeview.js index b06eca5d3a..3cde94db3c 100644 --- a/frappe/public/js/frappe/views/treeview.js +++ b/frappe/public/js/frappe/views/treeview.js @@ -2,6 +2,7 @@ // MIT License. See license.txt frappe.provide("frappe.treeview_settings"); +frappe.provide('frappe.views.trees'); cur_tree = null; frappe.views.TreeFactory = frappe.views.Factory.extend({ @@ -17,7 +18,7 @@ frappe.views.TreeFactory = frappe.views.Factory.extend({ return false; } $.extend(options, frappe.treeview_settings[route[1]] || {}); - new frappe.views.TreeView(options); + frappe.views.trees[options.doctype] = new frappe.views.TreeView(options); }); } }); @@ -145,7 +146,8 @@ frappe.views.TreeView = Class.extend({ condition: function(node) { return !node.root && me.can_write; }, click: function(node) { frappe.model.rename_doc(me.doctype, node.label, function(new_name) { - node.$a.html(new_name); + node.tree_link.find('a').text(new_name); + node.label = new_name; }); }, btnClass: "hidden-xs" @@ -185,12 +187,13 @@ frappe.views.TreeView = Class.extend({ var d = new frappe.ui.Dialog({ title: __('New {0}',[__(me.doctype)]), fields: me.fields - }) + }); - me.args["parent_"+me.doctype.toLowerCase().replace(/ /g,'_')] = me.args["parent"]; + var args = $.extend({}, me.args); + args["parent_"+me.doctype.toLowerCase().replace(/ /g,'_')] = me.args["parent"]; d.set_value("is_group", 0); - d.set_values(me.args); + d.set_values(args); // create d.set_primary_action(__("Create New"), function() { @@ -210,18 +213,18 @@ frappe.views.TreeView = Class.extend({ v.root_type = null; } - $.extend(me.args, v) + $.extend(args, v) return frappe.call({ method: me.opts.add_tree_node || "frappe.desk.treeview.add_node", - args: me.args, + args: args, callback: function(r) { if(!r.exc) { d.hide(); if(node.expanded) { node.toggle_node(); } - node.reload(); + node.load_all(); } } });