/* * SPDX-License-Identifier: Apache-2.0 * * The OpenSearch Contributors require contributions made to * this file be licensed under the Apache-2.0 license or a * compatible open source license. * * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ import { EuiFlexItem, EuiFlexGroup, EuiText, EuiLink, EuiIcon, EuiFormRow, EuiComboBox, EuiCheckbox, EuiTitle, EuiCallOut, EuiSpacer, } from '@elastic/eui'; import { Field, FieldProps, FormikProps } from 'formik'; import { get, isEmpty } from 'lodash'; import { BASE_DOCS_LINK } from '../../../../utils/constants'; import React, { useState, useEffect } from 'react'; import ContentPanel from '../../../../components/ContentPanel/ContentPanel'; import { isInvalid, getError, validateCategoryField, } from '../../../../utils/utils'; import { ModelConfigurationFormikValues } from '../../models/interfaces'; interface CategoryFieldProps { isEdit: boolean; isHCDetector: boolean; categoryFieldOptions: string[]; setIsHCDetector(isHCDetector: boolean): void; isLoading: boolean; formikProps: FormikProps; } export function CategoryField(props: CategoryFieldProps) { const [enabled, setEnabled] = useState( get(props, 'formikProps.values.categoryFieldEnabled', false) ); const noCategoryFields = isEmpty(props.categoryFieldOptions); const convertedOptions = props.categoryFieldOptions.map((option: string) => { return { label: option, }; }); useEffect(() => { // only update this if we're editing and the detector has finally come if (props.isEdit) { setEnabled(props.isHCDetector); } }, [props.isHCDetector]); return (

Categorical fields

} subTitle={ Split a single time series into multiple time series based on categorical fields. You can select up to 2.{' '} Learn more } > {noCategoryFields && !props.isLoading ? ( ) : null} {noCategoryFields ? : null} {props.isEdit ? ( ) : null} {props.isEdit ? : null} {({ field, form }: FieldProps) => ( { if (!enabled) { props.setIsHCDetector(true); } if (enabled) { props.setIsHCDetector(false); form.setFieldValue('categoryField', []); } setEnabled(!enabled); }} /> {enabled && !props.isEdit ? ( ) : null} {enabled && !noCategoryFields ? ( { form.setFieldTouched('categoryField', true); }} onChange={(options) => { const selection = options.map((option) => option.label); if (!isEmpty(selection)) { if (selection.length <= 2) { form.setFieldValue('categoryField', selection); } } else { form.setFieldValue('categoryField', []); } }} selectedOptions={ field.value ? field.value.map((value: any) => { return { label: value, }; }) : [] } singleSelection={false} isClearable={true} isDisabled={props.isEdit} /> ) : null} )}
); }