diff --git a/web/client/components/data/featuregrid/toolbars/Toolbar.jsx b/web/client/components/data/featuregrid/toolbars/Toolbar.jsx index a9571203f1..a237977348 100644 --- a/web/client/components/data/featuregrid/toolbars/Toolbar.jsx +++ b/web/client/components/data/featuregrid/toolbars/Toolbar.jsx @@ -48,12 +48,12 @@ const standardButtons = { visible={mode === "VIEW" && showAdvancedFilterButton} onClick={events.showQueryPanel} glyph="filter"/>), - zoomAll: ({disabled, disableZoomAll = false, mode, events = {}}) => ( (), backToViewMode: ({disabled, mode, hasChanges, hasNewFeatures, events = {}}) => (), - drawFeature: ({isDrawing = false, disabled, isSimpleGeom, mode, selectedCount, hasGeometry, hasSupportedGeometry = true, events = {}}) => ( (), @@ -111,12 +111,12 @@ const standardButtons = { visible={mode === "EDIT" && hasChanges || hasNewFeatures} onClick={events.clearFeatureEditing} glyph="remove-square"/>), - deleteGeometry: ({disabled, mode, hasGeometry, selectedCount, hasSupportedGeometry = true, events = {}}) => ( (), gridSettings: ({disabled, isColumnsOpen, selectedCount, mode, events = {}}) => (), - syncGridFilterToMap: ({disabled, isSyncActive = false, showSyncOnMapButton = true, events = {}, syncPopover = { dockSize: "32.2%" }, showPopoverSync, hideSyncPopover}) => ( ( events.setTimeSync && events.setTimeSync(!timeSync)} glyph="time" />), - snapToFeature: ({snapping, availableSnappingLayers = [], isSnappingLoading, snappingConfig, mode, mapType, editorHeight, pluginCfg, events = {}}) => ( ( { events.toggleSnapping && events.toggleSnapping(!snapping); }} @@ -262,11 +262,11 @@ const standardButtons = { ), - viewportFilter: ({viewportFilter, isFilterByViewportSupported, pluginCfg, events = {}}) => ( ( { events.setViewportFilter && events.setViewportFilter(!viewportFilter); }} diff --git a/web/client/plugins/featuregrid/panels/index.jsx b/web/client/plugins/featuregrid/panels/index.jsx index beb296a202..9451e06e16 100644 --- a/web/client/plugins/featuregrid/panels/index.jsx +++ b/web/client/plugins/featuregrid/panels/index.jsx @@ -47,7 +47,8 @@ import { timeSyncActive, isViewportFilterActive, isFilterByViewportSupported, - selectedLayerSelector + selectedLayerSelector, + hasNoGeometry } from '../../../selectors/featuregrid'; import { mapLayoutValuesSelector } from '../../../selectors/maplayout'; import {isCesium, mapTypeSelector} from '../../../selectors/maptype'; @@ -107,7 +108,8 @@ const Toolbar = connect( editorHeight: getDockSize, viewportFilter: isViewportFilterActive, isFilterByViewportSupported, - layer: selectedLayerSelector + layer: selectedLayerSelector, + hideSpatialFunctionalityTools: hasNoGeometry }), (dispatch) => ({events: bindActionCreators(toolbarEvents, dispatch)}) )(ToolbarComp); diff --git a/web/client/selectors/featuregrid.js b/web/client/selectors/featuregrid.js index 8f460fa483..c8d9ea1681 100644 --- a/web/client/selectors/featuregrid.js +++ b/web/client/selectors/featuregrid.js @@ -235,3 +235,16 @@ export const viewportFilter = createShallowSelectorCreator(isEqual)( } : {}; } ); + +/** + * Returns true when neither the DescribeFeatureType metadata nor the + * loaded features expose a geometry field. + */ +export const hasNoGeometry = (state) => { + const describe = describeSelector(state); + if (describe && findGeometryProperty(describe)) { + return false; + } + const features = get(state, "featuregrid.features", []); + return !(features || []).some(({ geometry }) => geometry); +};