Mercurial > lada > lada-client
diff app/controller/grid/Ortszuordnung.js @ 1287:e317ba349204
Added search for orte, verwaltungseinheiten and staaten.
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Thu, 26 Jan 2017 17:33:56 +0100 |
parents | faecbb446a04 |
children | 08085b7d1d0b |
line wrap: on
line diff
--- a/app/controller/grid/Ortszuordnung.js Thu Jan 26 17:33:18 2017 +0100 +++ b/app/controller/grid/Ortszuordnung.js Thu Jan 26 17:33:56 2017 +0100 @@ -14,9 +14,13 @@ requires: [ 'Lada.view.window.Ortszuordnung', - 'Lada.view.window.Ortserstellung' + 'Lada.view.form.Ortserstellung', + 'Lada.view.window.OrtFilter' ], + resultPanel: null, + searchField: null, + /** * Inhitialize the controller * It has 3 listeners @@ -40,6 +44,18 @@ }, 'ortszuordnungwindow toolbar button[action=clone]':{ click: this.cloneort + }, + 'ortszuordnungwindow toolbar textfield[name=search]': { + keyup: this.search + }, + 'ortfilterwindow grid[name=messpunkte]': { + itemdblclick: this.selectedMesspunkt + }, + 'ortfilterwindow grid[name=verwaltungseinheiten]': { + itemdblclick: this.selectedVerwaltungseinheit + }, + 'ortfilterwindow grid[name=staaten]': { + itemdblclick: this.selectedStaat } }); }, @@ -119,21 +135,25 @@ * Opens the form for a new Messpunkt */ createort: function() { - Ext.create('Lada.view.window.Ortserstellung',{ - parentWindow: button.up('ortszuordnungwindow') - }).show(); + Ext.create('Lada.view.form.Ortserstellung').show(); }, /** * - * Creates an event listener for a map click + * Opens the form for a new Messpunkt, with prefilled coordinates. + * TODO Not functional yet */ frommap: function(button) { var map = button.up('ortszuordnungwindow').down('map'); - var me = this; - map.map.events.register('click', button, me.newOrtfromMapClick); - // TODO visual feedback that map click is active. - // TODO Deactivate event listener if button is destroyed + // map.getClick(); + //TODO: wait for click return + Ext.create('Lada.view.form.Ortserstellung', { + presets: { + kda_id: 4, + koord_x_extern: 35000000, //TODO dummy values + koord_y_extern: 1000000 + } + }).show(); }, /** @@ -143,29 +163,96 @@ cloneort: function(button) { var grid = button.up('ortszuordnungwindow').down('ortstammdatengrid').getView(); var selected = grid.getSelectionModel().getSelection()[0]; - Ext.create('Lada.view.window.Ortserstellung', { - record: Ext.create('Lada.model.Ort', selected.data), - parentWindow: button.up('ortszuordnungwindow') + Ext.create('Lada.view.form.Ortserstellung', { + presets: selected.data }).show(); }, /** - * Gets the clicked map's coordinates and opens a new Messpunkt window with coordinates prefilled + * Search triggered by textfield key event. */ - newOrtfromMapClick: function(evt) { - var me = this; //this = button(action:frommap) - var map = this.up('ortszuordnungwindow').down('map').map; - var lonlat = map.getLonLatFromViewPortPx(evt.xy).transform(new OpenLayers.Projection('EPSG:3857'), - new OpenLayers.Projection('EPSG:4326')); - var controller = Lada.app.getController('Lada.controller.grid.Ortszuordnung'); - map.events.unregister('click', this, controller.newOrtfromMapClick); - Ext.create('Lada.view.window.Ortserstellung', { - record: Ext.create('Lada.model.Ort',{ - koordXExtern: lonlat.lon, - koordYExtern: lonlat.lat, - kdaId : 4 - }), - parentWindow: this.up('ortszuordnungwindow') - }).show(); + search: function(field, evt, opts) { + this.searchField = field; + if ((evt.getKey() == 13 || evt.getKey() == 8) && field.getValue() && field.getValue().length > 0) { + this.execSearch(field, field.getValue()); + } + if (field.getValue().length === 0) { + this.resultPanel.hide(); + return; + } + if (field.getValue().length < 3) { + return; + } + this.execSearch(field, field.getValue()); + }, + + /* + * Execute search in stores (ort, verwaltungseinheit and staat) and + * display the resultset. + */ + execSearch: function(field, filter) { + // Filter stores + var messpunkte = Ext.data.StoreManager.get('orte'); + var verwaltungseinheiten = Ext.data.StoreManager.get('verwaltungseinheiten'); + var staaten = Ext.data.StoreManager.get('staaten'); + messpunkte.clearFilter(true); + verwaltungseinheiten.clearFilter(true); + staaten.clearFilter(true); + messpunkte.filter({filterFn: function(item) { + if (item.get('ortId').indexOf(filter) > -1) { + return true; + } + if (item.get('kurztext').indexOf(filter) > -1) { + return true; + } + if (item.get('langtext').indexOf(filter) > -1) { + return true; + } + if (item.get('berichtstext') && + item.get('berichtstext').indexOf(filter) > -1) { + return true; + } + if (item.get('gemId').indexOf(filter) > -1) { + return true; + } + }}); + verwaltungseinheiten.filter('bezeichnung', filter); + staaten.filter('staat', filter); + + if (!this.resultPanel) { + this.resultPanel = Ext.create('Lada.view.window.OrtFilter', { + x: 500, + y: 500, + alwaysOnTop: true + }); + } + this.resultPanel.show(); + this.resultPanel.updateGrids(messpunkte, verwaltungseinheiten, staaten); + this.resultPanel.reposition(field.getX() + field.getLabelWidth(), field.getY()); + field.focus(); + }, + + selectedMesspunkt: function(grid, record) { + var win = grid.up('window'); + win.hide(); + this.searchField.reset(); + var grid = this.searchField.up('panel').down('ortstammdatengrid'); + grid.getSelectionModel().select(record); + grid.getView().focusRow(record); + console.log(record); + }, + + selectedVerwaltungseinheit: function(grid, record) { + var win = grid.up('window'); + win.hide(); + this.searchField.reset(); + console.log(record); + }, + + selectedStaat: function(grid, record) { + var win = grid.up('window'); + win.hide(); + this.searchField.reset(); + console.log(record); } });