From 94c23b1094d3bf821902f7d37ab117b1acdb5bb6 Mon Sep 17 00:00:00 2001 From: sethg Date: Tue, 22 Jun 2021 10:51:13 +0200 Subject: [PATCH] Fix for removing selected features throwing a key error --- classic/selection/FeatureModelMixin.js | 3 +- .../GeoExt/selection/FeatureRowModel.test.js | 68 +++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/classic/selection/FeatureModelMixin.js b/classic/selection/FeatureModelMixin.js index 52debb2fb..03fc09cb2 100644 --- a/classic/selection/FeatureModelMixin.js +++ b/classic/selection/FeatureModelMixin.js @@ -311,7 +311,8 @@ Ext.define('GeoExt.selection.FeatureModelMixin', { var selFeature = record.getFeature(); // toggle feature's selection state - selFeature.set(me.selectedFeatureAttr, isSelected); + var silent = true; + selFeature.set(me.selectedFeatureAttr, isSelected, silent); if (isSelected) { me.selectedFeatures.push(selFeature); diff --git a/test/spec/GeoExt/selection/FeatureRowModel.test.js b/test/spec/GeoExt/selection/FeatureRowModel.test.js index 467cb9703..c1f8cb64c 100644 --- a/test/spec/GeoExt/selection/FeatureRowModel.test.js +++ b/test/spec/GeoExt/selection/FeatureRowModel.test.js @@ -327,4 +327,72 @@ describe('GeoExt.selection.FeatureRowModel', function() { } ); }); + + describe('selection and clearing of features with filters', function() { + var selModel; + var grid; + var featStore; + var selRec; + var selFeat; + var layer; + + beforeEach(function() { + var feat = new ol.Feature({fid: 1}); + var coll = new ol.Collection(); + coll.push(feat); + + layer = new ol.layer.Vector({ + source: new ol.source.Vector({ + features: coll + }) + }); + + featStore = + Ext.create('GeoExt.data.store.Features', { + layer: layer + }); + + featStore.filterBy(function(rec) { + return rec.get('fid') !== -1; + }); + + selModel = Ext.create('GeoExt.selection.FeatureRowModel', { + mode: 'SINGLE' + }); + // feature grid with a feature selection model + grid = Ext.create('Ext.grid.Panel', { + store: featStore, + selModel: selModel + }); + selRec = featStore.getAt(0); + selFeat = selRec.getFeature(); + }); + + afterEach(function() { + selModel.destroy(); + featStore.destroy(); + grid.destroy(); + selModel = null; + featStore = null; + grid = null; + selRec = null; + selFeat = null; + }); + + it('selection is cleared when layer is cleared', function() { + grid.getView().setSelection(selRec); + layer.getSource().clear(); + expect(selModel.selectedFeatures.getLength()).to.be(0); + expect(featStore.getData().getCount()).to.be(0); + expect(layer.getSource().getFeatures().length).to.be(0); + }); + + it('selection is cleared when feature is removed', function() { + grid.getView().setSelection(selRec); + layer.getSource().removeFeature(selFeat); + expect(selModel.selectedFeatures.getLength()).to.be(0); + expect(featStore.getData().getCount()).to.be(0); + expect(layer.getSource().getFeatures().length).to.be(0); + }); + }); });