Mercurial > lada > lada-client
comparison app/controller/Filter.js @ 1016:d6e259e76de6
Updated filter value handling.
* Save and reset buttons for values
* Reload and update query stores
* set correct values on reset.
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Tue, 02 Feb 2016 15:26:43 +0100 |
parents | af9879d72310 |
children | f4bd170f8ee6 |
comparison
equal
deleted
inserted
replaced
1015:af9879d72310 | 1016:d6e259e76de6 |
---|---|
48 }, | 48 }, |
49 'filterpanel button[action=reset]': { | 49 'filterpanel button[action=reset]': { |
50 // Map click event on Button. | 50 // Map click event on Button. |
51 click: this.reset | 51 click: this.reset |
52 }, | 52 }, |
53 'filterpanel button[action=details]': { | |
54 click: this.showDetails | |
55 }, | |
56 'filterpanel button[action=manage]': { | |
57 click: this.showManagement | |
58 }, | |
59 'filterpanel checkbox[name=favorites]': { | |
60 change: this.triggerFilterUpdate | |
61 }, | |
62 'filterpanel button[action=savedefault]': { | |
63 click: this.saveFilterDefaults | |
64 }, | |
65 'filterpanel button[action=resetdefault]': { | |
66 click: this.resetFilterDefaults | |
67 }, | |
53 'menuitem[action=about]': { | 68 'menuitem[action=about]': { |
54 // Map click event on Button. | 69 // Map click event on Button. |
55 click: this.about | 70 click: this.about |
56 } | 71 } |
57 }); | 72 }); |
66 * Two possibilities exist to do so: Proben/Messprogramme where dynamic columns exist, but the | 81 * Two possibilities exist to do so: Proben/Messprogramme where dynamic columns exist, but the |
67 * content remains of the same type and Stammdaten, were columns are fixed but the type might | 82 * content remains of the same type and Stammdaten, were columns are fixed but the type might |
68 * vary between orte, kategorien, ... | 83 * vary between orte, kategorien, ... |
69 */ | 84 */ |
70 selectSql: function(element, record) { | 85 selectSql: function(element, record) { |
71 var filters = element.up('panel[name=main]').down('fieldset[name=filtervariables]'); | 86 var filters = element.up('panel[name=main]').down('panel[name=filtervariables]'); |
87 var filterValues = element.up('panel[name=main]').down('panel[name=filtervalues]'); | |
72 | 88 |
73 if (!record[0]) { | 89 if (!record[0]) { |
74 return; | 90 return; |
75 } | 91 } |
76 // Set "Filter Auswahl" Description | 92 // Set "Filter Auswahl" Description |
155 * | 171 * |
156 * Iterate over all configured filters and add filters dynamically | 172 * Iterate over all configured filters and add filters dynamically |
157 * | 173 * |
158 * 1. Empty filters | 174 * 1. Empty filters |
159 */ | 175 */ |
160 filters.removeAll(); | 176 filterValues.removeAll(); |
161 var hide = true; | 177 var hide = true; |
162 /* 2. Iterate over all configured filters */ | 178 /* 2. Iterate over all configured filters */ |
163 var j; | 179 var j; |
164 for (j = 0; j < filterFields.length; j++) { | 180 for (j = 0; j < filterFields.length; j++) { |
165 var type = filterFields[j].type; | 181 var type = filterFields[j].type; |
166 var name = filterFields[j].dataIndex; | 182 var name = filterFields[j].dataIndex; |
167 var label = filterFields[j].label; | 183 var label = filterFields[j].label; |
168 var multi = filterFields[j].multiSelect; | 184 var multi = filterFields[j].multiSelect; |
185 var filterId = filterFields[j].id; | |
169 var field = null; | 186 var field = null; |
187 var value = filterFields[j].value; | |
170 if (type === 'text') { | 188 if (type === 'text') { |
171 field = Ext.create('Ext.form.field.Text', { | 189 field = Ext.create('Ext.form.field.Text', { |
172 name: name, | 190 name: name, |
173 fieldLabel: label | 191 fieldLabel: label, |
192 filterId: filterId, | |
193 value: value | |
174 }); | 194 }); |
175 } | 195 } |
176 else if (type === 'number') { | 196 else if (type === 'number') { |
177 field = Ext.create('Ext.form.field.Number', { | 197 field = Ext.create('Ext.form.field.Number', { |
178 name: name, | 198 name: name, |
179 labelWidth: 135, | 199 labelWidth: 135, |
180 fieldLabel: label | 200 fieldLabel: label, |
201 filterId: filterId, | |
202 value: value | |
181 }); | 203 }); |
182 } | 204 } |
183 else if (type === 'datetime') { | 205 else if (type === 'datetime') { |
184 field = Ext.create('Lada.view.widget.Datetime', { | 206 field = Ext.create('Lada.view.widget.Datetime', { |
185 name: name, | 207 name: name, |
186 labelWidth: 135, | 208 labelWidth: 135, |
187 fieldLabel: label | 209 fieldLabel: label, |
210 filterId: filterId, | |
211 value: value | |
188 }); | 212 }); |
189 } | 213 } |
190 else if (type === 'bool') { | 214 else if (type === 'bool') { |
191 field = Ext.create('Lada.view.widget.Testdatensatz', { | 215 field = Ext.create('Lada.view.widget.Testdatensatz', { |
192 name: name, | 216 name: name, |
193 labelWidth: 135, | 217 labelWidth: 135, |
194 fieldLabel: label, | 218 fieldLabel: label, |
219 value: value, | |
220 filterId: filterId, | |
195 emptyText: '' | 221 emptyText: '' |
196 }); | 222 }); |
197 } | 223 } |
198 else if (type === 'listmst') { | 224 else if (type === 'listmst') { |
199 field = Ext.create('Lada.view.widget.Messstelle', { | 225 field = Ext.create('Lada.view.widget.Messstelle', { |
200 name: name, | 226 name: name, |
201 labelWidth: 135, | 227 labelWidth: 135, |
202 fieldLabel: label, | 228 fieldLabel: label, |
203 multiSelect: multi | 229 multiSelect: multi, |
230 filterId: filterId, | |
231 value: value | |
204 }); | 232 }); |
205 } | 233 } |
206 else if (type === 'listumw') { | 234 else if (type === 'listumw') { |
207 field = Ext.create('Lada.view.widget.Umwelt', { | 235 field = Ext.create('Lada.view.widget.Umwelt', { |
208 name: name, | 236 name: name, |
209 labelWidth: 135, | 237 labelWidth: 135, |
210 fieldLabel: label, | 238 fieldLabel: label, |
239 value: value, | |
240 filterId: filterId, | |
211 multiSelect: multi, | 241 multiSelect: multi, |
212 displayTpl: Ext.create('Ext.XTemplate', | 242 displayTpl: Ext.create('Ext.XTemplate', |
213 '<tpl for=".">{id} </tpl>') | 243 '<tpl for=".">{id} </tpl>') |
214 }); | 244 }); |
215 } | 245 } |
216 else if (type === 'listdbasis') { | 246 else if (type === 'listdbasis') { |
217 field = Ext.create('Lada.view.widget.Datenbasis', { | 247 field = Ext.create('Lada.view.widget.Datenbasis', { |
218 name: name, | 248 name: name, |
219 labelWidth: 135, | 249 labelWidth: 135, |
220 fieldLabel: label, | 250 fieldLabel: label, |
251 value: value, | |
252 filterId: filterId, | |
221 multiSelect: multi | 253 multiSelect: multi |
222 }); | 254 }); |
223 } | 255 } |
224 else if (type === 'listver') { | 256 else if (type === 'listver') { |
225 field = Ext.create('Lada.view.widget.Verwaltungseinheit', { | 257 field = Ext.create('Lada.view.widget.Verwaltungseinheit', { |
226 name: name, | 258 name: name, |
227 labelWidth: 135, | 259 labelWidth: 135, |
228 fieldLabel: label, | 260 fieldLabel: label, |
261 value: value, | |
262 filterId: filterId, | |
229 multiSelect: multi | 263 multiSelect: multi |
230 }); | 264 }); |
231 } | 265 } |
232 else if (type === 'listnetz') { | 266 else if (type === 'listnetz') { |
233 field = Ext.create('Lada.view.widget.Netzbetreiber', { | 267 field = Ext.create('Lada.view.widget.Netzbetreiber', { |
234 name: name, | 268 name: name, |
235 labelWidth: 135, | 269 labelWidth: 135, |
236 fieldLabel: label, | 270 fieldLabel: label, |
271 value: value, | |
272 filterId: filterId, | |
237 multiSelect: multi | 273 multiSelect: multi |
238 }); | 274 }); |
239 } | 275 } |
240 if (field) { | 276 if (field) { |
241 filters.add(field); | 277 filterValues.add(field); |
242 filters.show(); | 278 filters.show(); |
243 hide = false; | 279 hide = false; |
244 } | 280 } |
245 } | 281 } |
246 if (hide) { | 282 if (hide) { |
253 * will perform a search to the server on refreshes the result list. | 289 * will perform a search to the server on refreshes the result list. |
254 * To do so it replaces the store of the Resultgrids. | 290 * To do so it replaces the store of the Resultgrids. |
255 */ | 291 */ |
256 search: function(element) { | 292 search: function(element) { |
257 var resultGrid = element.up('panel[name=main]').down('panel[name=contentpanel]').down('grid'); | 293 var resultGrid = element.up('panel[name=main]').down('panel[name=contentpanel]').down('grid'); |
258 var filters = element.up('panel[name=main]').down('fieldset[name=filtervariables]'); | 294 var filters = element.up('panel[name=main]').down('panel[name=filtervalues]'); |
259 var search = element.up('fieldset').down('combobox[name=filter]'); | 295 var search = element.up('fieldset').down('combobox[name=filter]'); |
260 | 296 |
261 //Type of the search Proben/Messprogramme/Stammdaten | 297 //Type of the search Proben/Messprogramme/Stammdaten |
262 var type = search.store.getById(search.getValue()).get('type') | 298 var type = search.store.getById(search.getValue()).get('type'); |
263 | 299 |
264 // Get search parameters: | 300 // Get search parameters: |
265 var searchParams = {}; | 301 var searchParams = {}; |
266 searchParams['qid'] = search.getValue(); | 302 searchParams['qid'] = search.getValue(); |
267 for (var i = filters.items.length - 1; i >= 0; i--) { | 303 for (var i = filters.items.length - 1; i >= 0; i--) { |
338 | 374 |
339 /** | 375 /** |
340 * This function resets the filters | 376 * This function resets the filters |
341 */ | 377 */ |
342 reset: function(element) { | 378 reset: function(element) { |
343 var filters = element.up('panel[name=main]').down('fieldset[name=filtervariables]'); | 379 var filters = element.up('panel[name=main]').down('panel[name=filtervalues]'); |
380 var search = element.up('fieldset').down('combobox[name=filter]'); | |
381 | |
382 //Type of the search Proben/Messprogramme/Stammdaten | |
383 var qId = search.getValue(); | |
384 var query = search.store.getById(qId); | |
344 for (var i = filters.items.length - 1; i >= 0; i--) { | 385 for (var i = filters.items.length - 1; i >= 0; i--) { |
345 var filter = filters.items.items[i]; | 386 var filter = filters.items.items[i]; |
346 if (filter.clearValue) { | 387 for (var j = 0; j < query.data.filters.length; j++) { |
347 filter.clearValue(); | 388 if (filter.filterId === query.data.filters[j].id) { |
348 } | 389 filter.setValue(query.data.filters[j].value); |
349 else { | 390 } |
350 filter.setValue(''); | |
351 } | 391 } |
352 } | 392 } |
353 }, | 393 }, |
354 /** | 394 /** |
355 * This Function is supposed to handle the About action | 395 * This Function is supposed to handle the About action |
356 * It has no function yet. | 396 * It has no function yet. |
357 */ | 397 */ |
358 about: function() { | 398 about: function() { |
359 var win = Ext.create('Lada.view.window.About'); | 399 var win = Ext.create('Lada.view.window.About'); |
360 win.show(); | 400 win.show(); |
401 }, | |
402 | |
403 showDetails: function(element) { | |
404 var search = element.up('fieldset').down('combobox[name=filter]'); | |
405 var details = element.up('panel[name=main]').down('filterdetails'); | |
406 | |
407 //Type of the search Proben/Messprogramme/Stammdaten | |
408 var record = search.store.getById(search.getValue()); | |
409 details.setRecord(record); | |
410 if (element.pressed) { | |
411 details.show(); | |
412 } | |
413 else { | |
414 details.hide(); | |
415 } | |
416 }, | |
417 | |
418 showManagement: function() { | |
419 if (!this.managementWindow) { | |
420 this.managementWindow = Ext.create('Lada.view.window.FilterManagement'); | |
421 } | |
422 this.managementWindow.show(); | |
423 }, | |
424 | |
425 triggerFilterUpdate: function(checkbox) { | |
426 var cbox = checkbox.up('fieldset').down('combobox[name=filter]'); | |
427 this.updateFilter(cbox); | |
428 }, | |
429 | |
430 updateFilter: function(combobox) { | |
431 var store; | |
432 var entries; | |
433 var fav = combobox.up('fieldset').down('checkbox[name=favorites]'); | |
434 if (this.mode === 'proben') { | |
435 store = Ext.StoreManager.get('probequeries'); | |
436 } | |
437 else if (this.mode === 'messprogramme') { | |
438 store = Ext.StoreManager.get('messprogrammqueries'); | |
439 } | |
440 else if (this.mode === 'stammdaten') { | |
441 store = Ext.StoreManager.get('stammdatenqueries'); | |
442 } | |
443 else { | |
444 return; | |
445 } | |
446 if (fav.checked) { | |
447 entries = store.queryBy(function(record) { | |
448 if (record.get('favorite')) { | |
449 return true; | |
450 } | |
451 }); | |
452 } | |
453 else { | |
454 entries = store.queryBy(function() { | |
455 return true; | |
456 }); | |
457 } | |
458 combobox.store.removeAll(); | |
459 combobox.store.add(entries.items); | |
460 combobox.select(combobox.store.getAt(0)); | |
461 combobox.fireEvent('select', combobox, [combobox.store.getAt(0)]); | |
462 }, | |
463 | |
464 saveFilterDefaults: function(button) { | |
465 var filters = button.up('fieldset').down('panel[name=filtervalues]'); | |
466 | |
467 var search = button.up('fieldset').down('combobox[name=filter]'); | |
468 | |
469 //Type of the search Proben/Messprogramme/Stammdaten | |
470 var qId = search.getValue(); | |
471 var query = search.store.getById(qId); | |
472 var ndx = 0; | |
473 for (var i = filters.items.length - 1; i >= 0; i--) { | |
474 var filter = filters.items.items[i]; | |
475 var filterId = filter.filterId; | |
476 var value = filter.getValue(); | |
477 if (value instanceof Array) { | |
478 value = value.join(','); | |
479 } | |
480 Ext.Ajax.request({ | |
481 url: 'lada-server/rest/filter', | |
482 method: 'PUT', | |
483 jsonData: { | |
484 id: filterId, | |
485 value: value | |
486 }, | |
487 success: function() { | |
488 ndx++; | |
489 for (var j = 0; j < query.data.filters.length; i++) { | |
490 if (query.data.filters[j].id === filterId) { | |
491 query.data.filters[j].value = value; | |
492 break; | |
493 } | |
494 } | |
495 if (ndx < filter.items.length - 1) { | |
496 return; | |
497 } | |
498 if (query.get('type') === 'probe') { | |
499 Ext.StoreManager.get('probequeries').load(); | |
500 } | |
501 else if (query.get('type') === 'messprogramm') { | |
502 Ext.StoreManager.get('messprogrammqueries').load(); | |
503 } | |
504 else { | |
505 Ext.StoreManager.get('stammdatenqueries').load(); | |
506 } | |
507 } | |
508 }); | |
509 } | |
510 }, | |
511 | |
512 resetFilterDefaults: function(button) { | |
513 var filters = button.up('fieldset').down('panel[name=filtervalues]'); | |
514 | |
515 var search = button.up('fieldset').down('combobox[name=filter]'); | |
516 | |
517 var qId = search.getValue(); | |
518 var query = search.store.getById(qId); | |
519 for (var i = filters.items.length - 1; i >= 0; i--) { | |
520 var filter = filters.items.items[i]; | |
521 var filterId = filter.filterId; | |
522 var value = filter.getValue(); | |
523 if (value instanceof Array) { | |
524 value = value.join(','); | |
525 } | |
526 Ext.Ajax.request({ | |
527 url: 'lada-server/rest/filter/' + filterId, | |
528 method: 'DELETE', | |
529 success: function(response) { | |
530 var json = Ext.decode(response.responseText); | |
531 if (!json.success) { | |
532 return; | |
533 } | |
534 filter.setValue(json.data.value); | |
535 for (var j = 0; j < query.data.filters.length; j++) { | |
536 if (query.data.filters[j].id === json.data.id) { | |
537 query.data.filters[j].value = json.data.value; | |
538 break; | |
539 } | |
540 } | |
541 if (query.get('type') === 'probe') { | |
542 Ext.StoreManager.get('probequeries').reload(); | |
543 } | |
544 else if (query.get('type') === 'messprogramm') { | |
545 Ext.StoreManager.get('messprogrammqueries').reload(); | |
546 } | |
547 else { | |
548 Ext.StoreManager.get('stammdatenqueries').reload(); | |
549 } | |
550 } | |
551 }); | |
552 } | |
361 } | 553 } |
362 }); | 554 }); |