/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ import React, { useState } from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiModal, EuiModalBody, EuiModalHeader, EuiModalHeaderTitle, EuiHorizontalRule, EuiTitle, EuiButton, EuiToolTip, EuiIcon, EuiKeyPadMenuItem, EuiSpacer, EuiText, EuiKeyPadMenu, } from '@elastic/eui'; import './add_layer_panel.scss'; import { DOCUMENTS, OPENSEARCH_MAP_LAYER, CUSTOM_MAP, Layer, NEW_MAP_LAYER_DEFAULT_PREFIX, MAX_LAYER_LIMIT, } from '../../../common'; import { getLayerConfigMap } from '../../utils/getIntialConfig'; import { ConfigSchema } from '../../../common/config'; interface Props { setIsLayerConfigVisible: Function; setSelectedLayerConfig: Function; IsLayerConfigVisible: boolean; addLayer: Function; setIsNewLayer: Function; newLayerIndex: number; mapConfig: ConfigSchema; layerCount: number; } export const AddLayerPanel = ({ setIsLayerConfigVisible, setSelectedLayerConfig, IsLayerConfigVisible, addLayer, setIsNewLayer, newLayerIndex, mapConfig, layerCount, }: Props) => { const [isAddNewLayerModalVisible, setIsAddNewLayerModalVisible] = useState(false); const [highlightItem, setHighlightItem] = useState(null); function onClickAddNewLayer(layerType: string) { const initLayerConfig = getLayerConfigMap(mapConfig)[layerType]; initLayerConfig.name = NEW_MAP_LAYER_DEFAULT_PREFIX + ' ' + newLayerIndex; setSelectedLayerConfig(initLayerConfig); setIsAddNewLayerModalVisible(false); setIsLayerConfigVisible(true); setIsNewLayer(true); addLayer(initLayerConfig); } const dataLayers = [DOCUMENTS]; const dataLayerItems = Object.values(dataLayers).map((layerItem, index) => { return ( onClickAddNewLayer(layerItem.type)} onFocus={() => setHighlightItem(layerItem)} onMouseEnter={() => setHighlightItem(layerItem)} onMouseLeave={() => setHighlightItem(null)} onBlur={() => setHighlightItem(null)} className={'addLayer__types'} > ); }); const baseLayers = [OPENSEARCH_MAP_LAYER, CUSTOM_MAP]; const baseLayersItems = Object.values(baseLayers).map((layerItem, index) => { return ( onClickAddNewLayer(layerItem.type)} onFocus={() => setHighlightItem(layerItem)} onMouseEnter={() => setHighlightItem(layerItem)} onMouseLeave={() => setHighlightItem(null)} onBlur={() => setHighlightItem(null)} className="addLayer__types" > ); }); const closeModal = () => setIsAddNewLayerModalVisible(false); const showModal = () => setIsAddNewLayerModalVisible(true); const isMaxLayerLimitReached = () => { return layerCount >= MAX_LAYER_LIMIT; }; return (
{isMaxLayerLimitReached() ? `You've added the maximum number of layers (${MAX_LAYER_LIMIT}).` : 'Add layer'}

} > Add layer
{isAddNewLayerModalVisible && (

Add layer

Data layer
{dataLayerItems}
Base layer
{baseLayersItems}
{highlightItem?.name ? highlightItem.name : 'Select a layer type'}
{highlightItem?.description ? highlightItem.description : 'Start creating your map by selecting a layer type.'}
)}
); };