added support for auto-building select options from has_a links, using the selector...
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 6 Feb 2009 00:08:37 +0000 (00:08 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 6 Feb 2009 00:08:37 +0000 (00:08 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@12087 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/js/dojo/openils/widget/AutoFieldWidget.js

index 484f6f1..829f5fa 100644 (file)
@@ -104,6 +104,9 @@ if(!dojo._hasResource['openils.widget.AutoFieldWidget']) {
                     this.widgetValue = openils.Util.isTrue(this.widgetValue);
                     break;
 
+                case 'link':
+                    if(this._buildLinkSelector()) break;
+
                 default:
                     dojo.require('dijit.form.TextBox');
                     this.widget = new dijit.form.TextBox(this.dijitArgs, this.parentNode);
@@ -113,6 +116,50 @@ if(!dojo._hasResource['openils.widget.AutoFieldWidget']) {
             return this.widget;
         },
 
+        _buildLinkSelector : function() {
+            if(this.idlField.reltype != 'has_a') return false;
+            dojo.require('openils.PermaCrud');
+            dojo.require('dojo.data.ItemFileReadStore');
+            dojo.require('dijit.form.FilteringSelect');
+
+            var self = this;
+            this.async = true;
+            var linkClass = this.idlField['class'];
+            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) {
+                    vfield = rclassIdl.fields[f];
+                    break;
+                }
+            }
+            this.widget.searchAttr = this.widget.labelAttr = vfield.selector || vfield.name;
+            this.widget.valueAttr = vfield.name;
+            var list = new openils.PermaCrud().retrieveAll(linkClass);
+
+            self.widget.store = new dojo.data.ItemFileReadStore(
+                {data:fieldmapper[linkClass].toStoreData(list)}
+            );
+            self.widget.startup();
+            self._widgetLoaded();
+
+            /*
+            new openils.PermaCrud().retrieveAll(linkClass, {   
+                async : true,
+                oncomplete : function(r) {
+                    var list = openils.Util.readResponse(r, false, true);
+                    if(list) {
+                        self.widget.store = 
+                            new dojo.data.ItemFileReadStore({data:fieldmapper[linkClass].toStoreData(list)});
+                    }
+                    self.widget.startup();
+                    self._widgetLoaded();
+                }
+            });
+            */
+        },
+
         /**
          * For widgets that run asynchronously, provide a callback for finishing up
          */