From 5fb02c50cabc18a94c4952adee9d279bea7b54ac Mon Sep 17 00:00:00 2001 From: Melissa Alvarez Date: Mon, 6 Jan 2020 15:31:23 -0500 Subject: [PATCH] update types --- .../data_frame_analytics/common/analytics.ts | 17 ++++++++ .../create_analytics_form.test.tsx | 2 +- .../create_analytics_form.tsx | 39 ++++++++++++------- .../hooks/use_create_analytics_form/state.ts | 9 ++--- 4 files changed, 45 insertions(+), 22 deletions(-) diff --git a/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/common/analytics.ts b/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/common/analytics.ts index cadc1f01c6dda3..3dd98395ef701d 100644 --- a/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/common/analytics.ts +++ b/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/common/analytics.ts @@ -58,6 +58,23 @@ export enum INDEX_STATUS { ERROR, } +export interface FieldSelectionItem { + name: string; + mappings_types: string[]; + is_included: boolean; + is_required: boolean; + feature_type?: string; + reason?: string; +} + +export interface DfAnalyticsExplainResponse { + field_selection: FieldSelectionItem[]; + memory_estimation: { + expected_memory_without_disk: string; + expected_memory_with_disk: string; + }; +} + export interface Eval { meanSquaredError: number | string; rSquared: number | string; diff --git a/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/create_analytics_form.test.tsx b/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/create_analytics_form.test.tsx index 0d4daee373b137..d01bae96167084 100644 --- a/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/create_analytics_form.test.tsx +++ b/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/create_analytics_form.test.tsx @@ -40,7 +40,7 @@ describe('Data Frame Analytics: ', () => { ); const euiFormRows = wrapper.find('EuiFormRow'); - expect(euiFormRows.length).toBe(8); + expect(euiFormRows.length).toBe(9); const row1 = euiFormRows.at(0); expect(row1.find('label').text()).toBe('Job type'); diff --git a/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/create_analytics_form.tsx b/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/create_analytics_form.tsx index 084b5d66c5c439..e92bc6cbaacfa3 100644 --- a/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/create_analytics_form.tsx +++ b/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/create_analytics_form.tsx @@ -8,6 +8,7 @@ import React, { Fragment, FC, useEffect } from 'react'; import { EuiComboBox, + EuiComboBoxOptionProps, EuiForm, EuiFieldText, EuiFormRow, @@ -32,7 +33,6 @@ import { JOB_TYPES, DEFAULT_MODEL_MEMORY_LIMIT, getJobConfigFromFormState, - Option, } from '../../hooks/use_create_analytics_form/state'; import { JOB_ID_MAX_LENGTH } from '../../../../../../../common/constants/validation'; import { Messages } from './messages'; @@ -43,6 +43,12 @@ import { IndexPattern, indexPatterns, } from '../../../../../../../../../../../src/plugins/data/public'; +import { DfAnalyticsExplainResponse, FieldSelectionItem } from '../../../../common/analytics'; + +// based on code used by `ui/index_patterns` internally +// remove the space character from the list of illegal characters +INDEX_PATTERN_ILLEGAL_CHARACTERS.pop(); +const characterList = INDEX_PATTERN_ILLEGAL_CHARACTERS.join(', '); const BASIC_NUMERICAL_TYPES = new Set([ ES_FIELD_TYPES.LONG, @@ -146,7 +152,7 @@ export const CreateAnalyticsForm: FC = ({ actions, sta if (jobType === JOB_TYPES.CLASSIFICATION) return isSupportedByClassification; }; - const onCreateOption = (searchValue: string, flattenedOptions: Option[]) => { + const onCreateOption = (searchValue: string, flattenedOptions: EuiComboBoxOptionProps[]) => { const normalizedSearchValue = searchValue.trim().toLowerCase(); if (!normalizedSearchValue) { @@ -159,9 +165,9 @@ export const CreateAnalyticsForm: FC = ({ actions, sta // Create the option if it doesn't exist. if ( - flattenedOptions.findIndex( + flattenedOptions.some( (option: { label: string }) => option.label.trim().toLowerCase() === normalizedSearchValue - ) === -1 + ) ) { excludesOptions.push(newOption); setFormState({ excludes: [...excludes, newOption.label] }); @@ -182,15 +188,16 @@ export const CreateAnalyticsForm: FC = ({ actions, sta delete jobConfig.dest; delete jobConfig.model_memory_limit; delete jobConfig.analyzed_fields; - const resp = await ml.dataFrameAnalytics.explainDataFrameAnalytics(jobConfig); + const resp: DfAnalyticsExplainResponse = await ml.dataFrameAnalytics.explainDataFrameAnalytics( + jobConfig + ); // If sourceIndex has changed load analysis field options again if (previousSourceIndex !== sourceIndex || previousJobType !== jobType) { const analyzedFieldsOptions: Array<{ label: string }> = []; if (resp.field_selection) { - resp.field_selection.forEach((selectedField: any) => { - // TODO: update type + resp.field_selection.forEach((selectedField: FieldSelectionItem) => { if (selectedField.is_included === true && selectedField.name !== dependentVariable) { analyzedFieldsOptions.push({ label: selectedField.name }); } @@ -297,6 +304,15 @@ export const CreateAnalyticsForm: FC = ({ actions, sta return errors; }; + const onSourceIndexChange = (selectedOptions: EuiComboBoxOptionProps[]) => { + setFormState({ + excludes: [], + excludesOptions: [], + previousSourceIndex: sourceIndex, + sourceIndex: selectedOptions[0].label || '', + }); + }; + useEffect(() => { if (isJobTypeWithDepVar && sourceIndexNameEmpty === false) { loadDepVarOptions(); @@ -438,14 +454,7 @@ export const CreateAnalyticsForm: FC = ({ actions, sta selectedOptions={ indexPatternsMap[sourceIndex] !== undefined ? [{ label: sourceIndex }] : [] } - onChange={selectedOptions => { - setFormState({ - excludes: [], - excludesOptions: [], - previousSourceIndex: sourceIndex, - sourceIndex: selectedOptions[0].label || '', - }); - }} + onChange={onSourceIndexChange} isClearable={false} data-test-subj="mlAnalyticsCreateJobFlyoutSourceIndexSelect" /> diff --git a/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/state.ts b/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/state.ts index 122860241c0e56..282f9ff45d0ee0 100644 --- a/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/state.ts +++ b/x-pack/legacy/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/state.ts @@ -4,6 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ +import { EuiComboBoxOptionProps } from '@elastic/eui'; import { DeepPartial } from '../../../../../../../common/types/common'; import { checkPermission } from '../../../../../privilege/check_privilege'; import { mlNodesAvailable } from '../../../../../ml_nodes_check/check_ml_nodes'; @@ -38,10 +39,6 @@ export enum JOB_TYPES { CLASSIFICATION = 'classification', } -export interface Option { - label: string; -} - export interface State { advancedEditorMessages: FormMessage[]; advancedEditorRawString: string; @@ -49,7 +46,7 @@ export interface State { createIndexPattern: boolean; dependentVariable: DependentVariable; dependentVariableFetchFail: boolean; - dependentVariableOptions: Option[] | []; + dependentVariableOptions: EuiComboBoxOptionProps[] | []; description: string; destinationIndex: EsIndexName; destinationIndexNameExists: boolean; @@ -57,7 +54,7 @@ export interface State { destinationIndexNameValid: boolean; destinationIndexPatternTitleExists: boolean; excludes: string[]; - excludesOptions: Option[]; + excludesOptions: EuiComboBoxOptionProps[]; fieldOptionsFetchFail: boolean; jobId: DataFrameAnalyticsId; jobIdExists: boolean;