Skip to content

Commit

Permalink
Task #46: fixed error on query panel search when spatial filter is no…
Browse files Browse the repository at this point in the history
…t set
  • Loading branch information
Mloweedgar committed May 16, 2018
1 parent 7c234f1 commit 168995b
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 51 deletions.
1 change: 1 addition & 0 deletions web/client/plugins/FeatureEditor.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ const Dock = connect(createSelector(
* @prop {number} cfg.maxStoredPages default 5. In virtual Scroll mode determines the size of the loaded pages cache
* @prop {number} cfg.vsOverScan default 20. Number of rows to load above/below the visible slice of the grid
* @prop {number} cfg.scrollDebounce default 50. milliseconds of debounce interval between two scroll event
* @prop {boolean} cfg.showFilteredObject default false. Displays spatial filter selection area when true
* @classdesc
* FeatureEditor Plugin Provides functionalities to browse/edit data via WFS. The grid can be configured to use paging or
* <br/>virtual scroll mechanisms. By defualt virtual scroll is enabled. When on virtual scroll mode, the maxStoredPages param
Expand Down
42 changes: 2 additions & 40 deletions web/client/plugins/Map.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -317,54 +317,16 @@ class MapPlugin extends React.Component {
const {mapSelector, projectionDefsSelector} = require('../selectors/map');
const { mapTypeSelector } = require('../selectors/maptype');
const {layerSelectorWithMarkers} = require('../selectors/layers');
const {selectedFeatures, filteredspatialObjectCoord, filteredspatialObjectType, filteredSpatialObjectCrs, filteredSpatialObjectId} = require('../selectors/highlight');
const {highlighedFeatures} = require('../selectors/highlight');
const {securityTokenSelector} = require('../selectors/security');
const {reprojectGeoJson} = require('../utils/CoordinatesUtils');

const filteredFeatures = createSelector(
[
filteredspatialObjectCoord,
filteredspatialObjectType,
filteredSpatialObjectId,
filteredSpatialObjectCrs
],
( geometryCoordinates, geometryType, geometryId, geometryCrs) => {
let geometry = {
type: "FeatureCollection",
features: [
{
type: "Feature",
geometry: {
type: geometryType,
coordinates: geometryCoordinates
},
style: {
fillColor: 'rgba(255, 255, 255, 0.2)',
color: '#ffcc33'
},
id: geometryId
}
]
};
return geometryCoordinates.length > 0 && geometryType ? reprojectGeoJson(geometry, geometryCrs, 'EPSG:4326').features : [];
}

);

const getFeatures = createSelector(
[
filteredFeatures,
selectedFeatures
],
(featuresFiltered, featuresSelected) => [ ...featuresSelected, ...featuresFiltered]
);
const selector = createSelector(
[
projectionDefsSelector,
mapSelector,
mapTypeSelector,
layerSelectorWithMarkers,
getFeatures,
highlighedFeatures,
(state) => state.mapInitialConfig && state.mapInitialConfig.loadingError && state.mapInitialConfig.loadingError.data,
securityTokenSelector,
(state) => state.mousePosition && state.mousePosition.enabled
Expand Down
29 changes: 28 additions & 1 deletion web/client/selectors/__tests__/highlight-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@

const expect = require('expect');
const {
selectedFeatures, filteredspatialObject, filteredspatialObjectCoord, filteredGeometry, filteredSpatialObjectId, filteredSpatialObjectCrs, filteredspatialObjectType} = require('../highlight');
selectedFeatures, filteredspatialObject, filteredspatialObjectCoord,
filteredGeometry, filteredSpatialObjectId, filteredSpatialObjectCrs,
filteredspatialObjectType, filteredFeatures, highlighedFeatures} = require('../highlight');

const idFt1 = "idFt1";
const idFt2 = "idFt2";
Expand All @@ -35,6 +37,19 @@ let feature2 = {
someProp: "someValue"
}
};

let feature3 = [{
type: "Feature",
geometry: {
type: 'Polygon',
coordinates: [ [ 0.000008983152841195214, 0.000017966305681987637 ] ]
},
style: {
fillColor: 'rgba(255, 255, 255, 0.2)',
color: '#ffcc33'
},
id: 'spatial_object'
}];
const initialState = {
featuregrid: {
mode: modeEdit,
Expand Down Expand Up @@ -110,4 +125,16 @@ describe('Test highlight selectors', () => {
expect(features).toExist();
expect(features).toBe(geometryType);
});
it('test filteredFeatures', () => {
const features = filteredFeatures(initialState);
expect(features).toExist();
expect(features).toEqual(feature3);
});
it('test highlighedFeatures', () => {
const features = highlighedFeatures(initialState);
const featuresSelected = initialState.featuregrid.select;
const combinedFeatures = [...featuresSelected, ...feature3];
expect(features).toExist();
expect(features).toEqual(combinedFeatures);
});
});
59 changes: 49 additions & 10 deletions web/client/selectors/highlight.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,53 @@
const {get} = require('lodash');
const filteredspatialObject = state => get(state, state && state.featuregrid.open && state.featuregrid.showFilteredObject && "query.filterObj.spatialField" || "emptyObject");
const filteredGeometry = state => filteredspatialObject(state) && filteredspatialObject(state).geometry;
const {createSelector} = require('reselect');
const {reprojectGeoJson} = require('../utils/CoordinatesUtils');

module.exports = {
selectedFeatures: (state) => get(state, state && state.highlight && state.highlight.featuresPath || "highlight.emptyFeatures"),
filteredspatialObjectType: (state) => filteredspatialObject(state) && filteredGeometry(state).type || "Polygon",
filteredspatialObjectCoord: (state) => filteredGeometry(state) && filteredGeometry(state).coordinates || [],
filteredSpatialObjectCrs: (state) => filteredGeometry(state) && filteredGeometry(state).projection || "EPSG:3857",
filteredSpatialObjectId: (state) => filteredGeometry(state) && filteredGeometry(state).id || "spatial_object",
filteredspatialObject,
filteredGeometry
const selectedFeatures = (state) => get(state, state && state.highlight && state.highlight.featuresPath || "highlight.emptyFeatures");
const filteredspatialObject = (state) => get(state, state && state.featuregrid.open && state.featuregrid.showFilteredObject && "query.filterObj.spatialField" || "emptyObject");
const filteredGeometry = (state) => filteredspatialObject(state) && filteredspatialObject(state).geometry;
const filteredspatialObjectType = (state) => filteredGeometry(state) && filteredGeometry(state).type || "Polygon";
const filteredspatialObjectCoord = (state) => filteredGeometry(state) && filteredGeometry(state).coordinates || [];
const filteredSpatialObjectCrs = (state) => filteredGeometry(state) && filteredGeometry(state).projection || "EPSG:3857";
const filteredSpatialObjectId = (state) => filteredGeometry(state) && filteredGeometry(state).id || "spatial_object";
const filteredFeatures = createSelector(
[
filteredspatialObjectCoord,
filteredspatialObjectType,
filteredSpatialObjectId,
filteredSpatialObjectCrs
],
( geometryCoordinates, geometryType, geometryId, geometryCrs) => {
let geometry = {
type: "FeatureCollection",
features: [
{
type: "Feature",
geometry: {
type: geometryType,
coordinates: geometryCoordinates
},
style: {
fillColor: 'rgba(255, 255, 255, 0.2)',
color: '#ffcc33'
},
id: geometryId
}
]
};
return geometryCoordinates.length > 0 && geometryType ? reprojectGeoJson(geometry, geometryCrs, 'EPSG:4326').features : [];
}

);

const highlighedFeatures = createSelector(
[
filteredFeatures,
selectedFeatures
],
(featuresFiltered, featuresSelected) => [ ...featuresSelected, ...featuresFiltered]
);

module.exports = {
selectedFeatures, filteredFeatures, filteredSpatialObjectId, filteredSpatialObjectCrs, filteredspatialObjectCoord,
filteredspatialObjectType, filteredGeometry, filteredspatialObject, highlighedFeatures
};

0 comments on commit 168995b

Please sign in to comment.