[minor] expand all in tree frappe/erpnext#6915 (#2431)
This commit is contained in:
parent
d921ae839c
commit
e0d582bfd4
4 changed files with 74 additions and 22 deletions
|
|
@ -2,7 +2,33 @@
|
|||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
import frappe, json
|
||||
from frappe import _
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_all_nodes(tree_method, tree_args, parent):
|
||||
'''Recursively gets all data from tree nodes'''
|
||||
|
||||
tree_method = frappe.get_attr(tree_method)
|
||||
|
||||
if not tree_method in frappe.whitelisted:
|
||||
frappe.throw(_("Not Permitted"), frappe.PermissionError)
|
||||
|
||||
frappe.local.form_dict = frappe._dict(json.loads(tree_args))
|
||||
frappe.local.form_dict.parent = parent
|
||||
data = tree_method()
|
||||
out = [dict(parent=parent, data=data)]
|
||||
|
||||
to_check = [d.value for d in data if d.expandable]
|
||||
while to_check:
|
||||
frappe.local.form_dict.parent = to_check.pop()
|
||||
data = tree_method()
|
||||
out.append(dict(parent=frappe.local.form_dict.parent, data=data))
|
||||
for d in data:
|
||||
if d.expandable:
|
||||
to_check.append(d.value)
|
||||
|
||||
return out
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_children():
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ frappe.search = {
|
|||
if(route[0]==='Form') {
|
||||
values.push([route[2], route]);
|
||||
}
|
||||
else if(in_list(['List', 'Report', 'modules', 'query-report'], route[0])) {
|
||||
else if(in_list(['List', 'Report', 'Tree', 'modules', 'query-report'], route[0])) {
|
||||
if(route[1]) {
|
||||
values.push([route[1], route]);
|
||||
}
|
||||
|
|
@ -146,7 +146,7 @@ frappe.search = {
|
|||
if(match[1][0]==='Form') {
|
||||
out.label = __(match[1][1]) + " " + match[1][2].bold();
|
||||
out.value = __(match[1][1]) + " " + match[1][2];
|
||||
} else if(in_list(['List', 'Report', 'modules', 'query-report'], match[1][0])) {
|
||||
} else if(in_list(['List', 'Report', 'Tree', 'modules', 'query-report'], match[1][0])) {
|
||||
var type = match[1][0], label = type;
|
||||
if(type==='modules') label = 'Module';
|
||||
else if(type==='query-report') label = 'Report';
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ frappe.ui.TreeNode = Class.extend({
|
|||
var $li = $('<li class="tree-node">');
|
||||
if(this.tree.drop) $li.draggable({revert:true});
|
||||
return new frappe.ui.TreeNode({
|
||||
tree:this.tree,
|
||||
tree: this.tree,
|
||||
parent: $li.appendTo(this.$ul),
|
||||
parent_label: this.label,
|
||||
label: data.value,
|
||||
|
|
@ -200,6 +200,23 @@ frappe.ui.TreeNode = Class.extend({
|
|||
reload_parent: function() {
|
||||
this.parent_node.load();
|
||||
},
|
||||
load_all: function(callback) {
|
||||
var me = this;
|
||||
return frappe.call({
|
||||
method: 'frappe.desk.treeview.get_all_nodes',
|
||||
args: {
|
||||
tree_args: this.tree.args,
|
||||
tree_method: this.tree.method,
|
||||
parent: this.data.value
|
||||
},
|
||||
callback: function(r) {
|
||||
$.each(r.message, function(i, d) {
|
||||
me.render_expand_node(me.tree.nodes[d.parent], d.data);
|
||||
});
|
||||
if(callback) { callback(); }
|
||||
}
|
||||
});
|
||||
},
|
||||
load: function(callback) {
|
||||
var node = this;
|
||||
args = $.extend(this.tree.args || {}, {
|
||||
|
|
@ -210,20 +227,23 @@ frappe.ui.TreeNode = Class.extend({
|
|||
method: this.tree.method,
|
||||
args: args,
|
||||
callback: function(r) {
|
||||
node.$ul.empty();
|
||||
if (r.message) {
|
||||
$.each(r.message, function(i, v) {
|
||||
var child_node = node.addnode(v);
|
||||
child_node.$a
|
||||
.data('node-data', v)
|
||||
.data('node', child_node);
|
||||
});
|
||||
}
|
||||
|
||||
node.expanded = false;
|
||||
node.toggle_node(callback);
|
||||
node.loaded = true;
|
||||
node.render_expand_node(node, r.message, callback);
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
render_expand_node: function(node, data, callback) {
|
||||
node.$ul.empty();
|
||||
if (data) {
|
||||
$.each(data, function(i, v) {
|
||||
var child_node = node.addnode(v);
|
||||
child_node.$a
|
||||
.data('node-data', v)
|
||||
.data('node', child_node);
|
||||
});
|
||||
}
|
||||
|
||||
node.expanded = false;
|
||||
node.toggle_node(callback);
|
||||
node.loaded = true;
|
||||
},
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
// MIT License. See license.txt
|
||||
|
||||
frappe.provide("frappe.treeview_settings")
|
||||
frappe.provide("frappe.treeview_settings");
|
||||
cur_tree = null;
|
||||
|
||||
frappe.views.TreeFactory = frappe.views.Factory.extend({
|
||||
make: function(route) {
|
||||
|
|
@ -64,6 +65,10 @@ frappe.views.TreeView = Class.extend({
|
|||
this.page.main.css({
|
||||
"min-height": "300px",
|
||||
"padding-bottom": "25px"
|
||||
});
|
||||
|
||||
this.page.add_inner_button(__('Expand All'), function() {
|
||||
me.tree.rootnode.load_all();
|
||||
})
|
||||
},
|
||||
make_filters: function(){
|
||||
|
|
@ -73,7 +78,7 @@ frappe.views.TreeView = Class.extend({
|
|||
if(frappe.route_options && frappe.route_options[filter.fieldname]) {
|
||||
filter.default = frappe.route_options[filter.fieldname]
|
||||
}
|
||||
|
||||
|
||||
me.page.add_field(filter).$input
|
||||
.change(function() {
|
||||
me.args[$(this).attr("data-fieldname")] = $(this).val();
|
||||
|
|
@ -111,10 +116,11 @@ frappe.views.TreeView = Class.extend({
|
|||
get_label: me.opts.get_label,
|
||||
onrender: me.opts.onrender
|
||||
});
|
||||
cur_tree = this.tree;
|
||||
},
|
||||
get_toolbar: function(){
|
||||
var me = this;
|
||||
|
||||
|
||||
var toolbar = [
|
||||
{toggle_btn: true},
|
||||
{
|
||||
|
|
@ -155,7 +161,7 @@ frappe.views.TreeView = Class.extend({
|
|||
btnClass: "hidden-xs"
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
if(this.opts.toolbar && this.opts.extend_toolbar) {
|
||||
return toolbar.concat(this.opts.toolbar)
|
||||
} else if (this.opts.toolbar && !this.opts.extend_toolbar) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue