/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ import React, { ChangeEvent, useEffect, useState } from 'react'; import { EuiFieldNumber, EuiFormLabel, EuiSpacer, EuiButtonGroup, EuiPanel, EuiFormRow, EuiForm, EuiCollapsibleNavGroup, } from '@elastic/eui'; import { i18n } from '@osd/i18n'; import { DocumentLayerSpecification } from '../../../../model/mapLayerType'; import { DOCUMENTS_MAX_MARKER_BORDER_THICKNESS, DOCUMENTS_MAX_MARKER_SIZE, DOCUMENTS_MIN_MARKER_BORDER_THICKNESS, DOCUMENTS_MIN_MARKER_SIZE, } from '../../../../../common'; import { LabelConfig } from './label_config'; import { ColorPicker } from './color_picker'; import { IndexPattern } from '../../../../../../../src/plugins/data/common'; interface Props { selectedLayerConfig: DocumentLayerSpecification; setSelectedLayerConfig: Function; setIsUpdateDisabled: Function; indexPattern: IndexPattern | null | undefined; } export const DocumentLayerStyle = ({ setSelectedLayerConfig, selectedLayerConfig, setIsUpdateDisabled, indexPattern, }: Props) => { const [hasInvalidThickness, setHasInvalidThickness] = useState(false); const [hasInvalidSize, setHasInvalidSize] = useState(false); const geoTypeToggleButtonGroupPrefix = 'geoTypeToggleButtonGroup'; const [toggleGeoTypeIdSelected, setToggleGeoTypeIdSelected] = useState( `${geoTypeToggleButtonGroupPrefix}__Point` ); useEffect(() => { const disableUpdate = hasInvalidSize || hasInvalidThickness; setIsUpdateDisabled(disableUpdate); }, [hasInvalidSize, hasInvalidThickness]); const onBorderThicknessChange = (e: any) => { setSelectedLayerConfig({ ...selectedLayerConfig, style: { ...selectedLayerConfig?.style, borderThickness: Number(e.target.value), }, }); }; const onMarkerSizeChange = (e: any) => { setSelectedLayerConfig({ ...selectedLayerConfig, style: { ...selectedLayerConfig?.style, markerSize: Number(e.target.value), }, }); }; useEffect(() => { const borderThickness = selectedLayerConfig?.style?.borderThickness; const invalidThickness = borderThickness < DOCUMENTS_MIN_MARKER_BORDER_THICKNESS || borderThickness > DOCUMENTS_MAX_MARKER_BORDER_THICKNESS; setHasInvalidThickness(invalidThickness); }, [selectedLayerConfig?.style?.borderThickness]); useEffect(() => { const markerSize = selectedLayerConfig?.style?.markerSize; const invalidSize = markerSize < DOCUMENTS_MIN_MARKER_SIZE || markerSize > DOCUMENTS_MAX_MARKER_SIZE; setHasInvalidSize(invalidSize); }, [selectedLayerConfig?.style?.markerSize]); const toggleButtonsGeoType = [ { id: `${geoTypeToggleButtonGroupPrefix}__Point`, label: 'Points', }, { id: `${geoTypeToggleButtonGroupPrefix}__Line`, label: 'Lines', }, { id: `${geoTypeToggleButtonGroupPrefix}__Polygon`, label: 'Polygons', }, ]; const onChangeGeoTypeSelected = (optionId: string) => { setToggleGeoTypeIdSelected(optionId); }; interface WidthSelectorProps { size: number; onWidthChange: (event: ChangeEvent) => void; label: string; hasInvalid: boolean; min: number; max: number; } const WidthSelector = ({ label, onWidthChange, size, hasInvalid, min, max, }: WidthSelectorProps) => { return ( px} fullWidth={true} min={min} max={max} /> ); }; const onFillColorChange = (fillColor: string) => { setSelectedLayerConfig({ ...selectedLayerConfig, style: { ...selectedLayerConfig?.style, fillColor, }, }); }; const onBorderColorChange = (borderColor: string) => { setSelectedLayerConfig({ ...selectedLayerConfig, style: { ...selectedLayerConfig?.style, borderColor, }, }); }; return ( <> onChangeGeoTypeSelected(id)} buttonSize="compressed" /> {toggleGeoTypeIdSelected === `${geoTypeToggleButtonGroupPrefix}__Point` && ( )} {toggleGeoTypeIdSelected === `${geoTypeToggleButtonGroupPrefix}__Line` && ( )} {toggleGeoTypeIdSelected === `${geoTypeToggleButtonGroupPrefix}__Polygon` && ( )} ); };