diff --git a/src/common/i18n/en.json b/src/common/i18n/en.json index 96a10779..001f1f14 100644 --- a/src/common/i18n/en.json +++ b/src/common/i18n/en.json @@ -757,7 +757,9 @@ "active-layers.title": "Active Layers", "active-layers.imagery": "Imagery", + "active-layers.service": "Service", "active-layers.data": "Data", + "active-layers.3d": "3D", "active-layers.remove": "Remove", "geocoder-panel.show-feature-on-map": "Show on map", diff --git a/src/common/i18n/he.json b/src/common/i18n/he.json index 7b46e47d..c28be6f5 100644 --- a/src/common/i18n/he.json +++ b/src/common/i18n/he.json @@ -757,7 +757,9 @@ "active-layers.title": "שכבות פעילות", "active-layers.imagery": "ראסטר", + "active-layers.service": "שירות", "active-layers.data": "מידע", + "active-layers.3d": "תלת-מימד", "active-layers.remove": "הסר", "geocoder-panel.show-feature-on-map": "הראה על המפה", diff --git a/src/discrete-layer/components/map-container/geojson-map-features/polygonParts.tsx b/src/discrete-layer/components/map-container/geojson-map-features/polygonParts.tsx index fb4df45f..9be852c6 100644 --- a/src/discrete-layer/components/map-container/geojson-map-features/polygonParts.tsx +++ b/src/discrete-layer/components/map-container/geojson-map-features/polygonParts.tsx @@ -181,105 +181,108 @@ export const PolygonParts: React.FC = observer(() => { const SHOW_PP_ZOOM_LEVEL = 7; const metaPolygonParts = { - ...activeLayer, id: `virt-PP_${activeLayer?.id}`, - featureStructure: { - layerName: 'polygonParts:layer', - aliasLayerName: `${activeLayer?.productName} (${intl.formatMessage({ - id: 'field-names.dem.layerPolygonParts', - })})`, - fields: [ - // { - // fieldName: 'id', - // aliasFieldName: 'id', - // type: 'String', - // }, - // { - // fieldName: 'catalogId', - // aliasFieldName: 'catalogId', - // type: 'String', - // }, - // { - // fieldName: 'productId', - // aliasFieldName: 'productId', - // type: 'String', - // }, - // { - // fieldName: 'productType', - // aliasFieldName: 'productType', - // type: 'String', - // }, - { - fieldName: 'sourceId', - aliasFieldName: getFieldLabelTranslation('sourceId'), - type: 'String', - }, - { - fieldName: 'sourceName', - aliasFieldName: getFieldLabelTranslation('sourceName'), - type: 'String', - }, - { - fieldName: 'productVersion', - aliasFieldName: getFieldLabelTranslation('productVersion'), - type: 'String', - }, - { - fieldName: 'ingestionDateUTC', - aliasFieldName: getFieldLabelTranslation('ingestionDateUTC'), - type: 'Date', - }, - { - fieldName: 'imagingTimeBeginUTC', - aliasFieldName: getFieldLabelTranslation('imagingTimeBeginUTC'), - type: 'Date', - }, - { - fieldName: 'imagingTimeEndUTC', - aliasFieldName: getFieldLabelTranslation('imagingTimeEndUTC'), - type: 'Date', - }, - { - fieldName: 'resolutionDegree', - aliasFieldName: getFieldLabelTranslation('resolutionDegree'), - type: 'Number', - }, - { - fieldName: 'resolutionMeter', - aliasFieldName: getFieldLabelTranslation('resolutionMeter'), - type: 'Number', - }, - { - fieldName: 'sourceResolutionMeter', - aliasFieldName: getFieldLabelTranslation('sourceResolutionMeter'), - type: 'Number', - }, - { - fieldName: 'horizontalAccuracyCe90', - aliasFieldName: getFieldLabelTranslation('horizontalAccuracyCe90'), - type: 'Number', - }, - { - fieldName: 'sensors', - aliasFieldName: getFieldLabelTranslation('sensors'), - type: 'String', - }, - { - fieldName: 'countries', - aliasFieldName: getFieldLabelTranslation('countries'), - type: 'String', - }, - { - fieldName: 'cities', - aliasFieldName: getFieldLabelTranslation('cities'), - type: 'String', - }, - { - fieldName: '_description', - aliasFieldName: getFieldLabelTranslation('description'), - type: 'String', - }, - ], + layerRecord: { + ...activeLayer, + id: `virt-PP_${activeLayer?.id}`, + featureStructure: { + layerName: 'polygonParts:layer', + aliasLayerName: `${activeLayer?.productName} (${intl.formatMessage({ + id: 'field-names.dem.layerPolygonParts', + })})`, + fields: [ + // { + // fieldName: 'id', + // aliasFieldName: 'id', + // type: 'String', + // }, + // { + // fieldName: 'catalogId', + // aliasFieldName: 'catalogId', + // type: 'String', + // }, + // { + // fieldName: 'productId', + // aliasFieldName: 'productId', + // type: 'String', + // }, + // { + // fieldName: 'productType', + // aliasFieldName: 'productType', + // type: 'String', + // }, + { + fieldName: 'sourceId', + aliasFieldName: getFieldLabelTranslation('sourceId'), + type: 'String', + }, + { + fieldName: 'sourceName', + aliasFieldName: getFieldLabelTranslation('sourceName'), + type: 'String', + }, + { + fieldName: 'productVersion', + aliasFieldName: getFieldLabelTranslation('productVersion'), + type: 'String', + }, + { + fieldName: 'ingestionDateUTC', + aliasFieldName: getFieldLabelTranslation('ingestionDateUTC'), + type: 'Date', + }, + { + fieldName: 'imagingTimeBeginUTC', + aliasFieldName: getFieldLabelTranslation('imagingTimeBeginUTC'), + type: 'Date', + }, + { + fieldName: 'imagingTimeEndUTC', + aliasFieldName: getFieldLabelTranslation('imagingTimeEndUTC'), + type: 'Date', + }, + { + fieldName: 'resolutionDegree', + aliasFieldName: getFieldLabelTranslation('resolutionDegree'), + type: 'Number', + }, + { + fieldName: 'resolutionMeter', + aliasFieldName: getFieldLabelTranslation('resolutionMeter'), + type: 'Number', + }, + { + fieldName: 'sourceResolutionMeter', + aliasFieldName: getFieldLabelTranslation('sourceResolutionMeter'), + type: 'Number', + }, + { + fieldName: 'horizontalAccuracyCe90', + aliasFieldName: getFieldLabelTranslation('horizontalAccuracyCe90'), + type: 'Number', + }, + { + fieldName: 'sensors', + aliasFieldName: getFieldLabelTranslation('sensors'), + type: 'String', + }, + { + fieldName: 'countries', + aliasFieldName: getFieldLabelTranslation('countries'), + type: 'String', + }, + { + fieldName: 'cities', + aliasFieldName: getFieldLabelTranslation('cities'), + type: 'String', + }, + { + fieldName: '_description', + aliasFieldName: getFieldLabelTranslation('description'), + type: 'String', + }, + ], + }, }, }; diff --git a/src/discrete-layer/components/map-container/selected-layers-container.tsx b/src/discrete-layer/components/map-container/selected-layers-container.tsx index 1ce679da..a7e4a4f2 100644 --- a/src/discrete-layer/components/map-container/selected-layers-container.tsx +++ b/src/discrete-layer/components/map-container/selected-layers-container.tsx @@ -7,7 +7,9 @@ import { CesiumWFSLayer, CesiumWMTSLayer, CesiumXYZLayer, + getImageryProviderUrl, ICesiumImageryLayer, + isBaseMapLayer, useCesiumMap, } from '@map-colonies/react-components'; import CONFIG from '../../../common/config'; @@ -37,6 +39,13 @@ export const SelectedLayersContainer: React.FC = observer(() => { const cacheRef = useRef({} as CacheMap); const mapViewer = useCesiumMap(); + const getUrlWithoutQueryParams = (url?: string): string | undefined => { + if (!url) { + return undefined; + } + return url.split('?')[0]; + }; + useEffect(() => { if (store.discreteLayersStore.layersImages) { setlayersImages( @@ -69,11 +78,14 @@ export const SelectedLayersContainer: React.FC = observer(() => { const correctLinkByProtocol = (layer.links as LinkModelType[]).find( (link) => link.protocol === layerLink.protocol ); - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - return ( - correctLinkByProtocol?.url === - (cesiumLayer as any)._imageryProvider._resource._url + const linkUrl = getUrlWithoutQueryParams(correctLinkByProtocol?.url); + const cesiumLayerLinkUrl = getUrlWithoutQueryParams( + getImageryProviderUrl(cesiumLayer) ); + if (!linkUrl || !cesiumLayerLinkUrl) { + return false; + } + return linkUrl === cesiumLayerLinkUrl; }) as SearchLayerPredicate, layerRecord: { ...layer, @@ -100,6 +112,10 @@ export const SelectedLayersContainer: React.FC = observer(() => { layerLink.url as string, (layer as Layer3DRecordModelType).productVersion as string )} + meta={{ + id: layer.id, + layerRecord: { ...layer }, + }} /> ); case LinkType.WMTS_LAYER: @@ -120,14 +136,17 @@ export const SelectedLayersContainer: React.FC = observer(() => { meta={{ id: layer.id, searchLayerPredicate: ((cesiumLayer, idx) => { - const linkUrl = (optionsWMTS.url as Record)._url as string; - const cesiumLayerLinkUrl = get( - cesiumLayer, - '_imageryProvider._resource._url' - ) as string; - const isBaseLayer = get(cesiumLayer, 'meta.parentBasetMapId') as string; + const linkUrl = getUrlWithoutQueryParams( + get(optionsWMTS, 'url._url') as string | undefined + ); + const cesiumLayerLinkUrl = getUrlWithoutQueryParams( + getImageryProviderUrl(cesiumLayer) + ); + if (!linkUrl || !cesiumLayerLinkUrl) { + return false; + } const isLayerFound = - linkUrl.split('?')[0] === cesiumLayerLinkUrl.split('?')[0] && !isBaseLayer; + linkUrl === cesiumLayerLinkUrl && !isBaseMapLayer(cesiumLayer.meta); return isLayerFound; }) as SearchLayerPredicate, layerRecord: { @@ -154,7 +173,7 @@ export const SelectedLayersContainer: React.FC = observer(() => { } + meta={{ id: layer.id, layerRecord: { ...layer } }} withGeometryValidation={true} /> ); diff --git a/src/discrete-layer/views/discrete-layer-view.tsx b/src/discrete-layer/views/discrete-layer-view.tsx index 6665ad21..c7d824ee 100644 --- a/src/discrete-layer/views/discrete-layer-view.tsx +++ b/src/discrete-layer/views/discrete-layer-view.tsx @@ -32,6 +32,7 @@ import { IContextMenuData, IDrawing, IDrawingEvent, + ILayerManagerMetaMapping, } from '@map-colonies/react-components'; import { GeocoderOptions } from '@map-colonies/react-components/dist/cesium-map/geocoder/geocoder-panel'; import { IMapLegend } from '@map-colonies/react-components/dist/cesium-map/legend'; @@ -311,7 +312,9 @@ const DiscreteLayerView: React.FC = observer(() => { NO_DATA_LAYERS: intl.formatMessage({ id: 'debug-panel.empty' }), ACTIVE_LAYERS_TITLE: intl.formatMessage({ id: 'active-layers.title' }), IMAGERY: intl.formatMessage({ id: 'active-layers.imagery' }), + SERVICE: intl.formatMessage({ id: 'active-layers.service' }), DATA: intl.formatMessage({ id: 'active-layers.data' }), + '3D': intl.formatMessage({ id: 'active-layers.3d' }), FLY_TO: intl.formatMessage({ id: 'action.flyTo.tooltip' }), REMOVE: intl.formatMessage({ id: 'active-layers.remove' }), BASE_MAP_TITLE: intl.formatMessage({ id: 'map-settings.base-map.title' }), @@ -996,6 +999,20 @@ const DiscreteLayerView: React.FC = observer(() => { return actionsMenuDimensions as MenuDimensions; }, [activeTabView, actionsMenuDimensions]); + const layerManagerMetaMapping = useMemo(() => { + return { + layer: { + id: 'id', + name: 'layerRecord.productName', + footprint: 'layerRecord.footprint', + }, + dataLayer: { + name: 'layerRecord.featureStructure.aliasLayerName', + fields: 'layerRecord.featureStructure.fields', + }, + }; + }, []); + const site = useMemo(() => currentSite(), []); const triggerCallbackFunc = (data: Feature, options: GeocoderOptions, i: number) => { @@ -1336,7 +1353,7 @@ const DiscreteLayerView: React.FC = observer(() => { imageryProvider={false} locale={mapSettingsLocale} baseMaps={store.discreteLayersStore.baseMaps} - layerManagerFootprintMetaFieldPath={'layerRecord.footprint'} + layerManagerMetaMapping={layerManagerMetaMapping} // @ts-ignore imageryContextMenu={} imageryContextMenuSize={contextMenuSizeByTab}