From 4b12df88cfb30374c31510cc34c01b8d98784d5b Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Mon, 8 Aug 2022 15:45:49 -0600 Subject: [PATCH 1/9] Refactor public folder structure --- .../public/__stories__/controls.stories.tsx | 2 +- .../__stories__/storybook_control_factories.ts | 2 +- src/plugins/controls/public/control_types/index.ts | 1 - .../public/control_types/options_list/index.ts | 13 ------------- src/plugins/controls/public/index.ts | 3 +++ .../components}/options_list.scss | 0 .../components/options_list_control.tsx} | 6 +++--- .../components}/options_list_editor_options.tsx | 2 +- .../components/options_list_popover.tsx} | 4 ++-- .../components}/options_list_strings.ts | 0 .../embeddable}/options_list_embeddable.tsx | 8 ++++---- .../embeddable}/options_list_embeddable_factory.tsx | 6 +++--- src/plugins/controls/public/options_list/index.ts | 13 +++++++++++++ .../options_list/options_list_reducers.ts | 0 .../{control_types => }/options_list/types.ts | 6 +++--- src/plugins/controls/public/plugin.ts | 5 +---- .../controls/public/services/kibana/options_list.ts | 2 +- .../controls/public/services/options_list.ts | 2 +- .../public/services/storybook/options_list.ts | 2 +- 19 files changed, 38 insertions(+), 39 deletions(-) delete mode 100644 src/plugins/controls/public/control_types/options_list/index.ts rename src/plugins/controls/public/{control_types/options_list => options_list/components}/options_list.scss (100%) rename src/plugins/controls/public/{control_types/options_list/options_list_component.tsx => options_list/components/options_list_control.tsx} (96%) rename src/plugins/controls/public/{control_types/options_list => options_list/components}/options_list_editor_options.tsx (96%) rename src/plugins/controls/public/{control_types/options_list/options_list_popover_component.tsx => options_list/components/options_list_popover.tsx} (98%) rename src/plugins/controls/public/{control_types/options_list => options_list/components}/options_list_strings.ts (100%) rename src/plugins/controls/public/{control_types/options_list => options_list/embeddable}/options_list_embeddable.tsx (98%) rename src/plugins/controls/public/{control_types/options_list => options_list/embeddable}/options_list_embeddable_factory.tsx (94%) create mode 100644 src/plugins/controls/public/options_list/index.ts rename src/plugins/controls/public/{control_types => }/options_list/options_list_reducers.ts (100%) rename src/plugins/controls/public/{control_types => }/options_list/types.ts (84%) diff --git a/src/plugins/controls/public/__stories__/controls.stories.tsx b/src/plugins/controls/public/__stories__/controls.stories.tsx index 94c2084096b014..53a6c365f32d55 100644 --- a/src/plugins/controls/public/__stories__/controls.stories.tsx +++ b/src/plugins/controls/public/__stories__/controls.stories.tsx @@ -35,7 +35,7 @@ import { injectStorybookDataView } from '../services/storybook/data_views'; import { replaceOptionsListMethod } from '../services/storybook/options_list'; import { populateStorybookControlFactories } from './storybook_control_factories'; import { replaceValueSuggestionMethod } from '../services/storybook/unified_search'; -import { OptionsListResponse, OptionsListRequest } from '../control_types/options_list/types'; +import { OptionsListResponse, OptionsListRequest } from '../options_list/types'; export default { title: 'Controls', diff --git a/src/plugins/controls/public/__stories__/storybook_control_factories.ts b/src/plugins/controls/public/__stories__/storybook_control_factories.ts index f0c0611ad45fee..76968f104c275c 100644 --- a/src/plugins/controls/public/__stories__/storybook_control_factories.ts +++ b/src/plugins/controls/public/__stories__/storybook_control_factories.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { OptionsListEmbeddableFactory } from '../control_types/options_list'; +import { OptionsListEmbeddableFactory } from '../options_list'; import { RangeSliderEmbeddableFactory } from '../control_types/range_slider'; import { TimesliderEmbeddableFactory } from '../control_types/time_slider'; import { ControlsService } from '../services/controls'; diff --git a/src/plugins/controls/public/control_types/index.ts b/src/plugins/controls/public/control_types/index.ts index 2b53723f4bafd7..8dfa50ee5cbdae 100644 --- a/src/plugins/controls/public/control_types/index.ts +++ b/src/plugins/controls/public/control_types/index.ts @@ -6,5 +6,4 @@ * Side Public License, v 1. */ -export * from './options_list'; export * from './range_slider'; diff --git a/src/plugins/controls/public/control_types/options_list/index.ts b/src/plugins/controls/public/control_types/options_list/index.ts deleted file mode 100644 index 7a254bf423ce4d..00000000000000 --- a/src/plugins/controls/public/control_types/options_list/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -export { OPTIONS_LIST_CONTROL } from '../../../common/control_types/options_list/types'; -export { OptionsListEmbeddableFactory } from './options_list_embeddable_factory'; - -export type { OptionsListEmbeddable } from './options_list_embeddable'; -export type { OptionsListEmbeddableInput } from '../../../common/control_types/options_list/types'; diff --git a/src/plugins/controls/public/index.ts b/src/plugins/controls/public/index.ts index 5cc7ffce2c3281..a3c54a73b07c14 100644 --- a/src/plugins/controls/public/index.ts +++ b/src/plugins/controls/public/index.ts @@ -42,6 +42,9 @@ export { OptionsListEmbeddableFactory, OptionsListEmbeddable, type OptionsListEmbeddableInput, +} from './options_list'; + +export { RangeSliderEmbeddableFactory, RangeSliderEmbeddable, type RangeSliderEmbeddableInput, diff --git a/src/plugins/controls/public/control_types/options_list/options_list.scss b/src/plugins/controls/public/options_list/components/options_list.scss similarity index 100% rename from src/plugins/controls/public/control_types/options_list/options_list.scss rename to src/plugins/controls/public/options_list/components/options_list.scss diff --git a/src/plugins/controls/public/control_types/options_list/options_list_component.tsx b/src/plugins/controls/public/options_list/components/options_list_control.tsx similarity index 96% rename from src/plugins/controls/public/control_types/options_list/options_list_component.tsx rename to src/plugins/controls/public/options_list/components/options_list_control.tsx index 8d911c4072bbcb..8f7bff8afde743 100644 --- a/src/plugins/controls/public/control_types/options_list/options_list_component.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_control.tsx @@ -14,11 +14,11 @@ import { debounce, isEmpty } from 'lodash'; import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; import { OptionsListStrings } from './options_list_strings'; -import { optionsListReducers } from './options_list_reducers'; -import { OptionsListPopover } from './options_list_popover_component'; +import { optionsListReducers } from '../options_list_reducers'; +import { OptionsListPopover } from './options_list_popover'; import './options_list.scss'; -import { OptionsListReduxState } from './types'; +import { OptionsListReduxState } from '../types'; export const OptionsListComponent = ({ typeaheadSubject, diff --git a/src/plugins/controls/public/control_types/options_list/options_list_editor_options.tsx b/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx similarity index 96% rename from src/plugins/controls/public/control_types/options_list/options_list_editor_options.tsx rename to src/plugins/controls/public/options_list/components/options_list_editor_options.tsx index e09d1887aac1f3..341afed5cb2dcf 100644 --- a/src/plugins/controls/public/control_types/options_list/options_list_editor_options.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx @@ -9,7 +9,7 @@ import React, { useState } from 'react'; import { EuiFormRow, EuiSwitch } from '@elastic/eui'; -import { OptionsListEmbeddableInput } from './types'; +import { OptionsListEmbeddableInput } from '../types'; import { OptionsListStrings } from './options_list_strings'; import { ControlEditorProps } from '../..'; diff --git a/src/plugins/controls/public/control_types/options_list/options_list_popover_component.tsx b/src/plugins/controls/public/options_list/components/options_list_popover.tsx similarity index 98% rename from src/plugins/controls/public/control_types/options_list/options_list_popover_component.tsx rename to src/plugins/controls/public/options_list/components/options_list_popover.tsx index 9023d40818be64..987d07d86401ac 100644 --- a/src/plugins/controls/public/control_types/options_list/options_list_popover_component.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover.tsx @@ -24,9 +24,9 @@ import { import { isEmpty } from 'lodash'; import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; -import { optionsListReducers } from './options_list_reducers'; +import { optionsListReducers } from '../options_list_reducers'; import { OptionsListStrings } from './options_list_strings'; -import { OptionsListReduxState } from './types'; +import { OptionsListReduxState } from '../types'; export const OptionsListPopover = ({ width, diff --git a/src/plugins/controls/public/control_types/options_list/options_list_strings.ts b/src/plugins/controls/public/options_list/components/options_list_strings.ts similarity index 100% rename from src/plugins/controls/public/control_types/options_list/options_list_strings.ts rename to src/plugins/controls/public/options_list/components/options_list_strings.ts diff --git a/src/plugins/controls/public/control_types/options_list/options_list_embeddable.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx similarity index 98% rename from src/plugins/controls/public/control_types/options_list/options_list_embeddable.tsx rename to src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx index 3b586cfb4716a0..6424e881c20813 100644 --- a/src/plugins/controls/public/control_types/options_list/options_list_embeddable.tsx +++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx @@ -31,12 +31,12 @@ import { OptionsListField, OptionsListReduxState, OPTIONS_LIST_CONTROL, -} from './types'; -import { OptionsListComponent } from './options_list_component'; +} from '../types'; +import { OptionsListComponent } from '../components/options_list_control'; import { ControlsOptionsListService } from '../../services/options_list'; import { ControlsDataViewsService } from '../../services/data_views'; -import { optionsListReducers } from './options_list_reducers'; -import { OptionsListStrings } from './options_list_strings'; +import { optionsListReducers } from '../options_list_reducers'; +import { OptionsListStrings } from '../components/options_list_strings'; import { ControlInput, ControlOutput } from '../..'; import { pluginServices } from '../../services'; diff --git a/src/plugins/controls/public/control_types/options_list/options_list_embeddable_factory.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx similarity index 94% rename from src/plugins/controls/public/control_types/options_list/options_list_embeddable_factory.tsx rename to src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx index 1b49350181906e..9b91c8de3ce784 100644 --- a/src/plugins/controls/public/control_types/options_list/options_list_embeddable_factory.tsx +++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx @@ -11,14 +11,14 @@ import deepEqual from 'fast-deep-equal'; import { lazyLoadReduxEmbeddablePackage } from '@kbn/presentation-util-plugin/public'; import { EmbeddableFactoryDefinition, IContainer } from '@kbn/embeddable-plugin/public'; -import { OptionsListEditorOptions } from './options_list_editor_options'; +import { OptionsListEditorOptions } from '../components/options_list_editor_options'; import { ControlEmbeddable, DataControlField, IEditableControlFactory } from '../../types'; -import { OptionsListEmbeddableInput, OPTIONS_LIST_CONTROL } from './types'; +import { OptionsListEmbeddableInput, OPTIONS_LIST_CONTROL } from '../types'; import { createOptionsListExtract, createOptionsListInject, } from '../../../common/control_types/options_list/options_list_persistable_state'; -import { OptionsListStrings } from './options_list_strings'; +import { OptionsListStrings } from '../components/options_list_strings'; export class OptionsListEmbeddableFactory implements EmbeddableFactoryDefinition, IEditableControlFactory diff --git a/src/plugins/controls/public/options_list/index.ts b/src/plugins/controls/public/options_list/index.ts new file mode 100644 index 00000000000000..e7a3fd3a7327b4 --- /dev/null +++ b/src/plugins/controls/public/options_list/index.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { OPTIONS_LIST_CONTROL } from '../../common/control_types/options_list/types'; +export { OptionsListEmbeddableFactory } from './embeddable/options_list_embeddable_factory'; + +export type { OptionsListEmbeddable } from './embeddable/options_list_embeddable'; +export type { OptionsListEmbeddableInput } from '../../common/control_types/options_list/types'; diff --git a/src/plugins/controls/public/control_types/options_list/options_list_reducers.ts b/src/plugins/controls/public/options_list/options_list_reducers.ts similarity index 100% rename from src/plugins/controls/public/control_types/options_list/options_list_reducers.ts rename to src/plugins/controls/public/options_list/options_list_reducers.ts diff --git a/src/plugins/controls/public/control_types/options_list/types.ts b/src/plugins/controls/public/options_list/types.ts similarity index 84% rename from src/plugins/controls/public/control_types/options_list/types.ts rename to src/plugins/controls/public/options_list/types.ts index 513baa0f1b0cb6..b030cfd6510334 100644 --- a/src/plugins/controls/public/control_types/options_list/types.ts +++ b/src/plugins/controls/public/options_list/types.ts @@ -8,13 +8,13 @@ import { ReduxEmbeddableState } from '@kbn/presentation-util-plugin/public'; -import { ControlOutput } from '../../types'; +import { ControlOutput } from '../types'; import { OptionsListEmbeddableInput, OptionsListField, -} from '../../../common/control_types/options_list/types'; +} from '../../common/control_types/options_list/types'; -export * from '../../../common/control_types/options_list/types'; +export * from '../../common/control_types/options_list/types'; // Component state is only used by public components. export interface OptionsListComponentState { diff --git a/src/plugins/controls/public/plugin.ts b/src/plugins/controls/public/plugin.ts index 352ed60b554a22..13fc4d977c9f6a 100644 --- a/src/plugins/controls/public/plugin.ts +++ b/src/plugins/controls/public/plugin.ts @@ -17,10 +17,7 @@ import { IEditableControlFactory, ControlInput, } from './types'; -import { - OptionsListEmbeddableFactory, - OptionsListEmbeddableInput, -} from './control_types/options_list'; +import { OptionsListEmbeddableFactory, OptionsListEmbeddableInput } from './options_list'; import { RangeSliderEmbeddableFactory, RangeSliderEmbeddableInput, diff --git a/src/plugins/controls/public/services/kibana/options_list.ts b/src/plugins/controls/public/services/kibana/options_list.ts index 4ff603f1af23f2..41c01378fdaab7 100644 --- a/src/plugins/controls/public/services/kibana/options_list.ts +++ b/src/plugins/controls/public/services/kibana/options_list.ts @@ -17,7 +17,7 @@ import { OptionsListResponse, OptionsListRequestBody, OptionsListField, -} from '../../control_types/options_list/types'; +} from '../../options_list/types'; import { ControlsHTTPService } from '../http'; import { ControlsDataService } from '../data'; import { ControlsPluginStartDeps } from '../../types'; diff --git a/src/plugins/controls/public/services/options_list.ts b/src/plugins/controls/public/services/options_list.ts index 510631d929083c..2e787a019abdeb 100644 --- a/src/plugins/controls/public/services/options_list.ts +++ b/src/plugins/controls/public/services/options_list.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { OptionsListRequest, OptionsListResponse } from '../control_types/options_list/types'; +import { OptionsListRequest, OptionsListResponse } from '../options_list/types'; export interface ControlsOptionsListService { runOptionsListRequest: ( diff --git a/src/plugins/controls/public/services/storybook/options_list.ts b/src/plugins/controls/public/services/storybook/options_list.ts index 4175d2337a8eaa..3fe332303926a0 100644 --- a/src/plugins/controls/public/services/storybook/options_list.ts +++ b/src/plugins/controls/public/services/storybook/options_list.ts @@ -9,7 +9,7 @@ import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; import { ControlsOptionsListService } from '../options_list'; -import { OptionsListRequest, OptionsListResponse } from '../../control_types/options_list/types'; +import { OptionsListRequest, OptionsListResponse } from '../../options_list/types'; export type OptionsListServiceFactory = PluginServiceFactory; From 0a37b383f02554962cdd1403d7798a4e49f35943 Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Tue, 9 Aug 2022 13:36:09 -0600 Subject: [PATCH 2/9] Refactor common folder structure --- src/plugins/controls/common/index.ts | 5 +---- .../options_list/options_list_persistable_state.ts | 0 .../common/{control_types => }/options_list/types.ts | 2 +- .../time_slider/time_slider_embeddable_factory.tsx | 2 +- src/plugins/controls/public/options_list/types.ts | 7 ++----- .../options_list/options_list_embeddable_factory.ts | 2 +- .../control_types/options_list/options_list_queries.ts | 2 +- .../options_list/options_list_suggestions_route.ts | 5 +---- 8 files changed, 8 insertions(+), 17 deletions(-) rename src/plugins/controls/common/{control_types => }/options_list/options_list_persistable_state.ts (100%) rename src/plugins/controls/common/{control_types => }/options_list/types.ts (97%) diff --git a/src/plugins/controls/common/index.ts b/src/plugins/controls/common/index.ts index 3066629810df46..b8d7699e8061ae 100644 --- a/src/plugins/controls/common/index.ts +++ b/src/plugins/controls/common/index.ts @@ -33,10 +33,7 @@ export { } from './control_group/control_group_constants'; // Control Type exports -export { - OPTIONS_LIST_CONTROL, - type OptionsListEmbeddableInput, -} from './control_types/options_list/types'; +export { OPTIONS_LIST_CONTROL, type OptionsListEmbeddableInput } from './options_list/types'; export { type RangeSliderEmbeddableInput, RANGE_SLIDER_CONTROL, diff --git a/src/plugins/controls/common/control_types/options_list/options_list_persistable_state.ts b/src/plugins/controls/common/options_list/options_list_persistable_state.ts similarity index 100% rename from src/plugins/controls/common/control_types/options_list/options_list_persistable_state.ts rename to src/plugins/controls/common/options_list/options_list_persistable_state.ts diff --git a/src/plugins/controls/common/control_types/options_list/types.ts b/src/plugins/controls/common/options_list/types.ts similarity index 97% rename from src/plugins/controls/common/control_types/options_list/types.ts rename to src/plugins/controls/common/options_list/types.ts index 46e4aab854d0d8..25db6c50349c47 100644 --- a/src/plugins/controls/common/control_types/options_list/types.ts +++ b/src/plugins/controls/common/options_list/types.ts @@ -9,7 +9,7 @@ import type { Filter, Query, BoolQuery, TimeRange } from '@kbn/es-query'; import { FieldSpec, DataView } from '@kbn/data-views-plugin/common'; -import { DataControlInput } from '../../types'; +import { DataControlInput } from '../types'; export const OPTIONS_LIST_CONTROL = 'optionsListControl'; diff --git a/src/plugins/controls/public/control_types/time_slider/time_slider_embeddable_factory.tsx b/src/plugins/controls/public/control_types/time_slider/time_slider_embeddable_factory.tsx index 3fee3c7aa7f114..51048489ccae9b 100644 --- a/src/plugins/controls/public/control_types/time_slider/time_slider_embeddable_factory.tsx +++ b/src/plugins/controls/public/control_types/time_slider/time_slider_embeddable_factory.tsx @@ -16,7 +16,7 @@ import { ControlEmbeddable, DataControlField, IEditableControlFactory } from '.. import { createOptionsListExtract, createOptionsListInject, -} from '../../../common/control_types/options_list/options_list_persistable_state'; +} from '../../../common/options_list/options_list_persistable_state'; import { TimeSliderControlEmbeddableInput } from '../../../common/control_types/time_slider/types'; import { TimeSliderStrings } from './time_slider_strings'; diff --git a/src/plugins/controls/public/options_list/types.ts b/src/plugins/controls/public/options_list/types.ts index b030cfd6510334..49dc3567419b07 100644 --- a/src/plugins/controls/public/options_list/types.ts +++ b/src/plugins/controls/public/options_list/types.ts @@ -9,12 +9,9 @@ import { ReduxEmbeddableState } from '@kbn/presentation-util-plugin/public'; import { ControlOutput } from '../types'; -import { - OptionsListEmbeddableInput, - OptionsListField, -} from '../../common/control_types/options_list/types'; +import { OptionsListEmbeddableInput, OptionsListField } from '../../common/options_list/types'; -export * from '../../common/control_types/options_list/types'; +export * from '../../common/options_list/types'; // Component state is only used by public components. export interface OptionsListComponentState { diff --git a/src/plugins/controls/server/control_types/options_list/options_list_embeddable_factory.ts b/src/plugins/controls/server/control_types/options_list/options_list_embeddable_factory.ts index 1dd48cced20a46..065c6577bce185 100644 --- a/src/plugins/controls/server/control_types/options_list/options_list_embeddable_factory.ts +++ b/src/plugins/controls/server/control_types/options_list/options_list_embeddable_factory.ts @@ -11,7 +11,7 @@ import { OPTIONS_LIST_CONTROL } from '../../../common'; import { createOptionsListExtract, createOptionsListInject, -} from '../../../common/control_types/options_list/options_list_persistable_state'; +} from '../../../common/options_list/options_list_persistable_state'; export const optionsListPersistableStateServiceFactory = (): EmbeddableRegistryDefinition => { return { diff --git a/src/plugins/controls/server/control_types/options_list/options_list_queries.ts b/src/plugins/controls/server/control_types/options_list/options_list_queries.ts index 83fd6e2b67552e..aaa92eb7f872a2 100644 --- a/src/plugins/controls/server/control_types/options_list/options_list_queries.ts +++ b/src/plugins/controls/server/control_types/options_list/options_list_queries.ts @@ -11,7 +11,7 @@ import { get, isEmpty } from 'lodash'; import { SearchResponse } from '@elastic/elasticsearch/lib/api/types'; import { getFieldSubtypeNested } from '@kbn/data-views-plugin/common'; -import { OptionsListRequestBody } from '../../../common/control_types/options_list/types'; +import { OptionsListRequestBody } from '../../../common/options_list/types'; export interface OptionsListAggregationBuilder { buildAggregation: (req: OptionsListRequestBody) => unknown; diff --git a/src/plugins/controls/server/control_types/options_list/options_list_suggestions_route.ts b/src/plugins/controls/server/control_types/options_list/options_list_suggestions_route.ts index e5943a3de41cb3..345eaa4ecdfc99 100644 --- a/src/plugins/controls/server/control_types/options_list/options_list_suggestions_route.ts +++ b/src/plugins/controls/server/control_types/options_list/options_list_suggestions_route.ts @@ -15,10 +15,7 @@ import { CoreSetup, ElasticsearchClient } from '@kbn/core/server'; import { SearchRequest } from '@kbn/data-plugin/common'; import { schema } from '@kbn/config-schema'; -import { - OptionsListRequestBody, - OptionsListResponse, -} from '../../../common/control_types/options_list/types'; +import { OptionsListRequestBody, OptionsListResponse } from '../../../common/options_list/types'; import { getSuggestionAggregationBuilder, getValidationAggregationBuilder, From b542bf41ad639e766dd3b017e4b73b2e656cd8c8 Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Tue, 9 Aug 2022 13:52:02 -0600 Subject: [PATCH 3/9] Refactor server folder structure --- .../embeddable/options_list_embeddable_factory.tsx | 2 +- src/plugins/controls/public/options_list/index.ts | 4 ++-- .../options_list/options_list_embeddable_factory.ts | 4 ++-- .../options_list/options_list_queries.test.ts | 2 +- .../{control_types => }/options_list/options_list_queries.ts | 2 +- .../options_list/options_list_suggestions_route.ts | 2 +- src/plugins/controls/server/plugin.ts | 4 ++-- 7 files changed, 10 insertions(+), 10 deletions(-) rename src/plugins/controls/server/{control_types => }/options_list/options_list_embeddable_factory.ts (85%) rename src/plugins/controls/server/{control_types => }/options_list/options_list_queries.test.ts (99%) rename src/plugins/controls/server/{control_types => }/options_list/options_list_queries.ts (98%) rename src/plugins/controls/server/{control_types => }/options_list/options_list_suggestions_route.ts (99%) diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx index 9b91c8de3ce784..79939d373e12bd 100644 --- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx +++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx @@ -17,7 +17,7 @@ import { OptionsListEmbeddableInput, OPTIONS_LIST_CONTROL } from '../types'; import { createOptionsListExtract, createOptionsListInject, -} from '../../../common/control_types/options_list/options_list_persistable_state'; +} from '../../../common/options_list/options_list_persistable_state'; import { OptionsListStrings } from '../components/options_list_strings'; export class OptionsListEmbeddableFactory diff --git a/src/plugins/controls/public/options_list/index.ts b/src/plugins/controls/public/options_list/index.ts index e7a3fd3a7327b4..75b2c85e7dfef8 100644 --- a/src/plugins/controls/public/options_list/index.ts +++ b/src/plugins/controls/public/options_list/index.ts @@ -6,8 +6,8 @@ * Side Public License, v 1. */ -export { OPTIONS_LIST_CONTROL } from '../../common/control_types/options_list/types'; +export { OPTIONS_LIST_CONTROL } from '../../common/options_list/types'; export { OptionsListEmbeddableFactory } from './embeddable/options_list_embeddable_factory'; export type { OptionsListEmbeddable } from './embeddable/options_list_embeddable'; -export type { OptionsListEmbeddableInput } from '../../common/control_types/options_list/types'; +export type { OptionsListEmbeddableInput } from '../../common/options_list/types'; diff --git a/src/plugins/controls/server/control_types/options_list/options_list_embeddable_factory.ts b/src/plugins/controls/server/options_list/options_list_embeddable_factory.ts similarity index 85% rename from src/plugins/controls/server/control_types/options_list/options_list_embeddable_factory.ts rename to src/plugins/controls/server/options_list/options_list_embeddable_factory.ts index 065c6577bce185..16efef57f6ff49 100644 --- a/src/plugins/controls/server/control_types/options_list/options_list_embeddable_factory.ts +++ b/src/plugins/controls/server/options_list/options_list_embeddable_factory.ts @@ -7,11 +7,11 @@ */ import { EmbeddableRegistryDefinition } from '@kbn/embeddable-plugin/server'; -import { OPTIONS_LIST_CONTROL } from '../../../common'; +import { OPTIONS_LIST_CONTROL } from '../../common'; import { createOptionsListExtract, createOptionsListInject, -} from '../../../common/options_list/options_list_persistable_state'; +} from '../../common/options_list/options_list_persistable_state'; export const optionsListPersistableStateServiceFactory = (): EmbeddableRegistryDefinition => { return { diff --git a/src/plugins/controls/server/control_types/options_list/options_list_queries.test.ts b/src/plugins/controls/server/options_list/options_list_queries.test.ts similarity index 99% rename from src/plugins/controls/server/control_types/options_list/options_list_queries.test.ts rename to src/plugins/controls/server/options_list/options_list_queries.test.ts index e1e27b13ee403d..399154c5518aa1 100644 --- a/src/plugins/controls/server/control_types/options_list/options_list_queries.test.ts +++ b/src/plugins/controls/server/options_list/options_list_queries.test.ts @@ -13,7 +13,7 @@ import { getSuggestionAggregationBuilder, getValidationAggregationBuilder, } from './options_list_queries'; -import { OptionsListRequestBody } from '../../../common/control_types/options_list/types'; +import { OptionsListRequestBody } from '../../common/options_list/types'; describe('options list queries', () => { let rawSearchResponseMock: SearchResponse = {} as SearchResponse; diff --git a/src/plugins/controls/server/control_types/options_list/options_list_queries.ts b/src/plugins/controls/server/options_list/options_list_queries.ts similarity index 98% rename from src/plugins/controls/server/control_types/options_list/options_list_queries.ts rename to src/plugins/controls/server/options_list/options_list_queries.ts index aaa92eb7f872a2..4e88c449a7e8ea 100644 --- a/src/plugins/controls/server/control_types/options_list/options_list_queries.ts +++ b/src/plugins/controls/server/options_list/options_list_queries.ts @@ -11,7 +11,7 @@ import { get, isEmpty } from 'lodash'; import { SearchResponse } from '@elastic/elasticsearch/lib/api/types'; import { getFieldSubtypeNested } from '@kbn/data-views-plugin/common'; -import { OptionsListRequestBody } from '../../../common/options_list/types'; +import { OptionsListRequestBody } from '../../common/options_list/types'; export interface OptionsListAggregationBuilder { buildAggregation: (req: OptionsListRequestBody) => unknown; diff --git a/src/plugins/controls/server/control_types/options_list/options_list_suggestions_route.ts b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts similarity index 99% rename from src/plugins/controls/server/control_types/options_list/options_list_suggestions_route.ts rename to src/plugins/controls/server/options_list/options_list_suggestions_route.ts index 345eaa4ecdfc99..0d7654f318f317 100644 --- a/src/plugins/controls/server/control_types/options_list/options_list_suggestions_route.ts +++ b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts @@ -15,7 +15,7 @@ import { CoreSetup, ElasticsearchClient } from '@kbn/core/server'; import { SearchRequest } from '@kbn/data-plugin/common'; import { schema } from '@kbn/config-schema'; -import { OptionsListRequestBody, OptionsListResponse } from '../../../common/options_list/types'; +import { OptionsListRequestBody, OptionsListResponse } from '../../common/options_list/types'; import { getSuggestionAggregationBuilder, getValidationAggregationBuilder, diff --git a/src/plugins/controls/server/plugin.ts b/src/plugins/controls/server/plugin.ts index fb39acfaf913ca..97e40306ae25a9 100644 --- a/src/plugins/controls/server/plugin.ts +++ b/src/plugins/controls/server/plugin.ts @@ -11,9 +11,9 @@ import { CoreSetup, Plugin } from '@kbn/core/server'; import { EmbeddableSetup } from '@kbn/embeddable-plugin/server'; import { PluginSetup as DataSetup } from '@kbn/data-plugin/server'; import { PluginSetup as UnifiedSearchSetup } from '@kbn/unified-search-plugin/server'; -import { setupOptionsListSuggestionsRoute } from './control_types/options_list/options_list_suggestions_route'; +import { setupOptionsListSuggestionsRoute } from './options_list/options_list_suggestions_route'; import { controlGroupContainerPersistableStateServiceFactory } from './control_group/control_group_container_factory'; -import { optionsListPersistableStateServiceFactory } from './control_types/options_list/options_list_embeddable_factory'; +import { optionsListPersistableStateServiceFactory } from './options_list/options_list_embeddable_factory'; // import { timeSliderPersistableStateServiceFactory } from './control_types/time_slider/time_slider_embeddable_factory'; interface SetupDeps { From 58e5d15c02e811d51bdb1cb7f891114adec51c86 Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Tue, 9 Aug 2022 14:33:49 -0600 Subject: [PATCH 4/9] Stub out Jest tests and stories --- .../__stories__/options_list_control.stories.tsx | 12 ++++++++++++ .../__stories__/options_list_popover.stories.tsx | 12 ++++++++++++ .../components/options_list_control.test.tsx | 7 +++++++ .../components/options_list_popover.test.tsx | 7 +++++++ 4 files changed, 38 insertions(+) create mode 100644 src/plugins/controls/public/options_list/__stories__/options_list_control.stories.tsx create mode 100644 src/plugins/controls/public/options_list/__stories__/options_list_popover.stories.tsx create mode 100644 src/plugins/controls/public/options_list/components/options_list_control.test.tsx create mode 100644 src/plugins/controls/public/options_list/components/options_list_popover.test.tsx diff --git a/src/plugins/controls/public/options_list/__stories__/options_list_control.stories.tsx b/src/plugins/controls/public/options_list/__stories__/options_list_control.stories.tsx new file mode 100644 index 00000000000000..77c0adbef002e1 --- /dev/null +++ b/src/plugins/controls/public/options_list/__stories__/options_list_control.stories.tsx @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export default { + title: 'Options List/Control', + description: '', +}; diff --git a/src/plugins/controls/public/options_list/__stories__/options_list_popover.stories.tsx b/src/plugins/controls/public/options_list/__stories__/options_list_popover.stories.tsx new file mode 100644 index 00000000000000..c01cde109dde3c --- /dev/null +++ b/src/plugins/controls/public/options_list/__stories__/options_list_popover.stories.tsx @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export default { + title: 'Options List/Popover', + description: '', +}; diff --git a/src/plugins/controls/public/options_list/components/options_list_control.test.tsx b/src/plugins/controls/public/options_list/components/options_list_control.test.tsx new file mode 100644 index 00000000000000..5c2d5b68ae2e03 --- /dev/null +++ b/src/plugins/controls/public/options_list/components/options_list_control.test.tsx @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ diff --git a/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx b/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx new file mode 100644 index 00000000000000..5c2d5b68ae2e03 --- /dev/null +++ b/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ From b60af68a7985c14ff31e9227100a965cf0aaa62e Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Wed, 10 Aug 2022 11:44:38 -0600 Subject: [PATCH 5/9] Add popover jest tests --- .../controls/common/control_group/mocks.tsx | 47 ++++++++++ src/plugins/controls/common/mocks.tsx | 41 +-------- .../controls/common/options_list/mocks.tsx | 63 +++++++++++++ .../components/options_list_popover.test.tsx | 89 +++++++++++++++++++ .../components/options_list_popover.tsx | 10 +-- .../options_list_embeddable.test.tsx} | 0 6 files changed, 206 insertions(+), 44 deletions(-) create mode 100644 src/plugins/controls/common/control_group/mocks.tsx create mode 100644 src/plugins/controls/common/options_list/mocks.tsx rename src/plugins/controls/public/options_list/{components/options_list_control.test.tsx => embeddable/options_list_embeddable.test.tsx} (100%) diff --git a/src/plugins/controls/common/control_group/mocks.tsx b/src/plugins/controls/common/control_group/mocks.tsx new file mode 100644 index 00000000000000..b2c4343f07a4bd --- /dev/null +++ b/src/plugins/controls/common/control_group/mocks.tsx @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { getDefaultControlGroupInput } from '..'; +import { ControlGroupInput } from './types'; + +export const mockControlGroupInput = (partial?: Partial): ControlGroupInput => ({ + id: 'mocked_control_group', + ...getDefaultControlGroupInput(), + ...{ + panels: { + control1: { + order: 0, + width: 'medium', + grow: true, + type: 'mockedOptionsList', + explicitInput: { + id: 'control1', + }, + }, + control2: { + order: 1, + width: 'large', + grow: true, + type: 'mockedRangeSlider', + explicitInput: { + id: 'control2', + }, + }, + control3: { + order: 2, + width: 'small', + grow: true, + type: 'mockedOptionsList', + explicitInput: { + id: 'control3', + }, + }, + }, + }, + ...(partial ?? {}), +}); diff --git a/src/plugins/controls/common/mocks.tsx b/src/plugins/controls/common/mocks.tsx index 8574c78ef40c72..70a4b31395b970 100644 --- a/src/plugins/controls/common/mocks.tsx +++ b/src/plugins/controls/common/mocks.tsx @@ -6,42 +6,5 @@ * Side Public License, v 1. */ -import { getDefaultControlGroupInput } from '.'; -import { ControlGroupInput } from './control_group/types'; - -export const mockControlGroupInput = (partial?: Partial): ControlGroupInput => ({ - id: 'mocked_control_group', - ...getDefaultControlGroupInput(), - ...{ - panels: { - control1: { - order: 0, - width: 'medium', - grow: true, - type: 'mockedOptionsList', - explicitInput: { - id: 'control1', - }, - }, - control2: { - order: 1, - width: 'large', - grow: true, - type: 'mockedRangeSlider', - explicitInput: { - id: 'control2', - }, - }, - control3: { - order: 2, - width: 'small', - grow: true, - type: 'mockedOptionsList', - explicitInput: { - id: 'control3', - }, - }, - }, - }, - ...(partial ?? {}), -}); +export * from './control_group/mocks'; +export * from './options_list/mocks'; diff --git a/src/plugins/controls/common/options_list/mocks.tsx b/src/plugins/controls/common/options_list/mocks.tsx new file mode 100644 index 00000000000000..7d1f5f01eadce7 --- /dev/null +++ b/src/plugins/controls/common/options_list/mocks.tsx @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { ReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public/redux_embeddables/types'; +import { ControlOutput } from '../../public/types'; +import { + OptionsListComponentState, + OptionsListEmbeddableInput, + OptionsListReduxState, +} from '../../public/options_list/types'; +import { optionsListReducers } from '../../public/options_list/options_list_reducers'; + +const mockOptionsListComponentState = { + field: undefined, + totalCardinality: 0, + availableOptions: ['woof', 'bark', 'meow', 'quack', 'moo'], + invalidSelections: [], + validSelections: [], + searchString: '', +} as OptionsListComponentState; + +const mockOptionsListEmbeddableInput = { + id: 'sample options list', + fieldName: 'sample field', + dataViewId: 'sample id', + selectedOptions: [], + runPastTimeout: false, + singleSelect: false, +} as OptionsListEmbeddableInput; + +const mockOptionsListOutput = { + loading: false, +} as ControlOutput; + +export const mockOptionsListContext = ( + partialState?: Partial +): ReduxEmbeddableContext => { + const mockReduxState = { + componentState: { + ...mockOptionsListComponentState, + ...partialState?.componentState, + }, + explicitInput: { + ...mockOptionsListEmbeddableInput, + ...partialState?.explicitInput, + }, + output: { + ...mockOptionsListOutput, + ...partialState?.output, + }, + } as OptionsListReduxState; + + return { + actions: {}, + useEmbeddableDispatch: () => {}, + useEmbeddableSelector: (selector: any) => selector(mockReduxState), + } as unknown as ReduxEmbeddableContext; +}; diff --git a/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx b/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx index 5c2d5b68ae2e03..beaf69cc1227bb 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx @@ -5,3 +5,92 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ + +import React from 'react'; +import { ReactWrapper } from 'enzyme'; + +import { mountWithIntl } from '@kbn/test-jest-helpers'; +import { findTestSubject } from '@elastic/eui/lib/test'; +import { EmbeddableReduxContext } from '@kbn/presentation-util-plugin/public/redux_embeddables/use_redux_embeddable_context'; + +import { OptionsListPopover, OptionsListPopoverProps } from './options_list_popover'; +import { + OptionsListComponentState, + OptionsListEmbeddableInput, + OptionsListReduxState, +} from '../types'; +import { ControlOutput } from '../..'; +import { mockOptionsListContext } from '../../../common/mocks'; + +describe('Options list popover', () => { + const defaultProps = { + width: 500, + updateSearchString: jest.fn(), + }; + + interface MountOptions { + componentState: Partial; + explicitInput: Partial; + output: Partial; + popoverProps: Partial; + } + + function mountComponent(options?: Partial) { + const compProps = { ...defaultProps, ...(options?.popoverProps ?? {}) }; + const context = mockOptionsListContext({ + componentState: options?.componentState ?? {}, + explicitInput: options?.explicitInput ?? {}, + output: options?.output ?? {}, + } as Partial); + + return mountWithIntl( + + + + ); + } + + const clickShowOnlySelections = (popover: ReactWrapper) => { + const showOnlySelectedButton = findTestSubject( + popover, + 'optionsList-control-show-only-selected' + ); + showOnlySelectedButton.simulate('click'); + }; + + test('available options list width responds to container size', () => { + let popover = mountComponent({ popoverProps: { width: 301 } }); + let availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); + expect(availableOptionsDiv.getDOMNode().getAttribute('style')).toBe('width: 301px;'); + + // the div cannot be smaller than 301 pixels wide + popover = mountComponent({ popoverProps: { width: 300 } }); + availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); + expect(availableOptionsDiv.getDOMNode().getAttribute('style')).toBe(null); + }); + + test('no available options', () => { + const popover = mountComponent({ componentState: { availableOptions: [] } }); + const availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); + expect(availableOptionsDiv.text()).toBe('No options found'); + }); + + test('display error message when the show only selected toggle is true but there are no selections', () => { + const popover = mountComponent(); + clickShowOnlySelections(popover); + const availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); + expect(availableOptionsDiv.text()).toBe('You have no selections'); + }); + + test('show only selected options', () => { + const selections = ['woof', 'bark']; + const popover = mountComponent({ + explicitInput: { selectedOptions: selections }, + }); + clickShowOnlySelections(popover); + const availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); + availableOptionsDiv.children().forEach((child, i) => { + expect(child.text()).toBe(selections[i]); + }); + }); +}); diff --git a/src/plugins/controls/public/options_list/components/options_list_popover.tsx b/src/plugins/controls/public/options_list/components/options_list_popover.tsx index 987d07d86401ac..b93a2e59fef243 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover.tsx @@ -28,13 +28,12 @@ import { optionsListReducers } from '../options_list_reducers'; import { OptionsListStrings } from './options_list_strings'; import { OptionsListReduxState } from '../types'; -export const OptionsListPopover = ({ - width, - updateSearchString, -}: { +export interface OptionsListPopoverProps { width: number; updateSearchString: (newSearchString: string) => void; -}) => { +} + +export const OptionsListPopover = ({ width, updateSearchString }: OptionsListPopoverProps) => { // Redux embeddable container Context const { useEmbeddableDispatch, @@ -137,6 +136,7 @@ export const OptionsListPopover = ({ color={showOnlySelected ? 'primary' : 'text'} display={showOnlySelected ? 'base' : 'empty'} aria-label={OptionsListStrings.popover.getClearAllSelectionsButtonTitle()} + data-test-subj="optionsList-control-show-only-selected" onClick={() => setShowOnlySelected(!showOnlySelected)} /> diff --git a/src/plugins/controls/public/options_list/components/options_list_control.test.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.test.tsx similarity index 100% rename from src/plugins/controls/public/options_list/components/options_list_control.test.tsx rename to src/plugins/controls/public/options_list/embeddable/options_list_embeddable.test.tsx From 47569446fafb099dfafa83328f96cef62fa01b8b Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Wed, 10 Aug 2022 13:40:18 -0600 Subject: [PATCH 6/9] Fix strings + imports --- .../options_list_control.stories.tsx | 12 ------ .../options_list_popover.stories.tsx | 12 ------ .../components/options_list_control.tsx | 23 ++++++----- .../options_list_editor_options.tsx | 4 ++ .../components/options_list_popover.tsx | 8 +++- .../components/options_list_strings.ts | 38 ++----------------- .../options_list_embeddable.test.tsx | 7 ---- .../embeddable/options_list_embeddable.tsx | 35 +++++++++++------ .../options_list_embeddable_factory.tsx | 21 +++++++--- .../translations/translations/fr-FR.json | 4 +- .../translations/translations/ja-JP.json | 4 +- .../translations/translations/zh-CN.json | 4 +- 12 files changed, 69 insertions(+), 103 deletions(-) delete mode 100644 src/plugins/controls/public/options_list/__stories__/options_list_control.stories.tsx delete mode 100644 src/plugins/controls/public/options_list/__stories__/options_list_popover.stories.tsx delete mode 100644 src/plugins/controls/public/options_list/embeddable/options_list_embeddable.test.tsx diff --git a/src/plugins/controls/public/options_list/__stories__/options_list_control.stories.tsx b/src/plugins/controls/public/options_list/__stories__/options_list_control.stories.tsx deleted file mode 100644 index 77c0adbef002e1..00000000000000 --- a/src/plugins/controls/public/options_list/__stories__/options_list_control.stories.tsx +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -export default { - title: 'Options List/Control', - description: '', -}; diff --git a/src/plugins/controls/public/options_list/__stories__/options_list_popover.stories.tsx b/src/plugins/controls/public/options_list/__stories__/options_list_popover.stories.tsx deleted file mode 100644 index c01cde109dde3c..00000000000000 --- a/src/plugins/controls/public/options_list/__stories__/options_list_popover.stories.tsx +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -export default { - title: 'Options List/Popover', - description: '', -}; diff --git a/src/plugins/controls/public/options_list/components/options_list_control.tsx b/src/plugins/controls/public/options_list/components/options_list_control.tsx index 8f7bff8afde743..0b2e8599151310 100644 --- a/src/plugins/controls/public/options_list/components/options_list_control.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_control.tsx @@ -6,25 +6,24 @@ * Side Public License, v 1. */ +/** External */ import { EuiFilterButton, EuiFilterGroup, EuiPopover, useResizeObserver } from '@elastic/eui'; import React, { useCallback, useEffect, useMemo, useState, useRef } from 'react'; -import { Subject } from 'rxjs'; -import classNames from 'classnames'; import { debounce, isEmpty } from 'lodash'; +import classNames from 'classnames'; +import { Subject } from 'rxjs'; +/** Internal */ import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; + +/** Local */ import { OptionsListStrings } from './options_list_strings'; import { optionsListReducers } from '../options_list_reducers'; import { OptionsListPopover } from './options_list_popover'; - -import './options_list.scss'; import { OptionsListReduxState } from '../types'; +import './options_list.scss'; -export const OptionsListComponent = ({ - typeaheadSubject, -}: { - typeaheadSubject: Subject; -}) => { +export const OptionsListControl = ({ typeaheadSubject }: { typeaheadSubject: Subject }) => { const [isPopoverOpen, setIsPopoverOpen] = useState(false); const resizeRef = useRef(null); @@ -79,11 +78,11 @@ export const OptionsListComponent = ({ selectionDisplayNode: ( <> {validSelections && ( - {validSelections?.join(OptionsListStrings.summary.getSeparator())} + {validSelections?.join(OptionsListStrings.control.getSeparator())} )} {invalidSelections && ( - {invalidSelections.join(OptionsListStrings.summary.getSeparator())} + {invalidSelections.join(OptionsListStrings.control.getSeparator())} )} @@ -106,7 +105,7 @@ export const OptionsListComponent = ({ numActiveFilters={validSelectionsCount} hasActiveFilters={Boolean(validSelectionsCount)} > - {hasSelections ? selectionDisplayNode : OptionsListStrings.summary.getPlaceholder()} + {hasSelections ? selectionDisplayNode : OptionsListStrings.control.getPlaceholder()} ); diff --git a/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx b/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx index 341afed5cb2dcf..b6715b3c3e2e13 100644 --- a/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx @@ -6,9 +6,13 @@ * Side Public License, v 1. */ +/** External */ import React, { useState } from 'react'; + +/** Internal */ import { EuiFormRow, EuiSwitch } from '@elastic/eui'; +/** Local */ import { OptionsListEmbeddableInput } from '../types'; import { OptionsListStrings } from './options_list_strings'; import { ControlEditorProps } from '../..'; diff --git a/src/plugins/controls/public/options_list/components/options_list_popover.tsx b/src/plugins/controls/public/options_list/components/options_list_popover.tsx index b93a2e59fef243..73c70df18aca28 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover.tsx @@ -6,7 +6,11 @@ * Side Public License, v 1. */ +/** External */ import React, { useMemo, useState } from 'react'; +import { isEmpty } from 'lodash'; + +/** Internal */ import { EuiFilterSelectItem, EuiPopoverTitle, @@ -21,9 +25,9 @@ import { EuiIcon, EuiTitle, } from '@elastic/eui'; -import { isEmpty } from 'lodash'; - import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; + +/** Local */ import { optionsListReducers } from '../options_list_reducers'; import { OptionsListStrings } from './options_list_strings'; import { OptionsListReduxState } from '../types'; diff --git a/src/plugins/controls/public/options_list/components/options_list_strings.ts b/src/plugins/controls/public/options_list/components/options_list_strings.ts index 87b63289bf5728..536c403413e274 100644 --- a/src/plugins/controls/public/options_list/components/options_list_strings.ts +++ b/src/plugins/controls/public/options_list/components/options_list_strings.ts @@ -9,37 +9,17 @@ import { i18n } from '@kbn/i18n'; export const OptionsListStrings = { - getDisplayName: () => - i18n.translate('controls.optionsList.displayName', { - defaultMessage: 'Options list', - }), - getDescription: () => - i18n.translate('controls.optionsList.description', { - defaultMessage: 'Add a menu for selecting field values.', - }), - summary: { + control: { getSeparator: () => - i18n.translate('controls.optionsList.summary.separator', { + i18n.translate('controls.optionsList.control.separator', { defaultMessage: ', ', }), getPlaceholder: () => - i18n.translate('controls.optionsList.summary.placeholder', { + i18n.translate('controls.optionsList.control.placeholder', { defaultMessage: 'Select...', }), }, editor: { - getDataViewTitle: () => - i18n.translate('controls.optionsList.editor.dataViewTitle', { - defaultMessage: 'Data view', - }), - getNoDataViewTitle: () => - i18n.translate('controls.optionsList.editor.noDataViewTitle', { - defaultMessage: 'Select data view', - }), - getFieldTitle: () => - i18n.translate('controls.optionsList.editor.fieldTitle', { - defaultMessage: 'Field', - }), getAllowMultiselectTitle: () => i18n.translate('controls.optionsList.editor.allowMultiselectTitle', { defaultMessage: 'Allow multiple selections in dropdown', @@ -107,16 +87,4 @@ export const OptionsListStrings = { values: { selectedOptions }, }), }, - errors: { - getDataViewNotFoundError: (dataViewId: string) => - i18n.translate('controls.optionsList.errors.dataViewNotFound', { - defaultMessage: 'Could not locate data view: {dataViewId}', - values: { dataViewId }, - }), - getfieldNotFoundError: (fieldId: string) => - i18n.translate('controls.optionsList.errors.fieldNotFound', { - defaultMessage: 'Could not locate field: {fieldId}', - values: { fieldId }, - }), - }, }; diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.test.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.test.tsx deleted file mode 100644 index 5c2d5b68ae2e03..00000000000000 --- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.test.tsx +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx index 6424e881c20813..88d140248bcb7f 100644 --- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx +++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +/** External */ import React from 'react'; import ReactDOM from 'react-dom'; import { batch } from 'react-redux'; @@ -14,6 +15,8 @@ import { isEmpty, isEqual } from 'lodash'; import { merge, Subject, Subscription } from 'rxjs'; import { debounceTime, map, distinctUntilChanged, skip } from 'rxjs/operators'; +/** Internal */ +import { i18n } from '@kbn/i18n'; import { Filter, compareFilters, @@ -26,19 +29,19 @@ import { DataView } from '@kbn/data-views-plugin/public'; import { Embeddable, IContainer } from '@kbn/embeddable-plugin/public'; import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; +/** Local */ import { - OptionsListEmbeddableInput, OptionsListField, - OptionsListReduxState, OPTIONS_LIST_CONTROL, + OptionsListReduxState, + OptionsListEmbeddableInput, } from '../types'; -import { OptionsListComponent } from '../components/options_list_control'; -import { ControlsOptionsListService } from '../../services/options_list'; -import { ControlsDataViewsService } from '../../services/data_views'; -import { optionsListReducers } from '../options_list_reducers'; -import { OptionsListStrings } from '../components/options_list_strings'; -import { ControlInput, ControlOutput } from '../..'; import { pluginServices } from '../../services'; +import { ControlInput, ControlOutput } from '../..'; +import { optionsListReducers } from '../options_list_reducers'; +import { ControlsDataViewsService } from '../../services/data_views'; +import { OptionsListControl } from '../components/options_list_control'; +import { ControlsOptionsListService } from '../../services/options_list'; const diffDataFetchProps = ( last?: OptionsListDataFetchProps, @@ -205,7 +208,12 @@ export class OptionsListEmbeddable extends Embeddable - + , node diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx index 79939d373e12bd..4f04f5faf5642e 100644 --- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx +++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx @@ -6,19 +6,22 @@ * Side Public License, v 1. */ +/** External */ import deepEqual from 'fast-deep-equal'; +/** Internal */ +import { i18n } from '@kbn/i18n'; import { lazyLoadReduxEmbeddablePackage } from '@kbn/presentation-util-plugin/public'; import { EmbeddableFactoryDefinition, IContainer } from '@kbn/embeddable-plugin/public'; -import { OptionsListEditorOptions } from '../components/options_list_editor_options'; -import { ControlEmbeddable, DataControlField, IEditableControlFactory } from '../../types'; -import { OptionsListEmbeddableInput, OPTIONS_LIST_CONTROL } from '../types'; +/** Local */ import { createOptionsListExtract, createOptionsListInject, } from '../../../common/options_list/options_list_persistable_state'; -import { OptionsListStrings } from '../components/options_list_strings'; +import { OptionsListEmbeddableInput, OPTIONS_LIST_CONTROL } from '../types'; +import { OptionsListEditorOptions } from '../components/options_list_editor_options'; +import { ControlEmbeddable, DataControlField, IEditableControlFactory } from '../../types'; export class OptionsListEmbeddableFactory implements EmbeddableFactoryDefinition, IEditableControlFactory @@ -64,9 +67,15 @@ export class OptionsListEmbeddableFactory public isEditable = () => Promise.resolve(false); - public getDisplayName = () => OptionsListStrings.getDisplayName(); + public getDisplayName = () => + i18n.translate('controls.optionsList.displayName', { + defaultMessage: 'Options list', + }); public getIconType = () => 'editorChecklist'; - public getDescription = () => OptionsListStrings.getDescription(); + public getDescription = () => + i18n.translate('controls.optionsList.description', { + defaultMessage: 'Add a menu for selecting field values.', + }); public inject = createOptionsListInject(); public extract = createOptionsListExtract(); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 0c0ad52fb50989..37e91bff1386e2 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -1328,8 +1328,8 @@ "controls.optionsList.popover.loading": "Options de chargement", "controls.optionsList.popover.selectedOptionsTitle": "Afficher uniquement les options sélectionnées", "controls.optionsList.popover.selectionsEmpty": "Vous n'avez pas de sélections", - "controls.optionsList.summary.placeholder": "Sélectionner…", - "controls.optionsList.summary.separator": ", ", + "controls.optionsList.control.placeholder": "Sélectionner…", + "controls.optionsList.control.separator": ", ", "controls.rangeSlider.description": "Ajoutez un contrôle pour la sélection d'une plage de valeurs de champ.", "controls.rangeSlider.displayName": "Curseur de plage", "controls.rangeSlider.editor.dataViewTitle": "Vue de données", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 36f3600229e5e9..dedcffc95c9f94 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -1330,8 +1330,8 @@ "controls.optionsList.popover.loading": "オプションを読み込み中", "controls.optionsList.popover.selectedOptionsTitle": "選択したオプションのみを表示", "controls.optionsList.popover.selectionsEmpty": "選択されていません", - "controls.optionsList.summary.placeholder": "選択してください...", - "controls.optionsList.summary.separator": ",", + "controls.optionsList.control.placeholder": "選択してください...", + "controls.optionsList.control.separator": ",", "controls.rangeSlider.description": "フィールド値の範囲を選択するためのコントロールを追加", "controls.rangeSlider.displayName": "範囲スライダー", "controls.rangeSlider.editor.dataViewTitle": "データビュー", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 504cf9541c7ce1..818aba0f53d30f 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -1329,8 +1329,8 @@ "controls.optionsList.popover.loading": "正在加载选项", "controls.optionsList.popover.selectedOptionsTitle": "仅显示选定选项", "controls.optionsList.popover.selectionsEmpty": "您未选择任何内容", - "controls.optionsList.summary.placeholder": "选择......", - "controls.optionsList.summary.separator": ",", + "controls.optionsList.control.placeholder": "选择......", + "controls.optionsList.control.separator": ",", "controls.rangeSlider.description": "添加用于选择字段值范围的控件。", "controls.rangeSlider.displayName": "范围滑块", "controls.rangeSlider.editor.dataViewTitle": "数据视图", From 0720d1bac5976ad3683e62bc26933a3c3c254b3a Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Wed, 10 Aug 2022 13:49:38 -0600 Subject: [PATCH 7/9] Remove comments and unused strings --- .../public/options_list/components/options_list_control.tsx | 3 --- .../options_list/components/options_list_editor_options.tsx | 3 --- .../public/options_list/components/options_list_popover.tsx | 3 --- .../options_list/embeddable/options_list_embeddable.tsx | 3 --- .../embeddable/options_list_embeddable_factory.tsx | 3 --- x-pack/plugins/translations/translations/fr-FR.json | 5 ----- x-pack/plugins/translations/translations/ja-JP.json | 5 ----- x-pack/plugins/translations/translations/zh-CN.json | 5 ----- 8 files changed, 30 deletions(-) diff --git a/src/plugins/controls/public/options_list/components/options_list_control.tsx b/src/plugins/controls/public/options_list/components/options_list_control.tsx index 0b2e8599151310..e2c295e234d33e 100644 --- a/src/plugins/controls/public/options_list/components/options_list_control.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_control.tsx @@ -6,17 +6,14 @@ * Side Public License, v 1. */ -/** External */ import { EuiFilterButton, EuiFilterGroup, EuiPopover, useResizeObserver } from '@elastic/eui'; import React, { useCallback, useEffect, useMemo, useState, useRef } from 'react'; import { debounce, isEmpty } from 'lodash'; import classNames from 'classnames'; import { Subject } from 'rxjs'; -/** Internal */ import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; -/** Local */ import { OptionsListStrings } from './options_list_strings'; import { optionsListReducers } from '../options_list_reducers'; import { OptionsListPopover } from './options_list_popover'; diff --git a/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx b/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx index b6715b3c3e2e13..9fb7bc4df532c1 100644 --- a/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx @@ -6,13 +6,10 @@ * Side Public License, v 1. */ -/** External */ import React, { useState } from 'react'; -/** Internal */ import { EuiFormRow, EuiSwitch } from '@elastic/eui'; -/** Local */ import { OptionsListEmbeddableInput } from '../types'; import { OptionsListStrings } from './options_list_strings'; import { ControlEditorProps } from '../..'; diff --git a/src/plugins/controls/public/options_list/components/options_list_popover.tsx b/src/plugins/controls/public/options_list/components/options_list_popover.tsx index 73c70df18aca28..737b8646533cb3 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover.tsx @@ -6,11 +6,9 @@ * Side Public License, v 1. */ -/** External */ import React, { useMemo, useState } from 'react'; import { isEmpty } from 'lodash'; -/** Internal */ import { EuiFilterSelectItem, EuiPopoverTitle, @@ -27,7 +25,6 @@ import { } from '@elastic/eui'; import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; -/** Local */ import { optionsListReducers } from '../options_list_reducers'; import { OptionsListStrings } from './options_list_strings'; import { OptionsListReduxState } from '../types'; diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx index 88d140248bcb7f..2a58406d079a3a 100644 --- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx +++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -/** External */ import React from 'react'; import ReactDOM from 'react-dom'; import { batch } from 'react-redux'; @@ -15,7 +14,6 @@ import { isEmpty, isEqual } from 'lodash'; import { merge, Subject, Subscription } from 'rxjs'; import { debounceTime, map, distinctUntilChanged, skip } from 'rxjs/operators'; -/** Internal */ import { i18n } from '@kbn/i18n'; import { Filter, @@ -29,7 +27,6 @@ import { DataView } from '@kbn/data-views-plugin/public'; import { Embeddable, IContainer } from '@kbn/embeddable-plugin/public'; import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; -/** Local */ import { OptionsListField, OPTIONS_LIST_CONTROL, diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx index 4f04f5faf5642e..2b0fa51f3127ec 100644 --- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx +++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx @@ -6,15 +6,12 @@ * Side Public License, v 1. */ -/** External */ import deepEqual from 'fast-deep-equal'; -/** Internal */ import { i18n } from '@kbn/i18n'; import { lazyLoadReduxEmbeddablePackage } from '@kbn/presentation-util-plugin/public'; import { EmbeddableFactoryDefinition, IContainer } from '@kbn/embeddable-plugin/public'; -/** Local */ import { createOptionsListExtract, createOptionsListInject, diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 37e91bff1386e2..ba1b988e49f632 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -1310,12 +1310,7 @@ "controls.optionsList.description": "Ajoutez un menu pour la sélection de valeurs de champ.", "controls.optionsList.displayName": "Liste des options", "controls.optionsList.editor.allowMultiselectTitle": "Permettre des sélections multiples dans une liste déroulante", - "controls.optionsList.editor.dataViewTitle": "Vue de données", - "controls.optionsList.editor.fieldTitle": "Champ", - "controls.optionsList.editor.noDataViewTitle": "Sélectionner la vue de données", "controls.optionsList.editor.runPastTimeout": "Exécuter après expiration du délai", - "controls.optionsList.errors.dataViewNotFound": "Impossible de localiser la vue de données : {dataViewId}", - "controls.optionsList.errors.fieldNotFound": "Impossible de localiser le champ : {fieldId}", "controls.optionsList.popover.allOptionsTitle": "Afficher toutes les options", "controls.optionsList.popover.cardinalityPlaceholder": "Rechercher {totalOptions} {totalOptions, plural, one {option disponible} other {options disponibles}}", "controls.optionsList.popover.cardinalityTooltip": "{totalOptions} options disponibles.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index dedcffc95c9f94..b10e4deb80f53a 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -1312,12 +1312,7 @@ "controls.optionsList.description": "フィールド値を選択するメニューを追加", "controls.optionsList.displayName": "オプションリスト", "controls.optionsList.editor.allowMultiselectTitle": "ドロップダウンでの複数選択を許可", - "controls.optionsList.editor.dataViewTitle": "データビュー", - "controls.optionsList.editor.fieldTitle": "フィールド", - "controls.optionsList.editor.noDataViewTitle": "データビューを選択", "controls.optionsList.editor.runPastTimeout": "過去のタイムアウトを実行", - "controls.optionsList.errors.dataViewNotFound": "データビュー{dataViewId}が見つかりませんでした", - "controls.optionsList.errors.fieldNotFound": "フィールド{fieldId}が見つかりませんでした", "controls.optionsList.popover.allOptionsTitle": "すべてのオプションを表示", "controls.optionsList.popover.cardinalityPlaceholder": "{totalOptions}個の使用可能な{totalOptions, plural, other {オプション}}を検索", "controls.optionsList.popover.cardinalityTooltip": "{totalOptions}個のオプションを使用できます。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 818aba0f53d30f..31f904aff96c95 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -1311,12 +1311,7 @@ "controls.optionsList.description": "添加用于选择字段值的菜单。", "controls.optionsList.displayName": "选项列表", "controls.optionsList.editor.allowMultiselectTitle": "下拉列表中允许多选", - "controls.optionsList.editor.dataViewTitle": "数据视图", - "controls.optionsList.editor.fieldTitle": "字段", - "controls.optionsList.editor.noDataViewTitle": "选择数据视图", "controls.optionsList.editor.runPastTimeout": "运行超时", - "controls.optionsList.errors.dataViewNotFound": "找不到数据视图:{dataViewId}", - "controls.optionsList.errors.fieldNotFound": "找不到字段:{fieldId}", "controls.optionsList.popover.allOptionsTitle": "显示所有选项", "controls.optionsList.popover.cardinalityPlaceholder": "搜索 {totalOptions} 个可用{totalOptions, plural, other {选项}}", "controls.optionsList.popover.cardinalityTooltip": "{totalOptions} 个可用选项。", From 9a891a012b743bb361dbc2647401332cdc468f57 Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Wed, 10 Aug 2022 15:12:43 -0600 Subject: [PATCH 8/9] Fix jest tests --- .../components/options_list_popover.test.tsx | 12 ++++++++++-- .../options_list/components/options_list_popover.tsx | 10 ++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx b/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx index beaf69cc1227bb..13c26fc6ab50dd 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover.test.tsx @@ -72,14 +72,22 @@ describe('Options list popover', () => { test('no available options', () => { const popover = mountComponent({ componentState: { availableOptions: [] } }); const availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); - expect(availableOptionsDiv.text()).toBe('No options found'); + const noOptionsDiv = findTestSubject( + availableOptionsDiv, + 'optionsList-control-noSelectionsMessage' + ); + expect(noOptionsDiv.exists()).toBeTruthy(); }); test('display error message when the show only selected toggle is true but there are no selections', () => { const popover = mountComponent(); clickShowOnlySelections(popover); const availableOptionsDiv = findTestSubject(popover, 'optionsList-control-available-options'); - expect(availableOptionsDiv.text()).toBe('You have no selections'); + const noSelectionsDiv = findTestSubject( + availableOptionsDiv, + 'optionsList-control-selectionsEmptyMessage' + ); + expect(noSelectionsDiv.exists()).toBeTruthy(); }); test('show only selected options', () => { diff --git a/src/plugins/controls/public/options_list/components/options_list_popover.tsx b/src/plugins/controls/public/options_list/components/options_list_popover.tsx index 737b8646533cb3..0cdfcefb9baa50 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover.tsx @@ -176,7 +176,10 @@ export const OptionsListPopover = ({ width, updateSearchString }: OptionsListPop ))} {!loading && (!availableOptions || availableOptions.length === 0) && ( -
+
@@ -230,7 +233,10 @@ export const OptionsListPopover = ({ width, updateSearchString }: OptionsListPop ))} {(!selectedOptions || selectedOptions.length === 0) && ( -
+
From 2d1944c55095fee7e32086ddcfd802f9e6506c0a Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Wed, 10 Aug 2022 15:18:34 -0600 Subject: [PATCH 9/9] Clean imports --- .../options_list/components/options_list_control.tsx | 11 ++++++----- .../components/options_list_editor_options.tsx | 2 +- .../embeddable/options_list_embeddable_factory.tsx | 4 ++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/plugins/controls/public/options_list/components/options_list_control.tsx b/src/plugins/controls/public/options_list/components/options_list_control.tsx index e2c295e234d33e..7eb8fe783cc0b4 100644 --- a/src/plugins/controls/public/options_list/components/options_list_control.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_control.tsx @@ -6,18 +6,19 @@ * Side Public License, v 1. */ -import { EuiFilterButton, EuiFilterGroup, EuiPopover, useResizeObserver } from '@elastic/eui'; -import React, { useCallback, useEffect, useMemo, useState, useRef } from 'react'; -import { debounce, isEmpty } from 'lodash'; -import classNames from 'classnames'; import { Subject } from 'rxjs'; +import classNames from 'classnames'; +import { debounce, isEmpty } from 'lodash'; +import React, { useCallback, useEffect, useMemo, useState, useRef } from 'react'; +import { EuiFilterButton, EuiFilterGroup, EuiPopover, useResizeObserver } from '@elastic/eui'; import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; import { OptionsListStrings } from './options_list_strings'; -import { optionsListReducers } from '../options_list_reducers'; import { OptionsListPopover } from './options_list_popover'; +import { optionsListReducers } from '../options_list_reducers'; import { OptionsListReduxState } from '../types'; + import './options_list.scss'; export const OptionsListControl = ({ typeaheadSubject }: { typeaheadSubject: Subject }) => { diff --git a/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx b/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx index 9fb7bc4df532c1..296cbc0c068363 100644 --- a/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_editor_options.tsx @@ -10,8 +10,8 @@ import React, { useState } from 'react'; import { EuiFormRow, EuiSwitch } from '@elastic/eui'; -import { OptionsListEmbeddableInput } from '../types'; import { OptionsListStrings } from './options_list_strings'; +import { OptionsListEmbeddableInput } from '../types'; import { ControlEditorProps } from '../..'; interface OptionsListEditorState { diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx index 2b0fa51f3127ec..6d70acf4017b0c 100644 --- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx +++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx @@ -16,9 +16,9 @@ import { createOptionsListExtract, createOptionsListInject, } from '../../../common/options_list/options_list_persistable_state'; -import { OptionsListEmbeddableInput, OPTIONS_LIST_CONTROL } from '../types'; -import { OptionsListEditorOptions } from '../components/options_list_editor_options'; import { ControlEmbeddable, DataControlField, IEditableControlFactory } from '../../types'; +import { OptionsListEditorOptions } from '../components/options_list_editor_options'; +import { OptionsListEmbeddableInput, OPTIONS_LIST_CONTROL } from '../types'; export class OptionsListEmbeddableFactory implements EmbeddableFactoryDefinition, IEditableControlFactory