From 0bc3d42c29d97683946da6dea2310d706c7826da Mon Sep 17 00:00:00 2001 From: erickson Date: Mon, 16 Feb 2009 21:55:52 +0000 Subject: [PATCH] plugged in perm group tree builder git-svn-id: svn://svn.open-ils.org/ILS/trunk@12192 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../web/js/dojo/openils/widget/AutoFieldWidget.js | 54 ++++++++++++++++++++-- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/Open-ILS/web/js/dojo/openils/widget/AutoFieldWidget.js b/Open-ILS/web/js/dojo/openils/widget/AutoFieldWidget.js index 5122af2006..9f1d972ad1 100644 --- a/Open-ILS/web/js/dojo/openils/widget/AutoFieldWidget.js +++ b/Open-ILS/web/js/dojo/openils/widget/AutoFieldWidget.js @@ -7,6 +7,7 @@ if(!dojo._hasResource['openils.widget.AutoFieldWidget']) { dojo.declare('openils.widget.AutoFieldWidget', null, { async : false, + cache : {}, /** * args: @@ -88,7 +89,8 @@ if(!dojo._hasResource['openils.widget.AutoFieldWidget']) { if(this.widget) { // core widget provided for us, attach and move on - this.parentNode.appendChild(this.widget.domNode); + if(this.parentNode) // may already be in the "right" place + this.parentNode.appendChild(this.widget.domNode); return; } @@ -100,6 +102,10 @@ if(!dojo._hasResource['openils.widget.AutoFieldWidget']) { dojo.require('dijit.layout.ContentPane'); this.widget = new dijit.layout.ContentPane(this.dijitArgs, this.parentNode); + } else if(this.widgetClass) { + dojo.require(this.widgetClass); + eval('this.widget = new ' + this.widgetClass + '(this.dijitArgs, this.parentNode);'); + } else { switch(this.idlField.datatype) { @@ -159,10 +165,14 @@ if(!dojo._hasResource['openils.widget.AutoFieldWidget']) { dojo.require('dijit.form.FilteringSelect'); var self = this; + var vfield; + var rclassIdl = fieldmapper.IDL.fmclasses[linkClass]; + + if(linkClass == 'pgt') + return self._buildPermGrpSelector(); + this.async = true; this.widget = new dijit.form.FilteringSelect(this.dijitArgs, this.parentNode); - var rclassIdl = fieldmapper.IDL.fmclasses[linkClass]; - var vfield; for(var f in rclassIdl.fields) { if(self.idlField.key == rclassIdl.fields[f].name) { @@ -230,6 +240,44 @@ if(!dojo._hasResource['openils.widget.AutoFieldWidget']) { this.widget.tree = fieldmapper.aou.globalOrgTree; this.widget.startup(); } + }, + + _buildPermGrpSelector : function() { + dojo.require('openils.widget.FilteringTreeSelect'); + this.widget = new openils.widget.FilteringTreeSelect(this.dijitArgs, this.parentNode); + this.widget.searchAttr = 'name'; + + if(this.cache.permGrpTree) { + this.widget.tree = this.cache.permGrpTree; + this.widget.startup(); + return; + } + + var self = this; + this.async = true; + new openils.PermaCrud().retrieveAll('pgt', { + async : true, + oncomplete : function(r) { + var list = openils.Util.readResponse(r, false, true); + if(!list) return; + var map = {}; + var root = null; + for(var l in list) + map[list[l].id()] = list[l]; + for(var l in list) { + var node = list[l]; + var pnode = map[node.parent()]; + if(!pnode) {root = node; continue;} + if(!pnode.children()) pnode.children([]); + pnode.children().push(node); + } + self.widget.tree = self.cache.permGrpTree = root; + self.widget.startup(); + self._widgetLoaded(); + } + }); + + return true; } }); } -- 2.11.0