From fd797a0635e5f6516124dfc5c98adf8841f098b2 Mon Sep 17 00:00:00 2001 From: Mauro Bartolomeoli Date: Fri, 7 Apr 2017 12:19:23 +0200 Subject: [PATCH 1/2] Fixes #1701: improvements to the elevation slider --- .../TOC/fragments/SettingsModal.jsx | 12 ++++++----- .../TOC/fragments/settings/Elevation.jsx | 2 +- .../settings/__tests__/Elevation-test.jsx | 2 +- .../__tests__/ElevationChart-test.jsx | 4 ++-- web/client/components/catalog/RecordItem.jsx | 1 + web/client/utils/CatalogUtils.js | 3 +++ web/client/utils/LayersUtils.js | 20 +++++++++++++++++++ 7 files changed, 35 insertions(+), 9 deletions(-) diff --git a/web/client/components/TOC/fragments/SettingsModal.jsx b/web/client/components/TOC/fragments/SettingsModal.jsx index f06ab3a925..e3b512d9d6 100644 --- a/web/client/components/TOC/fragments/SettingsModal.jsx +++ b/web/client/components/TOC/fragments/SettingsModal.jsx @@ -20,6 +20,7 @@ const Elevation = require('./settings/Elevation'); const Portal = require('../../misc/Portal'); const assign = require('object-assign'); const Message = require('../../I18N/Message'); +const LayersUtils = require('../../../utils/LayersUtils'); const SettingsModal = React.createClass({ propTypes: { @@ -48,14 +49,13 @@ const SettingsModal = React.createClass({ includeDeleteButton: React.PropTypes.bool, realtimeUpdate: React.PropTypes.bool, groups: React.PropTypes.array, - elevations: React.PropTypes.object + getDimension: React.PropTypes.func }, getDefaultProps() { return { id: "mapstore-layer-settings", settings: {expanded: false}, options: {}, - elevations: {}, updateSettings: () => {}, hideSettings: () => {}, updateNode: () => {}, @@ -76,7 +76,8 @@ const SettingsModal = React.createClass({ includeDeleteButton: true, realtimeUpdate: true, deleteText: , - confirmDeleteText: + confirmDeleteText: , + getDimension: LayersUtils.getDimension }; }, getInitialState() { @@ -129,12 +130,13 @@ const SettingsModal = React.createClass({ } }, renderElevationTab() { - if (this.props.element.type === "wms" && this.props.element.elevations) { + const elevationDim = this.props.getDimension(this.props.element.dimensions, 'elevation'); + if (this.props.element.type === "wms" && this.props.element.dimensions && elevationDim) { return ( this.updateParams({[key]: value}, this.props.realtimeUpdate)} />); } diff --git a/web/client/components/TOC/fragments/settings/Elevation.jsx b/web/client/components/TOC/fragments/settings/Elevation.jsx index a45e727f4c..203ed0a6d5 100644 --- a/web/client/components/TOC/fragments/settings/Elevation.jsx +++ b/web/client/components/TOC/fragments/settings/Elevation.jsx @@ -56,7 +56,7 @@ module.exports = React.createClass({ const lastVal = parseFloat(values[values.length - 1]); const start = this.props.element && this.props.element.params && - this.props.element.params[this.props.elevations.name][0] || values[0]; + this.props.element.params[this.props.elevations.name] || values[0]; const elevationName = {}; return (
diff --git a/web/client/components/TOC/fragments/settings/__tests__/Elevation-test.jsx b/web/client/components/TOC/fragments/settings/__tests__/Elevation-test.jsx index 1f5479c3c3..ce2ab3b914 100644 --- a/web/client/components/TOC/fragments/settings/__tests__/Elevation-test.jsx +++ b/web/client/components/TOC/fragments/settings/__tests__/Elevation-test.jsx @@ -34,7 +34,7 @@ describe('test Layer Properties Elevation component', () => { type: 'shapefile', url: 'base/web/client/test-resources/geoserver/wms', params: { - "ELEVATION": ["1.5"] + "ELEVATION": "1.5" }, elevations: { name: "ELEVATION", diff --git a/web/client/components/TOC/fragments/settings/__tests__/ElevationChart-test.jsx b/web/client/components/TOC/fragments/settings/__tests__/ElevationChart-test.jsx index 1aff2544f8..9eaa32ddc2 100644 --- a/web/client/components/TOC/fragments/settings/__tests__/ElevationChart-test.jsx +++ b/web/client/components/TOC/fragments/settings/__tests__/ElevationChart-test.jsx @@ -34,7 +34,7 @@ describe('test Layer Properties Elevation Chart component', () => { type: 'shapefile', url: 'base/web/client/test-resources/geoserver/wms', params: { - "ELEVATION": ["1.5"] + "ELEVATION": "1.5" }, elevations: { name: "ELEVATION", @@ -65,7 +65,7 @@ describe('test Layer Properties Elevation Chart component', () => { type: 'shapefile', url: 'base/web/client/test-resources/geoserver/wms', params: { - "ELEVATION": ["1.5"] + "ELEVATION": "1.5" }, elevations: { name: "ELEVATION", diff --git a/web/client/components/catalog/RecordItem.jsx b/web/client/components/catalog/RecordItem.jsx index 51979e9ad2..8900c63f24 100644 --- a/web/client/components/catalog/RecordItem.jsx +++ b/web/client/components/catalog/RecordItem.jsx @@ -212,6 +212,7 @@ const RecordItem = React.createClass({ type: "wms", url: url, visibility: true, + dimensions: this.props.record.dimensions || [], name: wms.params && wms.params.name, title: this.props.record.title || (wms.params && wms.params.name), bbox: { diff --git a/web/client/utils/CatalogUtils.js b/web/client/utils/CatalogUtils.js index eb343dd953..8454cac262 100644 --- a/web/client/utils/CatalogUtils.js +++ b/web/client/utils/CatalogUtils.js @@ -156,6 +156,9 @@ const converters = { ], crs: "EPSG:4326" }, + dimensions: (record.Dimension && castArray(record.Dimension) || []).map((dim) => assign({}, { + values: dim._.split(',') + }, dim.$ || {})), references: [{ type: "OGC:WMS", url: options.url, diff --git a/web/client/utils/LayersUtils.js b/web/client/utils/LayersUtils.js index dcb52bb4bf..ac04c6fed6 100644 --- a/web/client/utils/LayersUtils.js +++ b/web/client/utils/LayersUtils.js @@ -43,7 +43,27 @@ const createGroup = (groupId, groupName, layers, addLayers) => { }); }; +const getElevationDimension = (dimensions = []) => { + return dimensions.reduce((previous, dim) => { + return (dim.name.toLowerCase() === 'elevation' || dim.name.toLowerCase() === 'depth') ? + assign({ + showChart: true, + positive: dim.name.toLowerCase() === 'elevation' + }, dim, { + name: dim.name.toLowerCase() === 'elevation' ? dim.name : 'DIM_' + dim.name + }) : previous; + }, null); +}; + var LayersUtils = { + getDimension: (dimensions, dimension) => { + switch (dimension.toLowerCase()) { + case 'elevation': + return getElevationDimension(dimensions); + default: + return null; + } + }, getLayerId: (layerObj, layers) => { return layerObj && layerObj.id || (layerObj.name + "__" + layers.length); }, From 90b0f54db805a99a19e178025307887197f3242f Mon Sep 17 00:00:00 2001 From: Mauro Bartolomeoli Date: Fri, 7 Apr 2017 17:02:00 +0200 Subject: [PATCH 2/2] Added dimensions to save and removed elevation tab if no elevation dimension for the layer --- web/client/components/TOC/fragments/SettingsModal.jsx | 11 +++++------ web/client/utils/LayersUtils.js | 1 + 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/web/client/components/TOC/fragments/SettingsModal.jsx b/web/client/components/TOC/fragments/SettingsModal.jsx index e3b512d9d6..14ca2b96ab 100644 --- a/web/client/components/TOC/fragments/SettingsModal.jsx +++ b/web/client/components/TOC/fragments/SettingsModal.jsx @@ -146,12 +146,11 @@ const SettingsModal = React.createClass({ const display = this.renderDisplay(); const style = this.renderStyleTab(); const elevation = this.renderElevationTab(); - const tabs = ( - }>{general} - }>{display} - } disabled={!style} >{style} - } disabled={!elevation} >{elevation} - ); + const availableTabs = [}>{general}, + }>{display}, + } disabled={!style} >{style}] + .concat(elevation ? [}>{elevation}] : []); + const tabs = {availableTabs}; const footer = ( {this.props.includeCloseButton ? : } {this.props.includeDeleteButton ? diff --git a/web/client/utils/LayersUtils.js b/web/client/utils/LayersUtils.js index ac04c6fed6..a14a4d5836 100644 --- a/web/client/utils/LayersUtils.js +++ b/web/client/utils/LayersUtils.js @@ -201,6 +201,7 @@ var LayersUtils = { allowedSRS: layer.allowedSRS, matrixIds: layer.matrixIds, tileMatrixSet: layer.tileMatrixSet, + dimensions: layer.dimensions || [], ...assign({}, layer.params ? {params: layer.params} : {}) }; }