]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/js/dojo/openils/widget/PCrudFilterDialog.js
more work on pcrud filter dialog. added filter option to autogrid. repaired faulty...
[Evergreen.git] / Open-ILS / web / js / dojo / openils / widget / PCrudFilterDialog.js
1
2 if(!dojo._hasResource['openils.widget.PCrudFilterDialog']) {
3     dojo.provide('openils.widget.PCrudFilterDialog');
4     dojo.require('openils.widget.AutoFieldWidget');
5     dojo.require('dijit.form.FilteringSelect');
6     dojo.require('dijit.form.Button');
7     dojo.require('dojo.data.ItemFileReadStore');
8     dojo.require('dijit.Dialog');
9     dojo.require('openils.Util');
10
11     /**
12      * Given a fieldmapper object, this builds a pop-up dialog used for editing the object
13      */
14
15     dojo.declare(
16         'openils.widget.PCrudFilterDialog',
17         [dijit.Dialog, openils.widget.AutoWidget],
18         {
19
20             constructor : function(args) {
21                 for(var k in args)
22                     this[k] = args[k];
23                 this.widgetIndex = 0;
24                 this.widgetCache = {};
25             },
26
27             /**
28              * Builds a basic table of key / value pairs.  Keys are IDL display labels.
29              * Values are dijit's, when values set
30              */
31             startup : function() {
32                 var self = this;
33                 this.inherited(arguments);
34                 this.initAutoEnv();
35                 var realFieldList = this.sortedFieldList.filter(
36                     function(item) { return !item.virtual; });
37                 this.fieldStore = new dojo.data.ItemFileReadStore({
38                     data : {
39                         identifier : 'name',
40                         name : 'label',
41                         items : realFieldList.map(
42                             function(item) {
43                                 return {label:item.label, name:item.name};
44                             }
45                         )
46                     }
47                 });
48                 
49                 // TODO i18n/CSS
50                 dojo.place(
51                     dojo.create(
52                         'div', 
53                         {innerHTML:'Filter Selector', style:'text-align:center;width:100%;padding:10px;'}
54                     ), this.domNode);
55
56                 dojo.place(
57                     new dijit.form.Button({
58                         label:"Apply",
59                         onClick : function() {
60                             if(self.onApply)
61                                 self.onApply(self.compileFilter());
62                             self.hide();
63                         }
64                     }).domNode, this.domNode);
65
66                 dojo.place(
67                     new dijit.form.Button({
68                         label:"Cancel",
69                         onClick : function() {
70                             if(self.onCancel)
71                                 self.onCancel();
72                             self.hide();
73                         }
74                     }).domNode, this.domNode);
75
76                 this.table = dojo.place(dojo.create('table'), this.domNode);
77                 openils.Util.addCSSClass(this.table, 'oils-fm-edit-dialog');
78                 this.insertFieldSelector();
79             },
80
81             insertFieldSelector : function() {
82                 var selector = new dijit.form.FilteringSelect({labelAttr:'label', store:this.fieldStore});
83                 var row = dojo.place(dojo.create('tr'), this.table);
84                 var selectorTd = dojo.place(dojo.create('td'), row);
85                 var valueTd = dojo.place(dojo.create('td'), row);
86                 dojo.place(selector.domNode, selectorTd);
87
88                 // dummy text box
89                 dojo.place(new dijit.form.TextBox().domNode, valueTd);
90
91                 // when a field is selected, update the value widget
92                 var self = this;
93                 dojo.connect(selector, 'onChange',
94                     function(value) {
95
96                         if(valueTd.childNodes[0]) 
97                             valueTd.removeChild(valueTd.childNodes[0]);
98
99                         var widget = new openils.widget.AutoFieldWidget({
100                             fmClass : self.fmClass, 
101                             fmField : value,
102                             parentNode : dojo.place(dojo.create('div'), valueTd)
103                         });
104                         widget.build();
105
106                         if(self.widgetCache[selector.widgetIndex]) {
107                             self.widgetCache[selector.widgetIndex].widget.destroy();
108                             delete self.widgetCache[selector.widgetIndex];
109                         }
110
111                         selector.widgetIndex = this.widgetIndex;
112                         self.widgetCache[self.widgetIndex++] = widget;
113                     }
114                 );
115             },
116
117             compileFilter : function() {
118                 var filter = {};
119                 for(var i in this.widgetCache) {
120                     var widget = this.widgetCache[i];
121                     filter[widget.fmField] = widget.getFormattedValue();
122                 }
123                 return filter;
124             }
125         }
126     );
127 }
128