Advanced filter should not affect non browsable layers

This commit is contained in:
Yohan Boniface 2023-06-20 21:57:35 +02:00
parent 1620c0567b
commit 0aec986c10
3 changed files with 83 additions and 2 deletions

View file

@ -824,7 +824,7 @@ L.U.Map.include({
this.getMap().options.advancedFilters[property] = [] this.getMap().options.advancedFilters[property] = []
} }
}) })
this.eachDataLayer((datalayer) => { this.eachBrowsableDataLayer((datalayer) => {
datalayer.eachFeature((feature) => { datalayer.eachFeature((feature) => {
advancedFilterKeys.forEach((property) => { advancedFilterKeys.forEach((property) => {
if (feature.properties[property]) { if (feature.properties[property]) {
@ -887,7 +887,7 @@ L.U.Map.include({
const filterFeatures = function () { const filterFeatures = function () {
let noResults = true let noResults = true
this.eachDataLayer((datalayer) => { this.eachBrowsableDataLayer((datalayer) => {
datalayer.eachFeature(function (feature) { datalayer.eachFeature(function (feature) {
feature.properties.isVisible = true feature.properties.isVisible = true
for (const [property, values] of Object.entries( for (const [property, values] of Object.entries(

View file

@ -373,4 +373,33 @@ describe('L.U.DataLayer', function () {
assert.ok(qs('div.icon_container')) assert.ok(qs('div.icon_container'))
}) })
}) })
describe('#advanced-filters()', function () {
before(function () {
this.server.respondWith(
/\/datalayer\/63\/\?.*/,
JSON.stringify(RESPONSES.datalayer63_GET)
)
this.map.options.advancedFilterKey = 'name'
this.map.createDataLayer(RESPONSES.datalayer63_GET._umap_options)
this.server.respond()
})
it('should show non browsable layer', function () {
assert.ok(qs('path[fill="SteelBlue"]'))
})
it('should allow advanced filter', function () {
this.map.openFilter()
assert.ok(qs('div.umap-filter-properties'))
// This one if from the normal datalayer
// it's name is "test", so it should be hidden
// by the filter
assert.ok(qs('path[fill="none"]'))
happen.click(qs('input[data-value="name poly"]'))
assert.notOk(qs('path[fill="none"]'))
// This one comes from a non browsable layer
// so it should not be affected by the filter
assert.ok(qs('path[fill="SteelBlue"]'))
})
})
}) })

View file

@ -253,6 +253,58 @@ var RESPONSES = {
}, },
], ],
}, },
// This one is non browsable
datalayer63_GET: {
crs: null,
type: 'FeatureCollection',
_umap_options: defaultDatalayerData({ id: 63, browsable: false }),
features: [
{
geometry: {
type: 'Polygon',
coordinates: [
[
[5.545478, 45.068383],
[5.545907, 45.067277],
[5.548439, 45.067565],
[5.552516, 45.06752],
[5.553288, 45.068217],
[5.549405, 45.069247],
[5.548224, 45.071005],
[5.545907, 45.071096],
[5.545478, 45.068383],
],
],
},
type: 'Feature',
id: 76,
properties: { name: 'non browsable 1' },
},
{
type: 'Feature',
properties: {
_umap_options: {
color: 'SteelBlue',
},
name: 'non browsable 2',
},
geometry: {
type: 'Polygon',
coordinates: [
[
[5.550542, 45.071717],
[5.548182, 45.071051],
[5.549426, 45.069232],
[5.553331, 45.068171],
[5.554812, 45.070869],
[5.553396, 45.072384],
[5.550542, 45.071717],
],
],
},
},
],
},
} }
sinon.fakeServer.flush = function () { sinon.fakeServer.flush = function () {