diff --git a/src/common/components/tree/icon-renderers/product-type.icon-renderer.tsx b/src/common/components/tree/icon-renderers/product-type.icon-renderer.tsx index a67721ab3..0ba7a5c60 100644 --- a/src/common/components/tree/icon-renderers/product-type.icon-renderer.tsx +++ b/src/common/components/tree/icon-renderers/product-type.icon-renderer.tsx @@ -1,7 +1,7 @@ import React, { useMemo } from 'react'; import { ILayerImage } from '../../../../discrete-layer/models/layerImage'; import { LayerRasterRecordModelType } from '../../../../discrete-layer/models'; -import { getIconStyle } from '../../../helpers/style'; +import { getIconStyle, hasWFSLink } from '../../../helpers/style'; import { TypeIcon } from '../../shared/type-icon'; interface IProductTypeCellRendererParams { @@ -18,7 +18,7 @@ export const ProductTypeRenderer: React.FC = ({ const handleClick = (event: React.MouseEvent) => { const rasterData = data as LayerRasterRecordModelType; - if (onClick && rasterData.links?.some((link) => link.protocol === 'WFS')) { + if (onClick && hasWFSLink(rasterData as unknown as Record)) { onClick(data, !rasterData.polygonPartsShown); } }; diff --git a/src/common/helpers/style.ts b/src/common/helpers/style.ts index a83c113b1..f4f343ba0 100644 --- a/src/common/helpers/style.ts +++ b/src/common/helpers/style.ts @@ -28,6 +28,14 @@ export const isPolygonPartsShown = (data: Record): boolean => { return get(data, POLYGON_PARTS_SHOWN) === true; }; +export const hasWFSLink = (data: Record): boolean => { + return ( + (data.links as Array> | undefined)?.some( + (link) => link.protocol === 'WFS' + ) ?? false + ); +}; + export const isUnpublishedValue = (value: string): boolean => { return value === RecordStatus.UNPUBLISHED; }; @@ -57,20 +65,14 @@ export const getIconStyle = ( resStyle = { [colorProperty]: UNPUBLISHED_COLOR }; } if (existPolygonParts(data) && isPolygonPartsShown(data)) { - const hasWFSLink = (data.links as Array>)?.some( - (link) => link.protocol === 'WFS' - ); - if (hasWFSLink) { + if (hasWFSLink(data)) { resStyle = { [colorProperty]: POLYGON_PARTS_SHOWN_COLOR }; } else { resStyle = { opacity: 0.5 }; } } if (existPolygonParts(data) && !isPolygonPartsShown(data)) { - const hasWFSLink = (data.links as Array>)?.some( - (link) => link.protocol === 'WFS' - ); - if (!hasWFSLink) { + if (!hasWFSLink(data)) { resStyle = { ...resStyle, opacity: 0.5, diff --git a/src/common/hooks/mapMenus/useHandleMapMenuTemplates.hook.ts b/src/common/hooks/mapMenus/useHandleMapMenuTemplates.hook.ts index eee632116..91c2ab8a3 100644 --- a/src/common/hooks/mapMenus/useHandleMapMenuTemplates.hook.ts +++ b/src/common/hooks/mapMenus/useHandleMapMenuTemplates.hook.ts @@ -1,6 +1,6 @@ import { useEffect, useMemo, useRef, useState } from 'react'; import { useIntl } from 'react-intl'; -import _ from 'lodash'; +import _, { get } from 'lodash'; import { IContextMenuData } from '@map-colonies/react-components'; import { DynamicMenuData, @@ -20,6 +20,7 @@ import { ContextActionsTemplates, } from '../../actions/context.actions'; import CONFIG from '../../config'; +import { hasWFSLink } from '../../helpers/style'; export const useHandleMapMenuTemplates = ( menuProperties?: IMapMenuProperties, @@ -116,13 +117,25 @@ export const useHandleMapMenuTemplates = ( }, }; + const layerHasWFSLink = hasWFSLink( + get(activeLayer, 'meta.layerRecord') as Record + ); + const generatedGroup: MenuItemsGroup = { ...groupTemplateMenuItem, groupProps: groupProp, title: groupProp.titleTranslationId, items: groupTemplateMenuItem.items.map((item) => { if (!isMenuItemGroup(item)) { - return { ...item, payloadData: activeLayer.meta as Record }; + const itemDisabled = + item.action.action === ContextActions.QUERY_POLYGON_PARTS + ? !layerHasWFSLink + : item.disabled; + return { + ...item, + disabled: itemDisabled, + payloadData: activeLayer.meta as Record, + }; } return item; diff --git a/src/discrete-layer/components/map-container/contextMenus/actions.context-menu.tsx b/src/discrete-layer/components/map-container/contextMenus/actions.context-menu.tsx index ae56316f7..9297ec0f1 100644 --- a/src/discrete-layer/components/map-container/contextMenus/actions.context-menu.tsx +++ b/src/discrete-layer/components/map-container/contextMenus/actions.context-menu.tsx @@ -137,7 +137,7 @@ export const ActionsContextMenu: React.FC = observer(( - + {heightsAtCoordinates.isLoadingData ? : getHeightText()} diff --git a/src/discrete-layer/components/map-container/contextMenus/context-menu.tsx b/src/discrete-layer/components/map-container/contextMenus/context-menu.tsx index 7db1ab48d..85f1d3b9e 100644 --- a/src/discrete-layer/components/map-container/contextMenus/context-menu.tsx +++ b/src/discrete-layer/components/map-container/contextMenus/context-menu.tsx @@ -162,6 +162,7 @@ export const ContextMenu: React.FC> = ({ return ( > = ({ })} ); + const groupDisabled = menuItemOrGroup.disabled ?? false; groupToRender = ( @@ -217,6 +221,7 @@ export const ContextMenu: React.FC> = ({ return (