From 65fd06b0bc5854c043ee668845f03051cee69b88 Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Sun, 20 Mar 2022 22:57:33 +0500 Subject: [PATCH 01/24] [Unified search] Create unified search plugin --- .i18nrc.json | 3 +- docs/developer/plugin-list.asciidoc | 4 + examples/search_examples/kibana.json | 2 +- .../search_examples/public/application.tsx | 4 +- .../search_examples/public/search/app.tsx | 5 +- .../public/search_sessions/app.tsx | 5 +- examples/search_examples/public/types.ts | 2 + packages/kbn-optimizer/limits.yml | 1 + .../public/actions/apply_filter_action.ts | 2 +- .../apply_filter_popover_content.tsx | 5 +- .../apply_filters/apply_filters_popover.tsx | 2 +- .../public/{ui => }/apply_filters/index.ts | 0 src/plugins/data/public/deprecated.ts | 5 +- .../filter_bar/_global_filter_group.scss | 0 .../filter_bar/_global_filter_item.scss | 0 .../public/{ui => }/filter_bar/_index.scss | 0 .../{ui => }/filter_bar/_variables.scss | 0 .../public/{ui => }/filter_bar/filter_bar.tsx | 14 +- .../filter_editor/filter_editor.test.tsx | 4 +- .../filter_editor/generic_combo_box.tsx | 0 .../filter_bar/filter_editor/index.tsx | 6 +- .../__snapshots__/filter_label.test.tsx.snap | 68 +++++++++ .../lib/filter_editor_utils.test.ts | 4 +- .../filter_editor/lib/filter_editor_utils.ts | 2 +- .../filter_editor/lib/filter_label.test.tsx | 64 ++++++++ .../filter_editor/lib/filter_label.tsx | 2 +- .../filter_editor/lib/filter_operators.ts | 2 +- .../filter_editor/phrase_suggestor.tsx | 6 +- .../filter_editor/phrase_value_input.tsx | 2 +- .../filter_editor/phrases_values_input.tsx | 2 +- .../filter_editor/range_value_input.tsx | 4 +- .../filter_editor/value_input_type.tsx | 2 +- .../{ui => }/filter_bar/filter_item.tsx | 8 +- .../{ui => }/filter_bar/filter_options.tsx | 0 .../{ui => }/filter_bar/filter_view/index.tsx | 0 .../data/public/{ui => }/filter_bar/index.tsx | 7 + src/plugins/data/public/index.scss | 3 +- src/plugins/data/public/index.ts | 15 +- src/plugins/data/public/mocks.ts | 4 - src/plugins/data/public/plugin.ts | 20 +-- src/plugins/data/public/query/index.tsx | 1 + src/plugins/data/public/query/lib/index.ts | 4 - .../public/search/fetch/handle_response.tsx | 2 +- src/plugins/data/public/search/index.ts | 2 + .../__mocks__/shard_failure_request.ts | 0 .../__mocks__/shard_failure_response.ts | 0 .../shard_failure_description.test.tsx.snap | 0 .../shard_failure_modal.test.tsx.snap | 0 .../shard_failure_table.test.tsx.snap | 0 .../_shard_failure_modal.scss | 0 .../{ui => }/shard_failure_modal/index.tsx | 0 .../shard_failure_description.test.tsx | 0 .../shard_failure_description.tsx | 0 .../shard_failure_description_header.tsx | 0 .../shard_failure_modal.test.tsx | 0 .../shard_failure_modal.tsx | 0 ...d_failure_open_modal_button.test.mocks.tsx | 2 +- .../shard_failure_open_modal_button.test.tsx | 0 .../shard_failure_open_modal_button.tsx | 7 +- .../shard_failure_table.test.tsx | 0 .../shard_failure_table.tsx | 0 .../shard_failure_types.ts | 0 src/plugins/data/public/types.ts | 15 -- .../filter_editor/lib/filter_label.test.tsx | 143 ------------------ src/plugins/data_view_management/kibana.json | 2 +- .../components/scripting_help/test_script.tsx | 2 +- .../mount_management_section.tsx | 3 +- .../data_view_management/public/mocks.ts | 3 + .../data_view_management/public/plugin.ts | 2 + .../data_view_management/public/types.ts | 2 + .../data_view_management/tsconfig.json | 1 + src/plugins/input_control_vis/kibana.json | 2 +- .../editor/index_pattern_select_form_row.tsx | 2 +- .../components/editor/list_control_editor.tsx | 6 +- .../editor/range_control_editor.tsx | 6 +- .../input_control_vis/public/plugin.ts | 2 + src/plugins/input_control_vis/tsconfig.json | 1 + src/plugins/navigation/kibana.json | 2 +- src/plugins/navigation/public/plugin.ts | 4 +- .../top_nav_menu/create_top_nav_menu.tsx | 6 +- .../public/top_nav_menu/top_nav_menu.test.tsx | 18 ++- .../public/top_nav_menu/top_nav_menu.tsx | 15 +- src/plugins/navigation/public/types.ts | 4 +- src/plugins/navigation/tsconfig.json | 1 + src/plugins/unified_search/README.md | 9 ++ src/plugins/unified_search/config.ts | 13 ++ src/plugins/unified_search/jest.config.js | 16 ++ src/plugins/unified_search/kibana.json | 13 ++ .../public/index.scss} | 5 - .../ui => unified_search/public}/index.ts | 14 +- .../create_index_pattern_select.tsx | 2 +- .../public}/index_pattern_select/index.tsx | 0 .../index_pattern_select.tsx | 3 +- src/plugins/unified_search/public/mocks.ts | 25 +++ src/plugins/unified_search/public/plugin.ts | 58 +++++++ .../public}/query_string_input/_index.scss | 0 .../query_string_input/_query_bar.scss | 0 .../fetch_index_patterns.ts | 2 +- .../query_string_input}/from_user.test.ts | 2 +- .../public/query_string_input}/from_user.ts | 0 .../public}/query_string_input/index.tsx | 3 +- .../language_switcher.test.tsx | 4 +- .../query_string_input/language_switcher.tsx | 29 ++-- .../public/query_string_input}/match_pairs.ts | 0 .../no_data_popover.test.tsx | 0 .../query_string_input/no_data_popover.tsx | 16 +- .../query_bar_top_row.test.tsx | 10 +- .../query_string_input/query_bar_top_row.tsx | 19 ++- .../query_string_input.test.mocks.ts | 4 +- .../query_string_input.test.tsx | 8 +- .../query_string_input/query_string_input.tsx | 45 +++--- .../query_string_input}/to_user.test.ts | 2 +- .../public/query_string_input}/to_user.ts | 0 .../public}/saved_query_form/index.ts | 0 .../saved_query_form/save_query_form.tsx | 36 +++-- .../saved_query_management/_index.scss | 0 .../_saved_query_list_item.scss | 0 .../_saved_query_management_component.scss | 0 .../public}/saved_query_management/index.ts | 0 .../saved_query_list_item.tsx | 40 ++--- .../saved_query_management_component.tsx | 42 ++--- .../public}/search_bar/create_search_bar.tsx | 13 +- .../public}/search_bar/index.tsx | 3 +- .../search_bar/lib/clear_saved_query.test.ts | 5 +- .../search_bar/lib/clear_saved_query.ts | 2 +- .../populate_state_from_saved_query.test.ts | 10 +- .../lib/populate_state_from_saved_query.ts | 2 +- .../search_bar/lib/use_filter_manager.ts | 2 +- .../lib/use_query_string_manager.ts | 4 +- .../public}/search_bar/lib/use_saved_query.ts | 7 +- .../public}/search_bar/lib/use_timefilter.ts | 2 +- .../public}/search_bar/search_bar.test.tsx | 10 +- .../public}/search_bar/search_bar.tsx | 12 +- src/plugins/unified_search/public/services.ts | 16 ++ .../public/test_helpers/get_stub_filter.ts | 34 +++++ .../suggestion_component.test.tsx.snap | 0 .../public}/typeahead/_index.scss | 0 .../public}/typeahead/_suggestion.scss | 0 .../public}/typeahead/constants.ts | 0 .../public}/typeahead/index.tsx | 0 .../typeahead/suggestion_component.test.tsx | 2 +- .../typeahead/suggestion_component.tsx | 2 +- .../typeahead/suggestions_component.test.tsx | 2 +- .../typeahead/suggestions_component.tsx | 8 +- .../public}/typeahead/types.ts | 2 +- src/plugins/unified_search/public/types.ts | 43 ++++++ .../public}/utils/index.ts | 1 + .../public}/utils/on_raf.ts | 0 .../public/utils/shallow_equal.ts | 36 +++++ src/plugins/unified_search/tsconfig.json | 23 +++ src/plugins/vis_default_editor/kibana.json | 2 +- .../public/components/controls/filter.tsx | 9 +- src/plugins/vis_default_editor/tsconfig.json | 3 +- src/plugins/vis_types/timeseries/kibana.json | 2 +- .../components/query_bar_wrapper.tsx | 2 +- .../vis_types/timeseries/tsconfig.json | 1 + .../exploratory_view_example/public/plugin.ts | 6 +- .../cloud_security_posture/kibana.json | 2 +- .../public/pages/findings/findings.test.tsx | 21 ++- .../pages/findings/findings_search_bar.tsx | 2 +- .../cloud_security_posture/public/types.ts | 3 +- x-pack/plugins/data_visualizer/kibana.json | 3 +- .../components/search_panel/search_panel.tsx | 4 +- .../index_data_visualizer.tsx | 2 + .../plugins/data_visualizer/public/plugin.ts | 2 + x-pack/plugins/data_visualizer/tsconfig.json | 2 + .../drilldowns/url_drilldown/tsconfig.json | 3 +- x-pack/plugins/file_upload/kibana.json | 1 + x-pack/plugins/file_upload/public/plugin.ts | 4 +- x-pack/plugins/file_upload/tsconfig.json | 1 + x-pack/plugins/fleet/kibana.json | 2 +- .../fleet/components/search_bar.tsx | 2 +- .../components/agent_logs/query_bar.tsx | 2 +- x-pack/plugins/fleet/tsconfig.json | 1 + x-pack/plugins/graph/kibana.json | 1 + .../public/components/search_bar.test.tsx | 3 +- .../graph/public/components/search_bar.tsx | 2 +- x-pack/plugins/graph/tsconfig.json | 3 +- x-pack/plugins/infra/kibana.json | 1 + .../inventory/components/expression.tsx | 5 +- .../metric_anomaly/components/expression.tsx | 2 +- .../components/expression.tsx | 5 +- .../public/pages/logs/stream/page_toolbar.tsx | 2 +- x-pack/plugins/infra/tsconfig.json | 3 +- x-pack/plugins/lens/kibana.json | 3 +- .../filters/filter_popover.test.tsx | 4 +- .../definitions/filters/filters.test.tsx | 2 +- .../indexpattern_datasource/query_input.tsx | 3 +- x-pack/plugins/lens/tsconfig.json | 3 +- x-pack/plugins/maps/kibana.json | 1 + .../filter_editor/filter_editor.tsx | 4 +- .../resources/where_expression.tsx | 4 +- x-pack/plugins/maps/public/kibana_services.ts | 4 +- x-pack/plugins/maps/public/plugin.ts | 2 + x-pack/plugins/maps/tsconfig.json | 3 +- x-pack/plugins/ml/kibana.json | 3 +- .../exploration_query_bar.tsx | 3 +- .../explorer_query_bar/explorer_query_bar.tsx | 3 +- x-pack/plugins/ml/tsconfig.json | 3 +- x-pack/plugins/observability/kibana.json | 1 + .../alerts/components/alerts_search_bar.tsx | 3 +- x-pack/plugins/observability/tsconfig.json | 3 +- x-pack/plugins/security_solution/kibana.json | 6 +- .../components/query_bar/index.test.tsx | 3 +- .../common/components/query_bar/index.tsx | 2 +- .../components/search_bar/index.test.tsx | 2 + .../common/components/search_bar/index.tsx | 4 +- .../public/common/lib/kibana/services.ts | 5 +- .../mock/endpoint/dependencies_start_mock.ts | 12 +- .../view/components/search_bar.tsx | 3 +- .../plugins/security_solution/public/types.ts | 2 + .../plugins/security_solution/tsconfig.json | 3 +- x-pack/plugins/stack_alerts/kibana.json | 1 + .../alert_types/es_query/expression.tsx | 2 +- .../expressions/boundary_index_expression.tsx | 5 +- .../expressions/entity_index_expression.tsx | 5 +- ...containment_alert_type_expression.test.tsx | 5 + .../geo_containment/query_builder/index.tsx | 7 +- .../alert_types/threshold/expression.tsx | 2 +- x-pack/plugins/stack_alerts/tsconfig.json | 3 +- x-pack/plugins/transform/kibana.json | 1 + .../source_search_bar/source_search_bar.tsx | 2 +- x-pack/plugins/transform/tsconfig.json | 1 + .../translations/translations/fr-FR.json | 102 ++++++------- .../translations/translations/ja-JP.json | 102 ++++++------- .../translations/translations/zh-CN.json | 102 ++++++------- .../plugins/triggers_actions_ui/kibana.json | 2 +- .../public/application/app.tsx | 2 + .../sections/rule_form/rule_form.tsx | 2 + .../common/lib/kibana/kibana_react.mock.ts | 2 + .../triggers_actions_ui/public/plugin.ts | 3 + .../triggers_actions_ui/public/types.ts | 10 +- .../plugins/triggers_actions_ui/tsconfig.json | 1 + x-pack/plugins/uptime/kibana.json | 2 +- .../alerts/alert_query_bar/query_bar.tsx | 2 +- .../overview/query_bar/query_bar.tsx | 2 +- x-pack/plugins/uptime/tsconfig.json | 3 + 237 files changed, 1090 insertions(+), 684 deletions(-) rename src/plugins/data/public/{ui => }/apply_filters/apply_filter_popover_content.tsx (95%) rename src/plugins/data/public/{ui => }/apply_filters/apply_filters_popover.tsx (94%) rename src/plugins/data/public/{ui => }/apply_filters/index.ts (100%) rename src/plugins/data/public/{ui => }/filter_bar/_global_filter_group.scss (100%) rename src/plugins/data/public/{ui => }/filter_bar/_global_filter_item.scss (100%) rename src/plugins/data/public/{ui => }/filter_bar/_index.scss (100%) rename src/plugins/data/public/{ui => }/filter_bar/_variables.scss (100%) rename src/plugins/data/public/{ui => }/filter_bar/filter_bar.tsx (95%) rename src/plugins/data/public/{ui => }/filter_bar/filter_editor/filter_editor.test.tsx (93%) rename src/plugins/data/public/{ui => }/filter_bar/filter_editor/generic_combo_box.tsx (100%) rename src/plugins/data/public/{ui => }/filter_bar/filter_editor/index.tsx (98%) create mode 100644 src/plugins/data/public/filter_bar/filter_editor/lib/__snapshots__/filter_label.test.tsx.snap rename src/plugins/data/public/{ui => }/filter_bar/filter_editor/lib/filter_editor_utils.test.ts (98%) rename src/plugins/data/public/{ui => }/filter_bar/filter_editor/lib/filter_editor_utils.ts (99%) create mode 100644 src/plugins/data/public/filter_bar/filter_editor/lib/filter_label.test.tsx rename src/plugins/data/public/{ui => }/filter_bar/filter_editor/lib/filter_label.tsx (97%) rename src/plugins/data/public/{ui => }/filter_bar/filter_editor/lib/filter_operators.ts (98%) rename src/plugins/data/public/{ui => }/filter_bar/filter_editor/phrase_suggestor.tsx (94%) rename src/plugins/data/public/{ui => }/filter_bar/filter_editor/phrase_value_input.tsx (97%) rename src/plugins/data/public/{ui => }/filter_bar/filter_editor/phrases_values_input.tsx (97%) rename src/plugins/data/public/{ui => }/filter_bar/filter_editor/range_value_input.tsx (96%) rename src/plugins/data/public/{ui => }/filter_bar/filter_editor/value_input_type.tsx (98%) rename src/plugins/data/public/{ui => }/filter_bar/filter_item.tsx (97%) rename src/plugins/data/public/{ui => }/filter_bar/filter_options.tsx (100%) rename src/plugins/data/public/{ui => }/filter_bar/filter_view/index.tsx (100%) rename src/plugins/data/public/{ui => }/filter_bar/index.tsx (79%) rename src/plugins/data/public/{ui => }/shard_failure_modal/__mocks__/shard_failure_request.ts (100%) rename src/plugins/data/public/{ui => }/shard_failure_modal/__mocks__/shard_failure_response.ts (100%) rename src/plugins/data/public/{ui => }/shard_failure_modal/__snapshots__/shard_failure_description.test.tsx.snap (100%) rename src/plugins/data/public/{ui => }/shard_failure_modal/__snapshots__/shard_failure_modal.test.tsx.snap (100%) rename src/plugins/data/public/{ui => }/shard_failure_modal/__snapshots__/shard_failure_table.test.tsx.snap (100%) rename src/plugins/data/public/{ui => }/shard_failure_modal/_shard_failure_modal.scss (100%) rename src/plugins/data/public/{ui => }/shard_failure_modal/index.tsx (100%) rename src/plugins/data/public/{ui => }/shard_failure_modal/shard_failure_description.test.tsx (100%) rename src/plugins/data/public/{ui => }/shard_failure_modal/shard_failure_description.tsx (100%) rename src/plugins/data/public/{ui => }/shard_failure_modal/shard_failure_description_header.tsx (100%) rename src/plugins/data/public/{ui => }/shard_failure_modal/shard_failure_modal.test.tsx (100%) rename src/plugins/data/public/{ui => }/shard_failure_modal/shard_failure_modal.tsx (100%) rename src/plugins/data/public/{ui => }/shard_failure_modal/shard_failure_open_modal_button.test.mocks.tsx (91%) rename src/plugins/data/public/{ui => }/shard_failure_modal/shard_failure_open_modal_button.test.tsx (100%) rename src/plugins/data/public/{ui => }/shard_failure_modal/shard_failure_open_modal_button.tsx (91%) rename src/plugins/data/public/{ui => }/shard_failure_modal/shard_failure_table.test.tsx (100%) rename src/plugins/data/public/{ui => }/shard_failure_modal/shard_failure_table.tsx (100%) rename src/plugins/data/public/{ui => }/shard_failure_modal/shard_failure_types.ts (100%) delete mode 100644 src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.test.tsx create mode 100755 src/plugins/unified_search/README.md create mode 100644 src/plugins/unified_search/config.ts create mode 100644 src/plugins/unified_search/jest.config.js create mode 100755 src/plugins/unified_search/kibana.json rename src/plugins/{data/public/ui/_index.scss => unified_search/public/index.scss} (56%) mode change 100644 => 100755 rename src/plugins/{data/public/ui => unified_search/public}/index.ts (50%) mode change 100644 => 100755 rename src/plugins/{data/public/ui => unified_search/public}/index_pattern_select/create_index_pattern_select.tsx (92%) rename src/plugins/{data/public/ui => unified_search/public}/index_pattern_select/index.tsx (100%) rename src/plugins/{data/public/ui => unified_search/public}/index_pattern_select/index_pattern_select.tsx (98%) create mode 100644 src/plugins/unified_search/public/mocks.ts create mode 100755 src/plugins/unified_search/public/plugin.ts rename src/plugins/{data/public/ui => unified_search/public}/query_string_input/_index.scss (100%) rename src/plugins/{data/public/ui => unified_search/public}/query_string_input/_query_bar.scss (100%) rename src/plugins/{data/public/ui => unified_search/public}/query_string_input/fetch_index_patterns.ts (94%) rename src/plugins/{data/public/query/lib => unified_search/public/query_string_input}/from_user.test.ts (96%) rename src/plugins/{data/public/query/lib => unified_search/public/query_string_input}/from_user.ts (100%) rename src/plugins/{data/public/ui => unified_search/public}/query_string_input/index.tsx (94%) rename src/plugins/{data/public/ui => unified_search/public}/query_string_input/language_switcher.test.tsx (97%) rename src/plugins/{data/public/ui => unified_search/public}/query_string_input/language_switcher.tsx (80%) rename src/plugins/{data/public/query/lib => unified_search/public/query_string_input}/match_pairs.ts (100%) rename src/plugins/{data/public/ui => unified_search/public}/query_string_input/no_data_popover.test.tsx (100%) rename src/plugins/{data/public/ui => unified_search/public}/query_string_input/no_data_popover.tsx (84%) rename src/plugins/{data/public/ui => unified_search/public}/query_string_input/query_bar_top_row.test.tsx (95%) rename src/plugins/{data/public/ui => unified_search/public}/query_string_input/query_bar_top_row.tsx (96%) rename src/plugins/{data/public/ui => unified_search/public}/query_string_input/query_string_input.test.mocks.ts (89%) rename src/plugins/{data/public/ui => unified_search/public}/query_string_input/query_string_input.test.tsx (97%) rename src/plugins/{data/public/ui => unified_search/public}/query_string_input/query_string_input.tsx (95%) rename src/plugins/{data/public/query/lib => unified_search/public/query_string_input}/to_user.test.ts (96%) rename src/plugins/{data/public/query/lib => unified_search/public/query_string_input}/to_user.ts (100%) rename src/plugins/{data/public/ui => unified_search/public}/saved_query_form/index.ts (100%) rename src/plugins/{data/public/ui => unified_search/public}/saved_query_form/save_query_form.tsx (84%) rename src/plugins/{data/public/ui => unified_search/public}/saved_query_management/_index.scss (100%) rename src/plugins/{data/public/ui => unified_search/public}/saved_query_management/_saved_query_list_item.scss (100%) rename src/plugins/{data/public/ui => unified_search/public}/saved_query_management/_saved_query_management_component.scss (100%) rename src/plugins/{data/public/ui => unified_search/public}/saved_query_management/index.ts (100%) rename src/plugins/{data/public/ui => unified_search/public}/saved_query_management/saved_query_list_item.tsx (77%) rename src/plugins/{data/public/ui => unified_search/public}/saved_query_management/saved_query_management_component.tsx (86%) rename src/plugins/{data/public/ui => unified_search/public}/search_bar/create_search_bar.tsx (94%) rename src/plugins/{data/public/ui => unified_search/public}/search_bar/index.tsx (89%) rename src/plugins/{data/public/ui => unified_search/public}/search_bar/lib/clear_saved_query.test.ts (87%) rename src/plugins/{data/public/ui => unified_search/public}/search_bar/lib/clear_saved_query.ts (90%) rename src/plugins/{data/public/ui => unified_search/public}/search_bar/lib/populate_state_from_saved_query.test.ts (91%) rename src/plugins/{data/public/ui => unified_search/public}/search_bar/lib/populate_state_from_saved_query.ts (94%) rename src/plugins/{data/public/ui => unified_search/public}/search_bar/lib/use_filter_manager.ts (94%) rename src/plugins/{data/public/ui => unified_search/public}/search_bar/lib/use_query_string_manager.ts (92%) rename src/plugins/{data/public/ui => unified_search/public}/search_bar/lib/use_saved_query.ts (92%) rename src/plugins/{data/public/ui => unified_search/public}/search_bar/lib/use_timefilter.ts (98%) rename src/plugins/{data/public/ui => unified_search/public}/search_bar/search_bar.test.tsx (94%) rename src/plugins/{data/public/ui => unified_search/public}/search_bar/search_bar.tsx (97%) create mode 100644 src/plugins/unified_search/public/services.ts create mode 100644 src/plugins/unified_search/public/test_helpers/get_stub_filter.ts rename src/plugins/{data/public/ui => unified_search/public}/typeahead/__snapshots__/suggestion_component.test.tsx.snap (100%) rename src/plugins/{data/public/ui => unified_search/public}/typeahead/_index.scss (100%) rename src/plugins/{data/public/ui => unified_search/public}/typeahead/_suggestion.scss (100%) rename src/plugins/{data/public/ui => unified_search/public}/typeahead/constants.ts (100%) rename src/plugins/{data/public/ui => unified_search/public}/typeahead/index.tsx (100%) rename src/plugins/{data/public/ui => unified_search/public}/typeahead/suggestion_component.test.tsx (97%) rename src/plugins/{data/public/ui => unified_search/public}/typeahead/suggestion_component.tsx (98%) rename src/plugins/{data/public/ui => unified_search/public}/typeahead/suggestions_component.test.tsx (98%) rename src/plugins/{data/public/ui => unified_search/public}/typeahead/suggestions_component.tsx (98%) rename src/plugins/{data/public/ui => unified_search/public}/typeahead/types.ts (90%) create mode 100755 src/plugins/unified_search/public/types.ts rename src/plugins/{data/public/ui => unified_search/public}/utils/index.ts (89%) rename src/plugins/{data/public/ui => unified_search/public}/utils/on_raf.ts (100%) create mode 100644 src/plugins/unified_search/public/utils/shallow_equal.ts create mode 100644 src/plugins/unified_search/tsconfig.json diff --git a/.i18nrc.json b/.i18nrc.json index 402932902f249..6a373faf89586 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -80,7 +80,8 @@ "visTypeVega": "src/plugins/vis_types/vega", "visTypeVislib": "src/plugins/vis_types/vislib", "visTypeXy": "src/plugins/vis_types/xy", - "visualizations": "src/plugins/visualizations" + "visualizations": "src/plugins/visualizations", + "unifiedSearch": "src/plugins/unified_search" }, "translations": [] } diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index bf81ab1e0bec4..d162f06d681d8 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -283,6 +283,10 @@ In general this plugin provides: - Exposing a context menu for the user to choose the appropriate action when there are multiple actions attached to a single trigger. +|{kib-repo}blob/{branch}/src/plugins/unified_search/README.md[unifiedSearch] +|A Kibana plugin + + |{kib-repo}blob/{branch}/src/plugins/url_forwarding/README.md[urlForwarding] |This plugins contains helpers to redirect legacy URLs. It can be used to forward old URLs to their new counterparts. diff --git a/examples/search_examples/kibana.json b/examples/search_examples/kibana.json index 87839f2037f92..70e934759be03 100644 --- a/examples/search_examples/kibana.json +++ b/examples/search_examples/kibana.json @@ -9,7 +9,7 @@ "description": "Example plugin of how to use data plugin search services", "server": true, "ui": true, - "requiredPlugins": ["navigation", "data", "developerExamples", "kibanaUtils", "share"], + "requiredPlugins": ["navigation", "data", "developerExamples", "kibanaUtils", "share", "unifiedSearch"], "optionalPlugins": [], "requiredBundles": ["kibanaReact"], "owner": { diff --git a/examples/search_examples/public/application.tsx b/examples/search_examples/public/application.tsx index c77c3c24be147..1812e284aa3dc 100644 --- a/examples/search_examples/public/application.tsx +++ b/examples/search_examples/public/application.tsx @@ -34,7 +34,7 @@ const LINKS: ExampleLink[] = [ export const renderApp = ( { notifications, savedObjects, http, application }: CoreStart, - { data, navigation }: AppPluginStartDependencies, + { data, navigation, unifiedSearch }: AppPluginStartDependencies, { element, history }: AppMountParameters ) => { ReactDOM.render( @@ -48,6 +48,7 @@ export const renderApp = ( navigation={navigation} data={data} http={http} + unifiedSearch={unifiedSearch} /> @@ -55,6 +56,7 @@ export const renderApp = ( navigation={navigation} notifications={notifications} data={data} + unifiedSearch={unifiedSearch} /> diff --git a/examples/search_examples/public/search/app.tsx b/examples/search_examples/public/search/app.tsx index 9220827863852..9bd7bf8f7d437 100644 --- a/examples/search_examples/public/search/app.tsx +++ b/examples/search_examples/public/search/app.tsx @@ -44,6 +44,7 @@ import { isCompleteResponse, isErrorResponse, } from '../../../../src/plugins/data/public'; +import { UnifiedSearchPublicPluginStart } from '../../../../src/plugins/unified_search/public'; import type { DataViewField, DataView } from '../../../../src/plugins/data_views/public'; import { IMyStrategyResponse } from '../../common/types'; import { AbortError } from '../../../../src/plugins/kibana_utils/common'; @@ -53,6 +54,7 @@ interface SearchExamplesAppDeps { http: CoreStart['http']; navigation: NavigationPublicPluginStart; data: DataPublicPluginStart; + unifiedSearch: UnifiedSearchPublicPluginStart; } function getNumeric(fields?: DataViewField[]) { @@ -85,8 +87,9 @@ export const SearchExamplesApp = ({ notifications, navigation, data, + unifiedSearch, }: SearchExamplesAppDeps) => { - const { IndexPatternSelect } = data.ui; + const { IndexPatternSelect } = unifiedSearch.ui; const [getCool, setGetCool] = useState(false); const [fibonacciN, setFibonacciN] = useState(10); const [timeTook, setTimeTook] = useState(); diff --git a/examples/search_examples/public/search_sessions/app.tsx b/examples/search_examples/public/search_sessions/app.tsx index fbca346af8a3c..fa9ec526e02f7 100644 --- a/examples/search_examples/public/search_sessions/app.tsx +++ b/examples/search_examples/public/search_sessions/app.tsx @@ -49,6 +49,7 @@ import { SearchSessionState, TimeRange, } from '../../../../src/plugins/data/public'; +import { UnifiedSearchPublicPluginStart } from '../../../../src/plugins/unified_search/public'; import type { DataView, DataViewField } from '../../../../src/plugins/data_views/public'; import { createStateContainer, @@ -60,6 +61,7 @@ interface SearchSessionsExampleAppDeps { notifications: CoreStart['notifications']; navigation: NavigationPublicPluginStart; data: DataPublicPluginStart; + unifiedSearch: UnifiedSearchPublicPluginStart; } /** @@ -89,8 +91,9 @@ export const SearchSessionsExampleApp = ({ notifications, navigation, data, + unifiedSearch, }: SearchSessionsExampleAppDeps) => { - const { IndexPatternSelect } = data.ui; + const { IndexPatternSelect } = unifiedSearch.ui; const [isSearching, setIsSearching] = useState(false); const [request, setRequest] = useState(null); diff --git a/examples/search_examples/public/types.ts b/examples/search_examples/public/types.ts index fd3b869af3fe3..02f0ad28cfd72 100644 --- a/examples/search_examples/public/types.ts +++ b/examples/search_examples/public/types.ts @@ -8,6 +8,7 @@ import { NavigationPublicPluginStart } from '../../../src/plugins/navigation/public'; import { DataPublicPluginStart } from '../../../src/plugins/data/public'; +import { UnifiedSearchPublicPluginStart } from '../../../src/plugins/unified_search/public'; import { DeveloperExamplesSetup } from '../../developer_examples/public'; import { SharePluginSetup } from '../../../src/plugins/share/public'; @@ -24,4 +25,5 @@ export interface AppPluginSetupDependencies { export interface AppPluginStartDependencies { navigation: NavigationPublicPluginStart; data: DataPublicPluginStart; + unifiedSearch: UnifiedSearchPublicPluginStart; } diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 396ffd4599284..e8f4c5c4b8f31 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -124,3 +124,4 @@ pageLoadAssetSize: sessionView: 77750 cloudSecurityPosture: 19109 visTypeGauge: 24113 + unifiedSearch: 49195 diff --git a/src/plugins/data/public/actions/apply_filter_action.ts b/src/plugins/data/public/actions/apply_filter_action.ts index 97e332dfa01f0..f7c7d652ac13a 100644 --- a/src/plugins/data/public/actions/apply_filter_action.ts +++ b/src/plugins/data/public/actions/apply_filter_action.ts @@ -11,7 +11,7 @@ import { ThemeServiceSetup } from 'kibana/public'; import { toMountPoint } from '../../../kibana_react/public'; import { Action, createAction, IncompatibleActionError } from '../../../ui_actions/public'; import { getOverlays, getIndexPatterns } from '../services'; -import { applyFiltersPopover } from '../ui/apply_filters'; +import { applyFiltersPopover } from '../apply_filters'; import { Filter, FilterManager, TimefilterContract, esFilters } from '..'; export const ACTION_GLOBAL_APPLY_FILTER = 'ACTION_GLOBAL_APPLY_FILTER'; diff --git a/src/plugins/data/public/ui/apply_filters/apply_filter_popover_content.tsx b/src/plugins/data/public/apply_filters/apply_filter_popover_content.tsx similarity index 95% rename from src/plugins/data/public/ui/apply_filters/apply_filter_popover_content.tsx rename to src/plugins/data/public/apply_filters/apply_filter_popover_content.tsx index 64bf7975e3935..be10728bb4aea 100644 --- a/src/plugins/data/public/ui/apply_filters/apply_filter_popover_content.tsx +++ b/src/plugins/data/public/apply_filters/apply_filter_popover_content.tsx @@ -19,10 +19,9 @@ import { } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import React, { Component } from 'react'; -import { IIndexPattern } from '../..'; -import { Filter } from '../../../common'; +import { getDisplayValueFromFilter, mapAndFlattenFilters } from '../query'; import { FilterLabel } from '../filter_bar'; -import { mapAndFlattenFilters, getDisplayValueFromFilter } from '../../query'; +import { Filter, IIndexPattern } from '../../common'; interface Props { filters: Filter[]; diff --git a/src/plugins/data/public/ui/apply_filters/apply_filters_popover.tsx b/src/plugins/data/public/apply_filters/apply_filters_popover.tsx similarity index 94% rename from src/plugins/data/public/ui/apply_filters/apply_filters_popover.tsx rename to src/plugins/data/public/apply_filters/apply_filters_popover.tsx index 4912e96df9d61..d1ad938e95214 100644 --- a/src/plugins/data/public/ui/apply_filters/apply_filters_popover.tsx +++ b/src/plugins/data/public/apply_filters/apply_filters_popover.tsx @@ -7,7 +7,7 @@ */ import React from 'react'; -import { IIndexPattern, Filter } from '../..'; +import { IIndexPattern, Filter } from '../../common'; type CancelFnType = () => void; type SubmitFnType = (filters: Filter[]) => void; diff --git a/src/plugins/data/public/ui/apply_filters/index.ts b/src/plugins/data/public/apply_filters/index.ts similarity index 100% rename from src/plugins/data/public/ui/apply_filters/index.ts rename to src/plugins/data/public/apply_filters/index.ts diff --git a/src/plugins/data/public/deprecated.ts b/src/plugins/data/public/deprecated.ts index 6a6c7bbb2cd2c..33c34e06161c5 100644 --- a/src/plugins/data/public/deprecated.ts +++ b/src/plugins/data/public/deprecated.ts @@ -51,8 +51,6 @@ import { getEsQueryConfig, } from '../common'; -import { FilterLabel, FilterItem } from './ui'; - import { getDisplayValueFromFilter, generateFilters, @@ -63,6 +61,8 @@ import { convertRangeFilterToTimeRangeString as oldConvertRangeFilterToTimeRangeString, } from './query'; +import { FilterLabel, FilterItem, FilterBar } from './filter_bar'; + /** * @deprecated This import will be removed. * @removeBy 8.1 @@ -92,6 +92,7 @@ const convertRangeFilterToTimeRangeString = oldConvertRangeFilterToTimeRangeStri export const esFilters = { FilterLabel, FilterItem, + FilterBar, FILTERS, FilterStateStore, diff --git a/src/plugins/data/public/ui/filter_bar/_global_filter_group.scss b/src/plugins/data/public/filter_bar/_global_filter_group.scss similarity index 100% rename from src/plugins/data/public/ui/filter_bar/_global_filter_group.scss rename to src/plugins/data/public/filter_bar/_global_filter_group.scss diff --git a/src/plugins/data/public/ui/filter_bar/_global_filter_item.scss b/src/plugins/data/public/filter_bar/_global_filter_item.scss similarity index 100% rename from src/plugins/data/public/ui/filter_bar/_global_filter_item.scss rename to src/plugins/data/public/filter_bar/_global_filter_item.scss diff --git a/src/plugins/data/public/ui/filter_bar/_index.scss b/src/plugins/data/public/filter_bar/_index.scss similarity index 100% rename from src/plugins/data/public/ui/filter_bar/_index.scss rename to src/plugins/data/public/filter_bar/_index.scss diff --git a/src/plugins/data/public/ui/filter_bar/_variables.scss b/src/plugins/data/public/filter_bar/_variables.scss similarity index 100% rename from src/plugins/data/public/ui/filter_bar/_variables.scss rename to src/plugins/data/public/filter_bar/_variables.scss diff --git a/src/plugins/data/public/ui/filter_bar/filter_bar.tsx b/src/plugins/data/public/filter_bar/filter_bar.tsx similarity index 95% rename from src/plugins/data/public/ui/filter_bar/filter_bar.tsx rename to src/plugins/data/public/filter_bar/filter_bar.tsx index 9bc64eb1f6919..50d25452ca318 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_bar.tsx +++ b/src/plugins/data/public/filter_bar/filter_bar.tsx @@ -25,12 +25,11 @@ import { METRIC_TYPE } from '@kbn/analytics'; import { FilterEditor } from './filter_editor'; import { FILTER_EDITOR_WIDTH, FilterItem } from './filter_item'; import { FilterOptions } from './filter_options'; -import { useKibana } from '../../../../kibana_react/public'; -import { IDataPluginServices, IIndexPattern } from '../..'; +import { useKibana } from '../../../kibana_react/public'; +import { IIndexPattern, UI_SETTINGS } from '../../common'; +import { IDataPluginServices } from '../types'; -import { UI_SETTINGS } from '../../../common'; - -interface Props { +export interface Props { filters: Filter[]; onFiltersUpdated?: (filters: Filter[]) => void; className: string; @@ -228,4 +227,7 @@ const FilterBarUI = React.memo(function FilterBarUI(props: Props) { ); }); -export const FilterBar = injectI18n(FilterBarUI); +const FilterBar = injectI18n(FilterBarUI); +// Needed for React.lazy +// eslint-disable-next-line import/no-default-export +export default FilterBar; diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/filter_editor.test.tsx b/src/plugins/data/public/filter_bar/filter_editor/filter_editor.test.tsx similarity index 93% rename from src/plugins/data/public/ui/filter_bar/filter_editor/filter_editor.test.tsx rename to src/plugins/data/public/filter_bar/filter_editor/filter_editor.test.tsx index 8f48bef8e0e54..9bc8aa382bb03 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/filter_editor.test.tsx +++ b/src/plugins/data/public/filter_bar/filter_editor/filter_editor.test.tsx @@ -10,8 +10,8 @@ import { registerTestBed, TestBed } from '@kbn/test-jest-helpers'; import { FilterEditor, Props } from '.'; import React from 'react'; -jest.mock('../../../../../kibana_react/public', () => { - const original = jest.requireActual('../../../../../kibana_react/public'); +jest.mock('../../../../kibana_react/public', () => { + const original = jest.requireActual('../../../../kibana_react/public'); return { ...original, diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/generic_combo_box.tsx b/src/plugins/data/public/filter_bar/filter_editor/generic_combo_box.tsx similarity index 100% rename from src/plugins/data/public/ui/filter_bar/filter_editor/generic_combo_box.tsx rename to src/plugins/data/public/filter_bar/filter_editor/generic_combo_box.tsx diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/index.tsx b/src/plugins/data/public/filter_bar/filter_editor/index.tsx similarity index 98% rename from src/plugins/data/public/ui/filter_bar/filter_editor/index.tsx rename to src/plugins/data/public/filter_bar/filter_editor/index.tsx index 35ac8f386946e..e5693a1ef3cbc 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/index.tsx +++ b/src/plugins/data/public/filter_bar/filter_editor/index.tsx @@ -44,9 +44,9 @@ import { Operator } from './lib/filter_operators'; import { PhraseValueInput } from './phrase_value_input'; import { PhrasesValuesInput } from './phrases_values_input'; import { RangeValueInput } from './range_value_input'; -import { getIndexPatternFromFilter } from '../../../query'; -import { IIndexPattern, IFieldType } from '../../..'; -import { CodeEditor } from '../../../../../kibana_react/public'; +import { IIndexPattern, IFieldType } from '../../../common'; +import { getIndexPatternFromFilter } from '../../query'; +import { CodeEditor } from '../../../../kibana_react/public'; export interface Props { filter: Filter; diff --git a/src/plugins/data/public/filter_bar/filter_editor/lib/__snapshots__/filter_label.test.tsx.snap b/src/plugins/data/public/filter_bar/filter_editor/lib/__snapshots__/filter_label.test.tsx.snap new file mode 100644 index 0000000000000..208af5049d137 --- /dev/null +++ b/src/plugins/data/public/filter_bar/filter_editor/lib/__snapshots__/filter_label.test.tsx.snap @@ -0,0 +1,68 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`alias 1`] = ` +
+ + geo.coordinates in US +
+`; + +exports[`alias with error status 1`] = ` +
+ + NOT + + geo.coordinates in US + : + + Error + +
+`; + +exports[`alias with warning status 1`] = ` +
+ + NOT + + geo.coordinates in US + : + + Warning + +
+`; + +exports[`error 1`] = ` +
+ + machine.os + : + + Error + +
+`; + +exports[`warning 1`] = ` +
+ + machine.os + : + + Warning + +
+`; diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_editor_utils.test.ts b/src/plugins/data/public/filter_bar/filter_editor/lib/filter_editor_utils.test.ts similarity index 98% rename from src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_editor_utils.test.ts rename to src/plugins/data/public/filter_bar/filter_editor/lib/filter_editor_utils.test.ts index 32e82df91086b..73e4df8445298 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_editor_utils.test.ts +++ b/src/plugins/data/public/filter_bar/filter_editor/lib/filter_editor_utils.test.ts @@ -13,8 +13,8 @@ import { rangeFilter, stubIndexPattern, stubFields, -} from '../../../../stubs'; -import { toggleFilterNegated } from '../../../../../common'; +} from '../../../stubs'; +import { toggleFilterNegated } from '../../../../common'; import { getFieldFromFilter, getFilterableFields, diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_editor_utils.ts b/src/plugins/data/public/filter_bar/filter_editor/lib/filter_editor_utils.ts similarity index 99% rename from src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_editor_utils.ts rename to src/plugins/data/public/filter_bar/filter_editor/lib/filter_editor_utils.ts index 7d433bb1f273b..a42e6cd173d22 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_editor_utils.ts +++ b/src/plugins/data/public/filter_bar/filter_editor/lib/filter_editor_utils.ts @@ -11,7 +11,7 @@ import { Filter, FieldFilter } from '@kbn/es-query'; import { ES_FIELD_TYPES } from '@kbn/field-types'; import isSemverValid from 'semver/functions/valid'; import { FILTER_OPERATORS, Operator } from './filter_operators'; -import { isFilterable, IIndexPattern, IFieldType, IpAddress } from '../../../../../common'; +import { isFilterable, IIndexPattern, IFieldType, IpAddress } from '../../../../common'; export function getFieldFromFilter(filter: FieldFilter, indexPattern: IIndexPattern) { return indexPattern.fields.find((field) => field.name === filter.meta.key); diff --git a/src/plugins/data/public/filter_bar/filter_editor/lib/filter_label.test.tsx b/src/plugins/data/public/filter_bar/filter_editor/lib/filter_label.test.tsx new file mode 100644 index 0000000000000..f4c13556d6dfb --- /dev/null +++ b/src/plugins/data/public/filter_bar/filter_editor/lib/filter_label.test.tsx @@ -0,0 +1,64 @@ +/* + * 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 React from 'react'; +import FilterLabel from './filter_label'; +import { render } from '@testing-library/react'; +import { phraseFilter } from '../../../stubs'; + +test('alias', () => { + const filter = { + ...phraseFilter, + meta: { + ...phraseFilter.meta, + alias: 'geo.coordinates in US', + }, + }; + const { container } = render(); + expect(container).toMatchSnapshot(); +}); + +test('alias with warning status', () => { + const filter = { + ...phraseFilter, + meta: { + ...phraseFilter.meta, + alias: 'geo.coordinates in US', + negate: true, + }, + }; + const { container } = render( + + ); + expect(container).toMatchSnapshot(); +}); + +test('alias with error status', () => { + const filter = { + ...phraseFilter, + meta: { + ...phraseFilter.meta, + alias: 'geo.coordinates in US', + negate: true, + }, + }; + const { container } = render( + + ); + expect(container).toMatchSnapshot(); +}); + +test('warning', () => { + const { container } = render(); + expect(container).toMatchSnapshot(); +}); + +test('error', () => { + const { container } = render(); + expect(container).toMatchSnapshot(); +}); diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.tsx b/src/plugins/data/public/filter_bar/filter_editor/lib/filter_label.tsx similarity index 97% rename from src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.tsx rename to src/plugins/data/public/filter_bar/filter_editor/lib/filter_label.tsx index 1a272a5d79f37..e4d3a0dc31057 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.tsx +++ b/src/plugins/data/public/filter_bar/filter_editor/lib/filter_label.tsx @@ -10,7 +10,7 @@ import React, { Fragment } from 'react'; import { EuiTextColor } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { existsOperator, isOneOfOperator } from './filter_operators'; -import { Filter, FILTERS } from '../../../../../common'; +import { Filter, FILTERS } from '../../../../common'; import type { FilterLabelStatus } from '../../filter_item'; export interface FilterLabelProps { diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_operators.ts b/src/plugins/data/public/filter_bar/filter_editor/lib/filter_operators.ts similarity index 98% rename from src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_operators.ts rename to src/plugins/data/public/filter_bar/filter_editor/lib/filter_operators.ts index 0be9c200c8d82..d69673d416bc6 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_operators.ts +++ b/src/plugins/data/public/filter_bar/filter_editor/lib/filter_operators.ts @@ -9,7 +9,7 @@ import { i18n } from '@kbn/i18n'; import { FILTERS } from '@kbn/es-query'; import { ES_FIELD_TYPES } from '@kbn/field-types'; -import { IFieldType } from '../../../../../../data_views/common'; +import { IFieldType } from '../../../../../data_views/common'; export interface Operator { message: string; diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/phrase_suggestor.tsx b/src/plugins/data/public/filter_bar/filter_editor/phrase_suggestor.tsx similarity index 94% rename from src/plugins/data/public/ui/filter_bar/filter_editor/phrase_suggestor.tsx rename to src/plugins/data/public/filter_bar/filter_editor/phrase_suggestor.tsx index ba39ee78dafa4..6479ea5e57f8f 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/phrase_suggestor.tsx +++ b/src/plugins/data/public/filter_bar/filter_editor/phrase_suggestor.tsx @@ -9,9 +9,9 @@ import React from 'react'; import { debounce } from 'lodash'; -import { withKibana, KibanaReactContextValue } from '../../../../../kibana_react/public'; -import { IDataPluginServices, IIndexPattern, IFieldType } from '../../..'; -import { UI_SETTINGS } from '../../../../common'; +import { withKibana, KibanaReactContextValue } from '../../../../kibana_react/public'; +import { IIndexPattern, IFieldType, UI_SETTINGS } from '../../../common'; +import { IDataPluginServices } from '../../types'; export interface PhraseSuggestorProps { kibana: KibanaReactContextValue; diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/phrase_value_input.tsx b/src/plugins/data/public/filter_bar/filter_editor/phrase_value_input.tsx similarity index 97% rename from src/plugins/data/public/ui/filter_bar/filter_editor/phrase_value_input.tsx rename to src/plugins/data/public/filter_bar/filter_editor/phrase_value_input.tsx index 32a713361dbd1..a8a97dff05b34 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/phrase_value_input.tsx +++ b/src/plugins/data/public/filter_bar/filter_editor/phrase_value_input.tsx @@ -13,7 +13,7 @@ import React from 'react'; import { GenericComboBox, GenericComboBoxProps } from './generic_combo_box'; import { PhraseSuggestorUI, PhraseSuggestorProps } from './phrase_suggestor'; import { ValueInputType } from './value_input_type'; -import { withKibana } from '../../../../../kibana_react/public'; +import { withKibana } from '../../../../kibana_react/public'; interface Props extends PhraseSuggestorProps { value?: string; diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/phrases_values_input.tsx b/src/plugins/data/public/filter_bar/filter_editor/phrases_values_input.tsx similarity index 97% rename from src/plugins/data/public/ui/filter_bar/filter_editor/phrases_values_input.tsx rename to src/plugins/data/public/filter_bar/filter_editor/phrases_values_input.tsx index 5bf8a655dc360..de7f7be2cc438 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/phrases_values_input.tsx +++ b/src/plugins/data/public/filter_bar/filter_editor/phrases_values_input.tsx @@ -12,7 +12,7 @@ import { uniq } from 'lodash'; import React from 'react'; import { GenericComboBox, GenericComboBoxProps } from './generic_combo_box'; import { PhraseSuggestorUI, PhraseSuggestorProps } from './phrase_suggestor'; -import { withKibana } from '../../../../../kibana_react/public'; +import { withKibana } from '../../../../kibana_react/public'; interface Props extends PhraseSuggestorProps { values?: string[]; diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/range_value_input.tsx b/src/plugins/data/public/filter_bar/filter_editor/range_value_input.tsx similarity index 96% rename from src/plugins/data/public/ui/filter_bar/filter_editor/range_value_input.tsx rename to src/plugins/data/public/filter_bar/filter_editor/range_value_input.tsx index 6561761dc623b..0b94c6e3a736d 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/range_value_input.tsx +++ b/src/plugins/data/public/filter_bar/filter_editor/range_value_input.tsx @@ -11,8 +11,8 @@ import { EuiFormControlLayoutDelimited } from '@elastic/eui'; import { InjectedIntl, injectI18n } from '@kbn/i18n-react'; import { get } from 'lodash'; import React from 'react'; -import { useKibana } from '../../../../../kibana_react/public'; -import { IFieldType } from '../../..'; +import { useKibana } from '../../../../kibana_react/public'; +import { IFieldType } from '../../../common'; import { ValueInputType } from './value_input_type'; interface RangeParams { diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/value_input_type.tsx b/src/plugins/data/public/filter_bar/filter_editor/value_input_type.tsx similarity index 98% rename from src/plugins/data/public/ui/filter_bar/filter_editor/value_input_type.tsx rename to src/plugins/data/public/filter_bar/filter_editor/value_input_type.tsx index 9b00c71472f37..caf328d4ed326 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/value_input_type.tsx +++ b/src/plugins/data/public/filter_bar/filter_editor/value_input_type.tsx @@ -11,7 +11,7 @@ import { InjectedIntl, injectI18n } from '@kbn/i18n-react'; import { isEmpty } from 'lodash'; import React, { Component } from 'react'; import { validateParams } from './lib/filter_editor_utils'; -import { IFieldType } from '../../../../../data_views/common'; +import { IFieldType } from '../../../../data_views/common'; interface Props { value?: string | number; diff --git a/src/plugins/data/public/ui/filter_bar/filter_item.tsx b/src/plugins/data/public/filter_bar/filter_item.tsx similarity index 97% rename from src/plugins/data/public/ui/filter_bar/filter_item.tsx rename to src/plugins/data/public/filter_bar/filter_item.tsx index 9e535513aa014..d77a42ebc68a3 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_item.tsx +++ b/src/plugins/data/public/filter_bar/filter_item.tsx @@ -17,12 +17,12 @@ import { } from '@kbn/es-query'; import classNames from 'classnames'; import React, { MouseEvent, useState, useEffect } from 'react'; -import { IUiSettingsClient } from 'src/core/public'; +import { IUiSettingsClient } from '../../../../core/public'; import { FilterEditor } from './filter_editor'; import { FilterView } from './filter_view'; -import { IIndexPattern } from '../..'; -import { getDisplayValueFromFilter, getIndexPatternFromFilter } from '../../query'; -import { getIndexPatterns } from '../../services'; +import { IIndexPattern } from '../../common'; +import { getIndexPatternFromFilter, getDisplayValueFromFilter } from '../query'; +import { getIndexPatterns } from '../services'; type PanelOptions = 'pinFilter' | 'editFilter' | 'negateFilter' | 'disableFilter' | 'deleteFilter'; diff --git a/src/plugins/data/public/ui/filter_bar/filter_options.tsx b/src/plugins/data/public/filter_bar/filter_options.tsx similarity index 100% rename from src/plugins/data/public/ui/filter_bar/filter_options.tsx rename to src/plugins/data/public/filter_bar/filter_options.tsx diff --git a/src/plugins/data/public/ui/filter_bar/filter_view/index.tsx b/src/plugins/data/public/filter_bar/filter_view/index.tsx similarity index 100% rename from src/plugins/data/public/ui/filter_bar/filter_view/index.tsx rename to src/plugins/data/public/filter_bar/filter_view/index.tsx diff --git a/src/plugins/data/public/ui/filter_bar/index.tsx b/src/plugins/data/public/filter_bar/index.tsx similarity index 79% rename from src/plugins/data/public/ui/filter_bar/index.tsx rename to src/plugins/data/public/filter_bar/index.tsx index b3c02b2863c83..70a108f359790 100644 --- a/src/plugins/data/public/ui/filter_bar/index.tsx +++ b/src/plugins/data/public/filter_bar/index.tsx @@ -10,6 +10,13 @@ import React from 'react'; const Fallback = () =>
; +const LazyFilterBar = React.lazy(() => import('./filter_bar')); +export const FilterBar = (props: React.ComponentProps) => ( + }> + + +); + const LazyFilterLabel = React.lazy(() => import('./filter_editor/lib/filter_label')); export const FilterLabel = (props: React.ComponentProps) => ( }> diff --git a/src/plugins/data/public/index.scss b/src/plugins/data/public/index.scss index 467efa98934ec..b11bcccf85540 100644 --- a/src/plugins/data/public/index.scss +++ b/src/plugins/data/public/index.scss @@ -1,2 +1,3 @@ -@import './ui/index'; +@import './filter_bar/index'; + @import './utils/table_inspector_view/index'; diff --git a/src/plugins/data/public/index.ts b/src/plugins/data/public/index.ts index 02480aded9655..fb6ea8e4f9dcb 100644 --- a/src/plugins/data/public/index.ts +++ b/src/plugins/data/public/index.ts @@ -19,8 +19,8 @@ export * from './deprecated'; */ export { getEsQueryConfig, FilterStateStore } from '../common'; -export { FilterLabel, FilterItem } from './ui'; export { getDisplayValueFromFilter, generateFilters, extractTimeRange } from './query'; +export { FilterLabel, FilterItem } from './filter_bar'; /** * Exporters (CSV) @@ -254,15 +254,6 @@ export const search = { * UI components */ -export type { - SearchBarProps, - StatefulSearchBarProps, - IndexPatternSelectProps, - QueryStringInputProps, -} from './ui'; - -export { QueryStringInput, SearchBar } from './ui'; - /** * Types to be shared externally * @public @@ -276,6 +267,7 @@ export { getDefaultQuery, FilterManager, TimeHistory, + getQueryLog, } from './query'; export type { @@ -288,6 +280,8 @@ export type { QueryStateChange, QueryStart, AutoRefreshDoneFn, + PersistedLog, + QueryStringContract, } from './query'; export type { AggsStart } from './search/aggs'; @@ -316,7 +310,6 @@ export type { DataPublicPluginSetup, DataPublicPluginStart, IDataPluginServices, - DataPublicPluginStartUi, DataPublicPluginStartActions, } from './types'; diff --git a/src/plugins/data/public/mocks.ts b/src/plugins/data/public/mocks.ts index 630a29a8a7854..3c0c58c979db7 100644 --- a/src/plugins/data/public/mocks.ts +++ b/src/plugins/data/public/mocks.ts @@ -63,10 +63,6 @@ const createStartContract = (): Start => { search: searchServiceMock.createStartContract(), fieldFormats: fieldFormatsServiceMock.createStartContract(), query: queryStartMock, - ui: { - IndexPatternSelect: jest.fn(), - SearchBar: jest.fn().mockReturnValue(null), - }, dataViews, /** * @deprecated Use dataViews service instead. All index pattern interfaces were renamed. diff --git a/src/plugins/data/public/plugin.ts b/src/plugins/data/public/plugin.ts index 50795b4416247..090902f7a2d71 100644 --- a/src/plugins/data/public/plugin.ts +++ b/src/plugins/data/public/plugin.ts @@ -20,7 +20,6 @@ import type { import { AutocompleteService } from './autocomplete'; import { SearchService } from './search/search_service'; import { QueryService } from './query'; -import { createIndexPatternSelect } from './ui/index_pattern_select'; import { setIndexPatterns, setNotifications, @@ -29,7 +28,6 @@ import { setUiSettings, setTheme, } from './services'; -import { createSearchBar } from './ui/search_bar/create_search_bar'; import { ACTION_GLOBAL_APPLY_FILTER, createFilterAction, @@ -39,7 +37,6 @@ import { createSelectRangeAction, } from './actions'; import { APPLY_FILTER_TRIGGER, applyFilterTrigger } from './triggers'; -import { UsageCollectionSetup } from '../../usage_collection/public'; import { getTableViewDescription } from './utils/table_inspector_view'; import { NowProvider, NowProviderInternalContract } from './now_provider'; import { getAggsFormats, DatatableUtilitiesService } from '../common'; @@ -57,7 +54,6 @@ export class DataPublicPlugin private readonly searchService: SearchService; private readonly queryService: QueryService; private readonly storage: IStorageWrapper; - private usageCollection: UsageCollectionSetup | undefined; private readonly nowProvider: NowProviderInternalContract; constructor(initializerContext: PluginInitializerContext) { @@ -82,7 +78,6 @@ export class DataPublicPlugin ): DataPublicPluginSetup { const startServices = createStartServicesGetter(core.getStartServices); - this.usageCollection = usageCollection; setTheme(core.theme); const searchService = this.searchService.setup(core, { @@ -182,20 +177,7 @@ export class DataPublicPlugin nowProvider: this.nowProvider, }; - const SearchBar = createSearchBar({ - core, - data: dataServices, - storage: this.storage, - usageCollection: this.usageCollection, - }); - - return { - ...dataServices, - ui: { - IndexPatternSelect: createIndexPatternSelect(dataViews), - SearchBar, - }, - }; + return dataServices; } public stop() { diff --git a/src/plugins/data/public/query/index.tsx b/src/plugins/data/public/query/index.tsx index c4622f5701b3e..f426573e1bd6c 100644 --- a/src/plugins/data/public/query/index.tsx +++ b/src/plugins/data/public/query/index.tsx @@ -14,3 +14,4 @@ export * from './timefilter'; export * from './saved_query'; export * from './persisted_log'; export * from './state_sync'; +export type { QueryStringContract } from './query_string'; diff --git a/src/plugins/data/public/query/lib/index.ts b/src/plugins/data/public/query/lib/index.ts index 5966a7a8ad0ee..79e8c38cb6e96 100644 --- a/src/plugins/data/public/query/lib/index.ts +++ b/src/plugins/data/public/query/lib/index.ts @@ -7,9 +7,5 @@ */ export * from './add_to_query_log'; -export * from './from_user'; export * from './get_default_query'; export * from './get_query_log'; -export * from './match_pairs'; -export * from './to_user'; -export * from './to_user'; diff --git a/src/plugins/data/public/search/fetch/handle_response.tsx b/src/plugins/data/public/search/fetch/handle_response.tsx index 618efcb702ec4..6199e52f45955 100644 --- a/src/plugins/data/public/search/fetch/handle_response.tsx +++ b/src/plugins/data/public/search/fetch/handle_response.tsx @@ -10,7 +10,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { EuiSpacer } from '@elastic/eui'; import { IKibanaSearchResponse } from 'src/plugins/data/common'; -import { ShardFailureOpenModalButton } from '../../ui/shard_failure_modal'; +import { ShardFailureOpenModalButton } from '../../shard_failure_modal'; import { ThemeServiceStart } from '../../../../../core/public'; import { toMountPoint } from '../../../../kibana_react/public'; import { getNotifications } from '../../services'; diff --git a/src/plugins/data/public/search/index.ts b/src/plugins/data/public/search/index.ts index 6923ec7e8705b..1e69d60af84f5 100644 --- a/src/plugins/data/public/search/index.ts +++ b/src/plugins/data/public/search/index.ts @@ -59,3 +59,5 @@ export { handleResponse } from './fetch'; export type { SearchInterceptorDeps } from './search_interceptor'; export { SearchInterceptor } from './search_interceptor'; export * from './errors'; + +export { SearchService } from './search_service'; diff --git a/src/plugins/data/public/ui/shard_failure_modal/__mocks__/shard_failure_request.ts b/src/plugins/data/public/shard_failure_modal/__mocks__/shard_failure_request.ts similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/__mocks__/shard_failure_request.ts rename to src/plugins/data/public/shard_failure_modal/__mocks__/shard_failure_request.ts diff --git a/src/plugins/data/public/ui/shard_failure_modal/__mocks__/shard_failure_response.ts b/src/plugins/data/public/shard_failure_modal/__mocks__/shard_failure_response.ts similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/__mocks__/shard_failure_response.ts rename to src/plugins/data/public/shard_failure_modal/__mocks__/shard_failure_response.ts diff --git a/src/plugins/data/public/ui/shard_failure_modal/__snapshots__/shard_failure_description.test.tsx.snap b/src/plugins/data/public/shard_failure_modal/__snapshots__/shard_failure_description.test.tsx.snap similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/__snapshots__/shard_failure_description.test.tsx.snap rename to src/plugins/data/public/shard_failure_modal/__snapshots__/shard_failure_description.test.tsx.snap diff --git a/src/plugins/data/public/ui/shard_failure_modal/__snapshots__/shard_failure_modal.test.tsx.snap b/src/plugins/data/public/shard_failure_modal/__snapshots__/shard_failure_modal.test.tsx.snap similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/__snapshots__/shard_failure_modal.test.tsx.snap rename to src/plugins/data/public/shard_failure_modal/__snapshots__/shard_failure_modal.test.tsx.snap diff --git a/src/plugins/data/public/ui/shard_failure_modal/__snapshots__/shard_failure_table.test.tsx.snap b/src/plugins/data/public/shard_failure_modal/__snapshots__/shard_failure_table.test.tsx.snap similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/__snapshots__/shard_failure_table.test.tsx.snap rename to src/plugins/data/public/shard_failure_modal/__snapshots__/shard_failure_table.test.tsx.snap diff --git a/src/plugins/data/public/ui/shard_failure_modal/_shard_failure_modal.scss b/src/plugins/data/public/shard_failure_modal/_shard_failure_modal.scss similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/_shard_failure_modal.scss rename to src/plugins/data/public/shard_failure_modal/_shard_failure_modal.scss diff --git a/src/plugins/data/public/ui/shard_failure_modal/index.tsx b/src/plugins/data/public/shard_failure_modal/index.tsx similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/index.tsx rename to src/plugins/data/public/shard_failure_modal/index.tsx diff --git a/src/plugins/data/public/ui/shard_failure_modal/shard_failure_description.test.tsx b/src/plugins/data/public/shard_failure_modal/shard_failure_description.test.tsx similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/shard_failure_description.test.tsx rename to src/plugins/data/public/shard_failure_modal/shard_failure_description.test.tsx diff --git a/src/plugins/data/public/ui/shard_failure_modal/shard_failure_description.tsx b/src/plugins/data/public/shard_failure_modal/shard_failure_description.tsx similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/shard_failure_description.tsx rename to src/plugins/data/public/shard_failure_modal/shard_failure_description.tsx diff --git a/src/plugins/data/public/ui/shard_failure_modal/shard_failure_description_header.tsx b/src/plugins/data/public/shard_failure_modal/shard_failure_description_header.tsx similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/shard_failure_description_header.tsx rename to src/plugins/data/public/shard_failure_modal/shard_failure_description_header.tsx diff --git a/src/plugins/data/public/ui/shard_failure_modal/shard_failure_modal.test.tsx b/src/plugins/data/public/shard_failure_modal/shard_failure_modal.test.tsx similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/shard_failure_modal.test.tsx rename to src/plugins/data/public/shard_failure_modal/shard_failure_modal.test.tsx diff --git a/src/plugins/data/public/ui/shard_failure_modal/shard_failure_modal.tsx b/src/plugins/data/public/shard_failure_modal/shard_failure_modal.tsx similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/shard_failure_modal.tsx rename to src/plugins/data/public/shard_failure_modal/shard_failure_modal.tsx diff --git a/src/plugins/data/public/ui/shard_failure_modal/shard_failure_open_modal_button.test.mocks.tsx b/src/plugins/data/public/shard_failure_modal/shard_failure_open_modal_button.test.mocks.tsx similarity index 91% rename from src/plugins/data/public/ui/shard_failure_modal/shard_failure_open_modal_button.test.mocks.tsx rename to src/plugins/data/public/shard_failure_modal/shard_failure_open_modal_button.test.mocks.tsx index 44996497cc0c6..757d318e1d1b7 100644 --- a/src/plugins/data/public/ui/shard_failure_modal/shard_failure_open_modal_button.test.mocks.tsx +++ b/src/plugins/data/public/shard_failure_modal/shard_failure_open_modal_button.test.mocks.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { setOverlays } from '../../services'; +import { setOverlays } from '../services'; import { OverlayStart } from 'kibana/public'; export const openModal = jest.fn(); diff --git a/src/plugins/data/public/ui/shard_failure_modal/shard_failure_open_modal_button.test.tsx b/src/plugins/data/public/shard_failure_modal/shard_failure_open_modal_button.test.tsx similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/shard_failure_open_modal_button.test.tsx rename to src/plugins/data/public/shard_failure_modal/shard_failure_open_modal_button.test.tsx diff --git a/src/plugins/data/public/ui/shard_failure_modal/shard_failure_open_modal_button.tsx b/src/plugins/data/public/shard_failure_modal/shard_failure_open_modal_button.tsx similarity index 91% rename from src/plugins/data/public/ui/shard_failure_modal/shard_failure_open_modal_button.tsx rename to src/plugins/data/public/shard_failure_modal/shard_failure_open_modal_button.tsx index 585268824fb93..a20fe3da06e5a 100644 --- a/src/plugins/data/public/ui/shard_failure_modal/shard_failure_open_modal_button.tsx +++ b/src/plugins/data/public/shard_failure_modal/shard_failure_open_modal_button.tsx @@ -10,10 +10,9 @@ import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiButton, EuiTextAlign } from '@elastic/eui'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; - -import { getOverlays } from '../../services'; -import { ThemeServiceStart } from '../../../../../core/public'; -import { toMountPoint } from '../../../../kibana_react/public'; +import { getOverlays } from '../services'; +import { ThemeServiceStart } from '../../../../core/public'; +import { toMountPoint } from '../../../kibana_react/public'; import { ShardFailureModal } from './shard_failure_modal'; import { ShardFailureRequest } from './shard_failure_types'; diff --git a/src/plugins/data/public/ui/shard_failure_modal/shard_failure_table.test.tsx b/src/plugins/data/public/shard_failure_modal/shard_failure_table.test.tsx similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/shard_failure_table.test.tsx rename to src/plugins/data/public/shard_failure_modal/shard_failure_table.test.tsx diff --git a/src/plugins/data/public/ui/shard_failure_modal/shard_failure_table.tsx b/src/plugins/data/public/shard_failure_modal/shard_failure_table.tsx similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/shard_failure_table.tsx rename to src/plugins/data/public/shard_failure_modal/shard_failure_table.tsx diff --git a/src/plugins/data/public/ui/shard_failure_modal/shard_failure_types.ts b/src/plugins/data/public/shard_failure_modal/shard_failure_types.ts similarity index 100% rename from src/plugins/data/public/ui/shard_failure_modal/shard_failure_types.ts rename to src/plugins/data/public/shard_failure_modal/shard_failure_types.ts diff --git a/src/plugins/data/public/types.ts b/src/plugins/data/public/types.ts index bfc35b8f39c51..55b2637e874e0 100644 --- a/src/plugins/data/public/types.ts +++ b/src/plugins/data/public/types.ts @@ -6,7 +6,6 @@ * Side Public License, v 1. */ -import React from 'react'; import { CoreStart } from 'src/core/public'; import { BfetchPublicSetup } from 'src/plugins/bfetch/public'; import { IStorageWrapper } from 'src/plugins/kibana_utils/public'; @@ -20,7 +19,6 @@ import { createFiltersFromRangeSelectAction, createFiltersFromValueClickAction } import type { ISearchSetup, ISearchStart } from './search'; import { QuerySetup, QueryStart } from './query'; import { DataViewsContract } from './data_views'; -import { IndexPatternSelectProps, StatefulSearchBarProps } from './ui'; import { UsageCollectionSetup, UsageCollectionStart } from '../../usage_collection/public'; import { Setup as InspectorSetup } from '../../inspector/public'; import { NowProviderPublicContract } from './now_provider'; @@ -49,14 +47,6 @@ export interface DataPublicPluginSetup { query: QuerySetup; } -/** - * Data plugin prewired UI components - */ -export interface DataPublicPluginStartUi { - IndexPatternSelect: React.ComponentType; - SearchBar: React.ComponentType; -} - /** * utilities to generate filters from action context */ @@ -110,11 +100,6 @@ export interface DataPublicPluginStart { * {@link QueryStart} */ query: QueryStart; - /** - * prewired UI components - * {@link DataPublicPluginStartUi} - */ - ui: DataPublicPluginStartUi; nowProvider: NowProviderPublicContract; } diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.test.tsx b/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.test.tsx deleted file mode 100644 index f7e9d3930c0ee..0000000000000 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.test.tsx +++ /dev/null @@ -1,143 +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. - */ - -import React from 'react'; -import FilterLabel from './filter_label'; -import { render } from '@testing-library/react'; -import { phraseFilter } from '../../../../stubs'; - -test('alias', () => { - const filter = { - ...phraseFilter, - meta: { - ...phraseFilter.meta, - alias: 'geo.coordinates in US', - }, - }; - const { container } = render(); - expect(container).toMatchInlineSnapshot(` -
- - geo.coordinates in US -
- `); -}); - -test('negated alias', () => { - const filter = { - ...phraseFilter, - meta: { - ...phraseFilter.meta, - alias: 'geo.coordinates in US', - negate: true, - }, - }; - const { container } = render(); - expect(container).toMatchInlineSnapshot(` -
- - NOT - - geo.coordinates in US -
- `); -}); - -test('alias with warning status', () => { - const filter = { - ...phraseFilter, - meta: { - ...phraseFilter.meta, - alias: 'geo.coordinates in US', - negate: true, - }, - }; - const { container } = render( - - ); - expect(container).toMatchInlineSnapshot(` -
- - NOT - - geo.coordinates in US - : - - Warning - -
- `); -}); - -test('alias with error status', () => { - const filter = { - ...phraseFilter, - meta: { - ...phraseFilter.meta, - alias: 'geo.coordinates in US', - negate: true, - }, - }; - const { container } = render( - - ); - expect(container).toMatchInlineSnapshot(` -
- - NOT - - geo.coordinates in US - : - - Error - -
- `); -}); - -test('warning', () => { - const { container } = render(); - expect(container).toMatchInlineSnapshot(` -
- - machine.os - : - - Warning - -
- `); -}); - -test('error', () => { - const { container } = render(); - expect(container).toMatchInlineSnapshot(` -
- - machine.os - : - - Error - -
- `); -}); diff --git a/src/plugins/data_view_management/kibana.json b/src/plugins/data_view_management/kibana.json index a8a0f694bd179..43d22f545bf97 100644 --- a/src/plugins/data_view_management/kibana.json +++ b/src/plugins/data_view_management/kibana.json @@ -3,7 +3,7 @@ "version": "kibana", "server": true, "ui": true, - "requiredPlugins": ["management", "data", "urlForwarding", "dataViewFieldEditor", "dataViewEditor", "dataViews", "fieldFormats"], + "requiredPlugins": ["management", "data", "urlForwarding", "dataViewFieldEditor", "dataViewEditor", "dataViews", "fieldFormats", "unifiedSearch"], "requiredBundles": ["kibanaReact", "kibanaUtils"], "optionalPlugins": ["spaces"], "owner": { diff --git a/src/plugins/data_view_management/public/components/field_editor/components/scripting_help/test_script.tsx b/src/plugins/data_view_management/public/components/field_editor/components/scripting_help/test_script.tsx index 89f80f8a87e38..4b5609cf1970a 100644 --- a/src/plugins/data_view_management/public/components/field_editor/components/scripting_help/test_script.tsx +++ b/src/plugins/data_view_management/public/components/field_editor/components/scripting_help/test_script.tsx @@ -224,7 +224,7 @@ export class TestScript extends Component {
- {}, diff --git a/src/plugins/data_view_management/public/plugin.ts b/src/plugins/data_view_management/public/plugin.ts index 84686dd666f9a..f78f81297dcb0 100644 --- a/src/plugins/data_view_management/public/plugin.ts +++ b/src/plugins/data_view_management/public/plugin.ts @@ -17,6 +17,7 @@ import { IndexPatternFieldEditorStart } from '../../data_view_field_editor/publi import { DataViewEditorStart } from '../../data_view_editor/public'; import { DataViewsPublicPluginStart } from '../../data_views/public'; import { SpacesPluginStart } from '../../../../x-pack/plugins/spaces/public'; +import { UnifiedSearchPublicPluginStart } from '../../unified_search/public'; export interface IndexPatternManagementSetupDependencies { management: ManagementSetup; @@ -30,6 +31,7 @@ export interface IndexPatternManagementStartDependencies { dataViews: DataViewsPublicPluginStart; fieldFormats: FieldFormatsStart; spaces?: SpacesPluginStart; + unifiedSearch: UnifiedSearchPublicPluginStart; } // eslint-disable-next-line @typescript-eslint/no-empty-interface diff --git a/src/plugins/data_view_management/public/types.ts b/src/plugins/data_view_management/public/types.ts index 257d07cd478db..44c582021a92f 100644 --- a/src/plugins/data_view_management/public/types.ts +++ b/src/plugins/data_view_management/public/types.ts @@ -15,6 +15,7 @@ import { HttpSetup, } from 'src/core/public'; import { DataPublicPluginStart } from 'src/plugins/data/public'; +import { UnifiedSearchPublicPluginStart } from '../../unified_search/public'; import { ManagementAppMountParams } from '../../management/public'; import { IndexPatternManagementStart } from './index'; import { KibanaReactContextValue } from '../../kibana_react/public'; @@ -32,6 +33,7 @@ export interface IndexPatternManagmentContext { http: HttpSetup; docLinks: DocLinksStart; data: DataPublicPluginStart; + unifiedSearch: UnifiedSearchPublicPluginStart; dataViews: DataViewsPublicPluginStart; dataViewFieldEditor: IndexPatternFieldEditorStart; indexPatternManagementStart: IndexPatternManagementStart; diff --git a/src/plugins/data_view_management/tsconfig.json b/src/plugins/data_view_management/tsconfig.json index 9710111bcfde2..9b8a7e688e0c0 100644 --- a/src/plugins/data_view_management/tsconfig.json +++ b/src/plugins/data_view_management/tsconfig.json @@ -20,6 +20,7 @@ { "path": "../es_ui_shared/tsconfig.json" }, { "path": "../data_view_field_editor/tsconfig.json" }, { "path": "../data_view_editor/tsconfig.json" }, + { "path": "../unified_search/tsconfig.json" }, { "path": "../../../x-pack/plugins/spaces/tsconfig.json" } ] } diff --git a/src/plugins/input_control_vis/kibana.json b/src/plugins/input_control_vis/kibana.json index 83d2c92a70093..ad9a0e3accb6d 100644 --- a/src/plugins/input_control_vis/kibana.json +++ b/src/plugins/input_control_vis/kibana.json @@ -9,6 +9,6 @@ "kibanaVersion": "kibana", "server": false, "ui": true, - "requiredPlugins": ["data", "expressions", "visDefaultEditor", "visualizations"], + "requiredPlugins": ["data", "expressions", "visDefaultEditor", "visualizations", "unifiedSearch"], "requiredBundles": ["kibanaReact"] } diff --git a/src/plugins/input_control_vis/public/components/editor/index_pattern_select_form_row.tsx b/src/plugins/input_control_vis/public/components/editor/index_pattern_select_form_row.tsx index 5363a988226ec..57fb9cdce6d86 100644 --- a/src/plugins/input_control_vis/public/components/editor/index_pattern_select_form_row.tsx +++ b/src/plugins/input_control_vis/public/components/editor/index_pattern_select_form_row.tsx @@ -9,7 +9,7 @@ import React, { ComponentType } from 'react'; import { injectI18n, InjectedIntlProps } from '@kbn/i18n-react'; import { EuiFormRow } from '@elastic/eui'; -import { IndexPatternSelectProps } from 'src/plugins/data/public'; +import { IndexPatternSelectProps } from '../../../../unified_search/public'; export type IndexPatternSelectFormRowUiProps = InjectedIntlProps & { onChange: (opt: any) => void; diff --git a/src/plugins/input_control_vis/public/components/editor/list_control_editor.tsx b/src/plugins/input_control_vis/public/components/editor/list_control_editor.tsx index 720b1325142ec..3a8dcccce6515 100644 --- a/src/plugins/input_control_vis/public/components/editor/list_control_editor.tsx +++ b/src/plugins/input_control_vis/public/components/editor/list_control_editor.tsx @@ -14,7 +14,7 @@ import { EuiFormRow, EuiFieldNumber, EuiSwitch, EuiSelect } from '@elastic/eui'; import { IndexPatternSelectFormRow } from './index_pattern_select_form_row'; import { FieldSelect } from './field_select'; import { ControlParams, ControlParamsOptions } from '../../editor_utils'; -import { IndexPatternSelectProps } from '../../../../data/public'; +import { IndexPatternSelectProps } from '../../../../unified_search/public'; import { DataView, DataViewField } from '../../../../data_views/public'; import { InputControlVisDependencies } from '../../plugin'; @@ -93,9 +93,9 @@ export class ListControlEditor extends PureComponent< }; async getIndexPatternSelect() { - const [, { data }] = await this.props.deps.core.getStartServices(); + const [, { unifiedSearch }] = await this.props.deps.core.getStartServices(); this.setState({ - IndexPatternSelect: data.ui.IndexPatternSelect, + IndexPatternSelect: unifiedSearch.ui.IndexPatternSelect, }); } diff --git a/src/plugins/input_control_vis/public/components/editor/range_control_editor.tsx b/src/plugins/input_control_vis/public/components/editor/range_control_editor.tsx index 913eb49c96cfe..32d1f9aef5549 100644 --- a/src/plugins/input_control_vis/public/components/editor/range_control_editor.tsx +++ b/src/plugins/input_control_vis/public/components/editor/range_control_editor.tsx @@ -14,7 +14,7 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { IndexPatternSelectFormRow } from './index_pattern_select_form_row'; import { FieldSelect } from './field_select'; import { ControlParams, ControlParamsOptions } from '../../editor_utils'; -import { IndexPatternSelectProps } from '../../../../data/public'; +import { IndexPatternSelectProps } from '../../../../unified_search/public'; import { DataView, DataViewField } from '../../../../data_views/public'; import { InputControlVisDependencies } from '../../plugin'; @@ -53,9 +53,9 @@ export class RangeControlEditor extends Component< } async getIndexPatternSelect() { - const [, { data }] = await this.props.deps.core.getStartServices(); + const [, { unifiedSearch }] = await this.props.deps.core.getStartServices(); this.setState({ - IndexPatternSelect: data.ui.IndexPatternSelect, + IndexPatternSelect: unifiedSearch.ui.IndexPatternSelect, }); } diff --git a/src/plugins/input_control_vis/public/plugin.ts b/src/plugins/input_control_vis/public/plugin.ts index c086bc7f74d61..0f8f601d5edbc 100644 --- a/src/plugins/input_control_vis/public/plugin.ts +++ b/src/plugins/input_control_vis/public/plugin.ts @@ -9,6 +9,7 @@ import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from 'kibana/public'; import { DataPublicPluginSetup, DataPublicPluginStart } from 'src/plugins/data/public'; +import { UnifiedSearchPublicPluginStart } from 'src/plugins/unified_search/public'; import { Plugin as ExpressionsPublicPlugin } from '../../expressions/public'; import { VisualizationsSetup, VisualizationsStart } from '../../visualizations/public'; import { createInputControlVisFn } from './input_control_fn'; @@ -40,6 +41,7 @@ export interface InputControlVisPluginStartDependencies { expressions: ReturnType; visualizations: VisualizationsStart; data: DataPublicPluginStart; + unifiedSearch: UnifiedSearchPublicPluginStart; } /** @internal */ diff --git a/src/plugins/input_control_vis/tsconfig.json b/src/plugins/input_control_vis/tsconfig.json index 43b1539e87da2..1840efb32bbcf 100644 --- a/src/plugins/input_control_vis/tsconfig.json +++ b/src/plugins/input_control_vis/tsconfig.json @@ -17,5 +17,6 @@ { "path": "../expressions/tsconfig.json" }, { "path": "../visualizations/tsconfig.json" }, { "path": "../vis_default_editor/tsconfig.json" }, + { "path": "../unified_search/tsconfig.json" } ] } diff --git a/src/plugins/navigation/kibana.json b/src/plugins/navigation/kibana.json index aa1294847cef8..ae188be0c6d39 100644 --- a/src/plugins/navigation/kibana.json +++ b/src/plugins/navigation/kibana.json @@ -7,6 +7,6 @@ "version": "kibana", "server": false, "ui": true, - "requiredPlugins": ["data"], + "requiredPlugins": ["unifiedSearch"], "requiredBundles": ["kibanaReact"] } diff --git a/src/plugins/navigation/public/plugin.ts b/src/plugins/navigation/public/plugin.ts index e9a95312cba92..dc3d8f2043a76 100644 --- a/src/plugins/navigation/public/plugin.ts +++ b/src/plugins/navigation/public/plugin.ts @@ -32,13 +32,13 @@ export class NavigationPublicPlugin public start( { i18n }: CoreStart, - { data }: NavigationPluginStartDependencies + { unifiedSearch }: NavigationPluginStartDependencies ): NavigationPublicPluginStart { const extensions = this.topNavMenuExtensionsRegistry.getAll(); return { ui: { - TopNavMenu: createTopNav(data, extensions, i18n), + TopNavMenu: createTopNav(unifiedSearch, extensions, i18n), }, }; } diff --git a/src/plugins/navigation/public/top_nav_menu/create_top_nav_menu.tsx b/src/plugins/navigation/public/top_nav_menu/create_top_nav_menu.tsx index 1e5cecb5346a7..a26627c84a52b 100644 --- a/src/plugins/navigation/public/top_nav_menu/create_top_nav_menu.tsx +++ b/src/plugins/navigation/public/top_nav_menu/create_top_nav_menu.tsx @@ -8,12 +8,12 @@ import React from 'react'; import { I18nStart } from 'kibana/public'; -import { DataPublicPluginStart } from 'src/plugins/data/public'; +import { UnifiedSearchPublicPluginStart } from 'src/plugins/unified_search/public'; import { TopNavMenuProps, TopNavMenu } from './top_nav_menu'; import { RegisteredTopNavMenuData } from './top_nav_menu_data'; export function createTopNav( - data: DataPublicPluginStart, + unifiedSearch: UnifiedSearchPublicPluginStart, extraConfig: RegisteredTopNavMenuData[], i18n: I18nStart ) { @@ -25,7 +25,7 @@ export function createTopNav( return ( - + ); }; diff --git a/src/plugins/navigation/public/top_nav_menu/top_nav_menu.test.tsx b/src/plugins/navigation/public/top_nav_menu/top_nav_menu.test.tsx index 682154dd5d5db..7d263d010d46a 100644 --- a/src/plugins/navigation/public/top_nav_menu/top_nav_menu.test.tsx +++ b/src/plugins/navigation/public/top_nav_menu/top_nav_menu.test.tsx @@ -13,12 +13,13 @@ import { MountPoint } from 'kibana/public'; import { TopNavMenu } from './top_nav_menu'; import { TopNavMenuData } from './top_nav_menu_data'; import { shallowWithIntl, mountWithIntl } from '@kbn/test-jest-helpers'; +import type { UnifiedSearchPublicPluginStart } from '../../../unified_search/public'; -const dataShim = { +const unifiedSearch = { ui: { SearchBar: () =>
, }, -}; +} as unknown as UnifiedSearchPublicPluginStart; describe('TopNavMenu', () => { const WRAPPER_SELECTOR = '.kbnTopNavMenu__wrapper'; @@ -72,7 +73,7 @@ describe('TopNavMenu', () => { it('Should render search bar', () => { const component = shallowWithIntl( - + ); expect(component.find(WRAPPER_SELECTOR).length).toBe(1); expect(component.find(TOP_NAV_ITEM_SELECTOR).length).toBe(0); @@ -81,7 +82,12 @@ describe('TopNavMenu', () => { it('Should render menu items and search bar', () => { const component = shallowWithIntl( - + ); expect(component.find(WRAPPER_SELECTOR).length).toBe(1); expect(component.find(TOP_NAV_ITEM_SELECTOR).length).toBe(menuItems.length); @@ -94,7 +100,7 @@ describe('TopNavMenu', () => { appName={'test'} config={menuItems} showSearchBar={true} - data={dataShim as any} + unifiedSearch={unifiedSearch} className={'myCoolClass'} /> ); @@ -142,7 +148,7 @@ describe('TopNavMenu', () => { appName={'test'} config={menuItems} showSearchBar={true} - data={dataShim as any} + unifiedSearch={unifiedSearch} setMenuMountPoint={setMountPoint} /> ); diff --git a/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx b/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx index 22edf9c454466..fcc2f08263392 100644 --- a/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx +++ b/src/plugins/navigation/public/top_nav_menu/top_nav_menu.tsx @@ -12,11 +12,8 @@ import classNames from 'classnames'; import { MountPoint } from '../../../../core/public'; import { MountPointPortal } from '../../../kibana_react/public'; -import { - StatefulSearchBarProps, - DataPublicPluginStart, - SearchBarProps, -} from '../../../data/public'; +import { UnifiedSearchPublicPluginStart } from '../../../unified_search/public'; +import { StatefulSearchBarProps, SearchBarProps } from '../../../unified_search/public'; import { TopNavMenuData } from './top_nav_menu_data'; import { TopNavMenuItem } from './top_nav_menu_item'; @@ -29,7 +26,7 @@ export type TopNavMenuProps = StatefulSearchBarProps & showQueryInput?: boolean; showDatePicker?: boolean; showFilterBar?: boolean; - data?: DataPublicPluginStart; + unifiedSearch?: UnifiedSearchPublicPluginStart; className?: string; /** * If provided, the menu part of the component will be rendered as a portal inside the given mount point. @@ -64,7 +61,7 @@ export type TopNavMenuProps = StatefulSearchBarProps & export function TopNavMenu(props: TopNavMenuProps): ReactElement | null { const { config, badges, showSearchBar, ...searchBarProps } = props; - if ((!config || config.length === 0) && (!showSearchBar || !props.data)) { + if ((!config || config.length === 0) && (!showSearchBar || !props.unifiedSearch)) { return null; } @@ -102,8 +99,8 @@ export function TopNavMenu(props: TopNavMenuProps): ReactElement | null { function renderSearchBar(): ReactElement | null { // Validate presense of all required fields - if (!showSearchBar || !props.data) return null; - const { SearchBar } = props.data.ui; + if (!showSearchBar || !props.unifiedSearch) return null; + const { SearchBar } = props.unifiedSearch.ui; return ; } diff --git a/src/plugins/navigation/public/types.ts b/src/plugins/navigation/public/types.ts index d23bc249dd011..29b204a798fa5 100644 --- a/src/plugins/navigation/public/types.ts +++ b/src/plugins/navigation/public/types.ts @@ -7,7 +7,7 @@ */ import { TopNavMenuProps, TopNavMenuExtensionsRegistrySetup } from './top_nav_menu'; -import { DataPublicPluginStart } from '../../data/public'; +import { UnifiedSearchPublicPluginStart } from '../../unified_search/public'; export interface NavigationPublicPluginSetup { registerMenuItem: TopNavMenuExtensionsRegistrySetup['register']; @@ -20,5 +20,5 @@ export interface NavigationPublicPluginStart { } export interface NavigationPluginStartDependencies { - data: DataPublicPluginStart; + unifiedSearch: UnifiedSearchPublicPluginStart; } diff --git a/src/plugins/navigation/tsconfig.json b/src/plugins/navigation/tsconfig.json index 1b7e87aaba41a..ca9acf96f4190 100644 --- a/src/plugins/navigation/tsconfig.json +++ b/src/plugins/navigation/tsconfig.json @@ -11,5 +11,6 @@ { "path": "../../core/tsconfig.json" }, { "path": "../kibana_react/tsconfig.json" }, { "path": "../data/tsconfig.json" }, + { "path": "../unified_search/tsconfig.json" } ] } diff --git a/src/plugins/unified_search/README.md b/src/plugins/unified_search/README.md new file mode 100755 index 0000000000000..7c5183ff8adcc --- /dev/null +++ b/src/plugins/unified_search/README.md @@ -0,0 +1,9 @@ +# unifiedSearch + +A Kibana plugin + +--- + +## Development + +See the [kibana contributing guide](https://github.com/elastic/kibana/blob/main/CONTRIBUTING.md) for instructions setting up your development environment. diff --git a/src/plugins/unified_search/config.ts b/src/plugins/unified_search/config.ts new file mode 100644 index 0000000000000..c0067771b6803 --- /dev/null +++ b/src/plugins/unified_search/config.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. + */ + +import { schema, TypeOf } from '@kbn/config-schema'; + +export const configSchema = schema.object({}); + +export type ConfigSchema = TypeOf; diff --git a/src/plugins/unified_search/jest.config.js b/src/plugins/unified_search/jest.config.js new file mode 100644 index 0000000000000..783631ba05d5c --- /dev/null +++ b/src/plugins/unified_search/jest.config.js @@ -0,0 +1,16 @@ +/* + * 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. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../..', + roots: ['/src/plugins/unified_search'], + coverageDirectory: '/target/kibana-coverage/jest/src/plugins/unified_search', + coverageReporters: ['text', 'html'], + collectCoverageFrom: ['/src/plugins/unified_search/public/**/*.{ts,tsx}'], +}; diff --git a/src/plugins/unified_search/kibana.json b/src/plugins/unified_search/kibana.json new file mode 100755 index 0000000000000..2bc7cb3c1b57c --- /dev/null +++ b/src/plugins/unified_search/kibana.json @@ -0,0 +1,13 @@ +{ + "id": "unifiedSearch", + "version": "1.0.0", + "kibanaVersion": "kibana", + "owner": { + "name": "Unified Search", + "githubTeam": "kibana-app-services" + }, + "server": false, + "ui": true, + "requiredPlugins": ["dataViews", "data"], + "requiredBundles": ["kibanaUtils", "kibanaReact"] +} diff --git a/src/plugins/data/public/ui/_index.scss b/src/plugins/unified_search/public/index.scss old mode 100644 new mode 100755 similarity index 56% rename from src/plugins/data/public/ui/_index.scss rename to src/plugins/unified_search/public/index.scss index 1ca49963f3ded..72e1c0c313f74 --- a/src/plugins/data/public/ui/_index.scss +++ b/src/plugins/unified_search/public/index.scss @@ -1,10 +1,5 @@ - -@import './filter_bar/index'; - @import './typeahead/index'; @import './saved_query_management/index'; @import './query_string_input/index'; - -@import './shard_failure_modal/shard_failure_modal'; \ No newline at end of file diff --git a/src/plugins/data/public/ui/index.ts b/src/plugins/unified_search/public/index.ts old mode 100644 new mode 100755 similarity index 50% rename from src/plugins/data/public/ui/index.ts rename to src/plugins/unified_search/public/index.ts index 026db1b7c09ee..e4d30bfc8fc85 --- a/src/plugins/data/public/ui/index.ts +++ b/src/plugins/unified_search/public/index.ts @@ -5,11 +5,23 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ +import { PluginInitializerContext } from '../../../core/public'; +import { ConfigSchema } from '../config'; +import { UnifiedSearchPublicPlugin } from './plugin'; +export type { UnifiedSearchPublicPlugin as UnifiedSearchPlugin }; export type { IndexPatternSelectProps } from './index_pattern_select'; -export { FilterLabel, FilterItem } from './filter_bar'; +export { createIndexPatternSelect } from './index_pattern_select'; export type { QueryStringInputProps } from './query_string_input'; export { QueryStringInput } from './query_string_input'; export type { SearchBarProps, StatefulSearchBarProps } from './search_bar'; export { SearchBar } from './search_bar'; export { SuggestionsComponent } from './typeahead'; +export type { UnifiedSearchPublicPluginStart } from './types'; + +// This exports static code and TypeScript types, +// as well as, Kibana Platform `plugin()` initializer. +export function plugin(initializerContext: PluginInitializerContext) { + return new UnifiedSearchPublicPlugin(initializerContext); +} +export type { UnifiedSearchPluginSetup, UnifiedSearchPluginStart } from './types'; diff --git a/src/plugins/data/public/ui/index_pattern_select/create_index_pattern_select.tsx b/src/plugins/unified_search/public/index_pattern_select/create_index_pattern_select.tsx similarity index 92% rename from src/plugins/data/public/ui/index_pattern_select/create_index_pattern_select.tsx rename to src/plugins/unified_search/public/index_pattern_select/create_index_pattern_select.tsx index 16b36534c7489..4a86ab32db9ec 100644 --- a/src/plugins/data/public/ui/index_pattern_select/create_index_pattern_select.tsx +++ b/src/plugins/unified_search/public/index_pattern_select/create_index_pattern_select.tsx @@ -9,7 +9,7 @@ import _ from 'lodash'; import React from 'react'; -import { IndexPatternsContract } from 'src/plugins/data/public'; +import { IndexPatternsContract } from '../../../data/public'; import { IndexPatternSelect, IndexPatternSelectProps } from './'; // Takes in stateful runtime dependencies and pre-wires them to the component diff --git a/src/plugins/data/public/ui/index_pattern_select/index.tsx b/src/plugins/unified_search/public/index_pattern_select/index.tsx similarity index 100% rename from src/plugins/data/public/ui/index_pattern_select/index.tsx rename to src/plugins/unified_search/public/index_pattern_select/index.tsx diff --git a/src/plugins/data/public/ui/index_pattern_select/index_pattern_select.tsx b/src/plugins/unified_search/public/index_pattern_select/index_pattern_select.tsx similarity index 98% rename from src/plugins/data/public/ui/index_pattern_select/index_pattern_select.tsx rename to src/plugins/unified_search/public/index_pattern_select/index_pattern_select.tsx index 2b45d8efc4d92..7555d00bac8b3 100644 --- a/src/plugins/data/public/ui/index_pattern_select/index_pattern_select.tsx +++ b/src/plugins/unified_search/public/index_pattern_select/index_pattern_select.tsx @@ -11,8 +11,7 @@ import React, { Component } from 'react'; import { Required } from '@kbn/utility-types'; import { EuiComboBox, EuiComboBoxProps } from '@elastic/eui'; - -import { IndexPatternsContract } from 'src/plugins/data/public'; +import { IndexPatternsContract } from '../../../data/public'; export type IndexPatternSelectProps = Required< Omit< diff --git a/src/plugins/unified_search/public/mocks.ts b/src/plugins/unified_search/public/mocks.ts new file mode 100644 index 0000000000000..c00cb08ede581 --- /dev/null +++ b/src/plugins/unified_search/public/mocks.ts @@ -0,0 +1,25 @@ +/* + * 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 { UnifiedSearchPlugin } from '../../unified_search/public'; + +export type Setup = jest.Mocked>; +export type Start = jest.Mocked>; + +const createStartContract = (): Start => { + return { + ui: { + IndexPatternSelect: jest.fn(), + SearchBar: jest.fn().mockReturnValue(null), + }, + }; +}; + +export const unifiedSearchPluginMock = { + createStartContract, +}; diff --git a/src/plugins/unified_search/public/plugin.ts b/src/plugins/unified_search/public/plugin.ts new file mode 100755 index 0000000000000..d52e766788ae5 --- /dev/null +++ b/src/plugins/unified_search/public/plugin.ts @@ -0,0 +1,58 @@ +/* + * 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 './index.scss'; + +import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '../../../core/public'; +import { Storage, IStorageWrapper } from '../../kibana_utils/public'; +import { ConfigSchema } from '../config'; +import { setIndexPatterns, setTheme } from './services'; +import type { UsageCollectionSetup } from '../../usage_collection/public'; +import { createSearchBar } from './search_bar'; +import { createIndexPatternSelect } from './index_pattern_select'; +import { UnifiedSearchPluginSetup, UnifiedSearchPublicPluginStart } from './types'; +import type { UnifiedSearchStartDependencies } from './types'; + +export class UnifiedSearchPublicPlugin + implements Plugin +{ + private readonly storage: IStorageWrapper; + private usageCollection: UsageCollectionSetup | undefined; + + constructor(initializerContext: PluginInitializerContext) { + this.storage = new Storage(window.localStorage); + } + + public setup(core: CoreSetup): UnifiedSearchPluginSetup { + return {}; + } + + public start( + core: CoreStart, + { data, dataViews }: UnifiedSearchStartDependencies + ): UnifiedSearchPublicPluginStart { + setTheme(core.theme); + setIndexPatterns(dataViews); + + const SearchBar = createSearchBar({ + core, + data, + storage: this.storage, + usageCollection: this.usageCollection, + }); + + return { + ui: { + IndexPatternSelect: createIndexPatternSelect(dataViews), + SearchBar, + }, + }; + } + + public stop() {} +} diff --git a/src/plugins/data/public/ui/query_string_input/_index.scss b/src/plugins/unified_search/public/query_string_input/_index.scss similarity index 100% rename from src/plugins/data/public/ui/query_string_input/_index.scss rename to src/plugins/unified_search/public/query_string_input/_index.scss diff --git a/src/plugins/data/public/ui/query_string_input/_query_bar.scss b/src/plugins/unified_search/public/query_string_input/_query_bar.scss similarity index 100% rename from src/plugins/data/public/ui/query_string_input/_query_bar.scss rename to src/plugins/unified_search/public/query_string_input/_query_bar.scss diff --git a/src/plugins/data/public/ui/query_string_input/fetch_index_patterns.ts b/src/plugins/unified_search/public/query_string_input/fetch_index_patterns.ts similarity index 94% rename from src/plugins/data/public/ui/query_string_input/fetch_index_patterns.ts rename to src/plugins/unified_search/public/query_string_input/fetch_index_patterns.ts index 5eca12cd55028..4d37e53753374 100644 --- a/src/plugins/data/public/ui/query_string_input/fetch_index_patterns.ts +++ b/src/plugins/unified_search/public/query_string_input/fetch_index_patterns.ts @@ -7,7 +7,7 @@ */ import { isEmpty } from 'lodash'; -import { IndexPatternsContract } from '../..'; +import { IndexPatternsContract } from '../../../data/public'; export async function fetchIndexPatterns( indexPatternsService: IndexPatternsContract, diff --git a/src/plugins/data/public/query/lib/from_user.test.ts b/src/plugins/unified_search/public/query_string_input/from_user.test.ts similarity index 96% rename from src/plugins/data/public/query/lib/from_user.test.ts rename to src/plugins/unified_search/public/query_string_input/from_user.test.ts index 38a0c9efbb59c..35f6e576181a7 100644 --- a/src/plugins/data/public/query/lib/from_user.test.ts +++ b/src/plugins/unified_search/public/query_string_input/from_user.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { fromUser } from '../'; +import { fromUser } from './from_user'; describe('user input helpers', function () { describe('user input parser', function () { diff --git a/src/plugins/data/public/query/lib/from_user.ts b/src/plugins/unified_search/public/query_string_input/from_user.ts similarity index 100% rename from src/plugins/data/public/query/lib/from_user.ts rename to src/plugins/unified_search/public/query_string_input/from_user.ts diff --git a/src/plugins/data/public/ui/query_string_input/index.tsx b/src/plugins/unified_search/public/query_string_input/index.tsx similarity index 94% rename from src/plugins/data/public/ui/query_string_input/index.tsx rename to src/plugins/unified_search/public/query_string_input/index.tsx index 655640d2cd875..d0f22a2f41c52 100644 --- a/src/plugins/data/public/ui/query_string_input/index.tsx +++ b/src/plugins/unified_search/public/query_string_input/index.tsx @@ -7,7 +7,7 @@ */ import React from 'react'; -import { withKibana } from '../../../../kibana_react/public'; +import { withKibana } from '../../../kibana_react/public'; import type { QueryBarTopRowProps } from './query_bar_top_row'; import type { QueryStringInputProps } from './query_string_input'; @@ -21,6 +21,7 @@ export const QueryBarTopRow = (props: QueryBarTopRowProps) => ( ); const LazyQueryStringInputUI = withKibana(React.lazy(() => import('./query_string_input'))); + export const QueryStringInput = (props: QueryStringInputProps) => ( }> diff --git a/src/plugins/data/public/ui/query_string_input/language_switcher.test.tsx b/src/plugins/unified_search/public/query_string_input/language_switcher.test.tsx similarity index 97% rename from src/plugins/data/public/ui/query_string_input/language_switcher.test.tsx rename to src/plugins/unified_search/public/query_string_input/language_switcher.test.tsx index 67d36f465568d..8106c9daf2817 100644 --- a/src/plugins/data/public/ui/query_string_input/language_switcher.test.tsx +++ b/src/plugins/unified_search/public/query_string_input/language_switcher.test.tsx @@ -8,8 +8,8 @@ import React from 'react'; import { QueryLanguageSwitcher, QueryLanguageSwitcherProps } from './language_switcher'; -import { KibanaContextProvider } from 'src/plugins/kibana_react/public'; -import { coreMock } from '../../../../../core/public/mocks'; +import { KibanaContextProvider } from '../../../kibana_react/public'; +import { coreMock } from '../../../../core/public/mocks'; import { mountWithIntl } from '@kbn/test-jest-helpers'; import { EuiButtonEmpty, EuiIcon, EuiPopover } from '@elastic/eui'; const startMock = coreMock.createStart(); diff --git a/src/plugins/data/public/ui/query_string_input/language_switcher.tsx b/src/plugins/unified_search/public/query_string_input/language_switcher.tsx similarity index 80% rename from src/plugins/data/public/ui/query_string_input/language_switcher.tsx rename to src/plugins/unified_search/public/query_string_input/language_switcher.tsx index 3d66edd6a022c..0454d3066cd16 100644 --- a/src/plugins/data/public/ui/query_string_input/language_switcher.tsx +++ b/src/plugins/unified_search/public/query_string_input/language_switcher.tsx @@ -22,7 +22,7 @@ import { import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import React, { useState } from 'react'; -import { useKibana } from '../../../../kibana_react/public'; +import { useKibana } from '../../../kibana_react/public'; export interface QueryLanguageSwitcherProps { language: string; @@ -43,20 +43,23 @@ export const QueryLanguageSwitcher = React.memo(function QueryLanguageSwitcher({ const kueryQuerySyntaxDocs = kibana.services.docLinks!.links.query.kueryQuerySyntax; const [isPopoverOpen, setIsPopoverOpen] = useState(false); const luceneLabel = ( - + ); const kqlLabel = ( - + ); const kqlFullName = ( ); - const kqlModeTitle = i18n.translate('data.query.queryBar.languageSwitcher.toText', { + const kqlModeTitle = i18n.translate('unifiedSearch.query.queryBar.languageSwitcher.toText', { defaultMessage: 'Switch to Kibana Query Language for search', }); @@ -91,7 +94,7 @@ export const QueryLanguageSwitcher = React.memo(function QueryLanguageSwitcher({ > @@ -99,7 +102,7 @@ export const QueryLanguageSwitcher = React.memo(function QueryLanguageSwitcher({

+ ) : ( - + ) } checked={language === 'kuery'} diff --git a/src/plugins/data/public/query/lib/match_pairs.ts b/src/plugins/unified_search/public/query_string_input/match_pairs.ts similarity index 100% rename from src/plugins/data/public/query/lib/match_pairs.ts rename to src/plugins/unified_search/public/query_string_input/match_pairs.ts diff --git a/src/plugins/data/public/ui/query_string_input/no_data_popover.test.tsx b/src/plugins/unified_search/public/query_string_input/no_data_popover.test.tsx similarity index 100% rename from src/plugins/data/public/ui/query_string_input/no_data_popover.test.tsx rename to src/plugins/unified_search/public/query_string_input/no_data_popover.test.tsx diff --git a/src/plugins/data/public/ui/query_string_input/no_data_popover.tsx b/src/plugins/unified_search/public/query_string_input/no_data_popover.tsx similarity index 84% rename from src/plugins/data/public/ui/query_string_input/no_data_popover.tsx rename to src/plugins/unified_search/public/query_string_input/no_data_popover.tsx index 672d992dc7d79..e417f274fa557 100644 --- a/src/plugins/data/public/ui/query_string_input/no_data_popover.tsx +++ b/src/plugins/unified_search/public/query_string_input/no_data_popover.tsx @@ -6,11 +6,11 @@ * Side Public License, v 1. */ -import { ReactElement, useEffect, useState } from 'react'; import React from 'react'; -import { EuiButtonEmpty, EuiText, EuiTourStep } from '@elastic/eui'; -import { IStorageWrapper } from 'src/plugins/kibana_utils/public'; +import { ReactElement, useEffect, useState } from 'react'; import { i18n } from '@kbn/i18n'; +import { EuiButtonEmpty, EuiText, EuiTourStep } from '@elastic/eui'; +import { IStorageWrapper } from '../../../kibana_utils/public'; const NO_DATA_POPOVER_STORAGE_KEY = 'data.noDataPopover'; @@ -43,7 +43,7 @@ export function NoDataPopover({ content={

- {i18n.translate('data.noDataPopover.content', { + {i18n.translate('unifiedSearch.noDataPopover.content', { defaultMessage: "This time range doesn't contain any data. Increase or adjust the time range to see more fields and create charts.", })} @@ -56,8 +56,10 @@ export function NoDataPopover({ step={1} stepsTotal={1} isStepOpen={noDataPopoverVisible} - subtitle={i18n.translate('data.noDataPopover.subtitle', { defaultMessage: 'Tip' })} - title={i18n.translate('data.noDataPopover.title', { defaultMessage: 'Empty dataset' })} + subtitle={i18n.translate('unifiedSearch.noDataPopover.subtitle', { defaultMessage: 'Tip' })} + title={i18n.translate('unifiedSearch.noDataPopover.title', { + defaultMessage: 'Empty dataset', + })} footerAction={ - {i18n.translate('data.noDataPopover.dismissAction', { + {i18n.translate('unifiedSearch.noDataPopover.dismissAction', { defaultMessage: "Don't show again", })} diff --git a/src/plugins/data/public/ui/query_string_input/query_bar_top_row.test.tsx b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.test.tsx similarity index 95% rename from src/plugins/data/public/ui/query_string_input/query_bar_top_row.test.tsx rename to src/plugins/unified_search/public/query_string_input/query_bar_top_row.test.tsx index 56dd901055fbc..4e70d5f596ed5 100644 --- a/src/plugins/data/public/ui/query_string_input/query_bar_top_row.test.tsx +++ b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.test.tsx @@ -14,12 +14,12 @@ import { render } from '@testing-library/react'; import { EMPTY } from 'rxjs'; import QueryBarTopRow from './query_bar_top_row'; -import { coreMock } from '../../../../../core/public/mocks'; -import { dataPluginMock } from '../../mocks'; -import { KibanaContextProvider } from 'src/plugins/kibana_react/public'; +import { coreMock } from '../../../../core/public/mocks'; +import { dataPluginMock } from '../../../data/public/mocks'; +import { KibanaContextProvider } from '../../../kibana_react/public'; import { I18nProvider } from '@kbn/i18n-react'; -import { stubIndexPattern } from '../../stubs'; -import { UI_SETTINGS } from '../../../common'; +import { stubIndexPattern } from '../../../data/public/stubs'; +import { UI_SETTINGS } from '../../../data/common'; const startMock = coreMock.createStart(); const mockTimeHistory = { diff --git a/src/plugins/data/public/ui/query_string_input/query_bar_top_row.tsx b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx similarity index 96% rename from src/plugins/data/public/ui/query_string_input/query_bar_top_row.tsx rename to src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx index 75d22137937e9..7b2a907b83124 100644 --- a/src/plugins/data/public/ui/query_string_input/query_bar_top_row.tsx +++ b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx @@ -13,7 +13,6 @@ import deepEqual from 'fast-deep-equal'; import useObservable from 'react-use/lib/useObservable'; import { EMPTY } from 'rxjs'; import { map } from 'rxjs/operators'; - import { EuiFlexGroup, EuiFlexItem, @@ -24,14 +23,20 @@ import { EuiSuperUpdateButton, OnRefreshProps, } from '@elastic/eui'; -import { IDataPluginServices, IIndexPattern, TimeRange, TimeHistoryContract, Query } from '../..'; -import { useKibana, withKibana } from '../../../../kibana_react/public'; +import { + IDataPluginServices, + IIndexPattern, + TimeRange, + TimeHistoryContract, + Query, + getQueryLog, +} from '../../../data/public'; +import type { PersistedLog } from '../../../data/public'; +import { useKibana, withKibana } from '../../../kibana_react/public'; import QueryStringInputUI from './query_string_input'; -import { UI_SETTINGS } from '../../../common'; -import { getQueryLog } from '../../query'; -import type { PersistedLog } from '../../query'; +import { UI_SETTINGS } from '../../../data/common'; import { NoDataPopover } from './no_data_popover'; -import { shallowEqual } from '../../utils/shallow_equal'; +import { shallowEqual } from '../utils'; const SuperDatePicker = React.memo( EuiSuperDatePicker as any diff --git a/src/plugins/data/public/ui/query_string_input/query_string_input.test.mocks.ts b/src/plugins/unified_search/public/query_string_input/query_string_input.test.mocks.ts similarity index 89% rename from src/plugins/data/public/ui/query_string_input/query_string_input.test.mocks.ts rename to src/plugins/unified_search/public/query_string_input/query_string_input.test.mocks.ts index 9e9498fa465c4..f8c80473d4f0a 100644 --- a/src/plugins/data/public/ui/query_string_input/query_string_input.test.mocks.ts +++ b/src/plugins/unified_search/public/query_string_input/query_string_input.test.mocks.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { stubIndexPattern } from '../../stubs'; +import { stubIndexPattern } from '../../../data/public/stubs'; export const mockPersistedLog = { add: jest.fn(), @@ -21,7 +21,7 @@ export const mockFetchIndexPatterns = jest .fn() .mockReturnValue(Promise.resolve([stubIndexPattern])); -jest.mock('../../query/persisted_log', () => ({ +jest.mock('../../../data/public/query/persisted_log', () => ({ PersistedLog: mockPersistedLogFactory, })); diff --git a/src/plugins/data/public/ui/query_string_input/query_string_input.test.tsx b/src/plugins/unified_search/public/query_string_input/query_string_input.test.tsx similarity index 97% rename from src/plugins/data/public/ui/query_string_input/query_string_input.test.tsx rename to src/plugins/unified_search/public/query_string_input/query_string_input.test.tsx index 764ad45c78d3d..4a48b3cc42420 100644 --- a/src/plugins/data/public/ui/query_string_input/query_string_input.test.tsx +++ b/src/plugins/unified_search/public/query_string_input/query_string_input.test.tsx @@ -23,10 +23,10 @@ import { EuiTextArea, EuiIcon } from '@elastic/eui'; import { QueryLanguageSwitcher } from './language_switcher'; import QueryStringInputUI from './query_string_input'; -import { coreMock } from '../../../../../core/public/mocks'; -import { dataPluginMock } from '../../mocks'; -import { stubIndexPattern } from '../../stubs'; -import { KibanaContextProvider, withKibana } from 'src/plugins/kibana_react/public'; +import { coreMock } from '../../../../core/public/mocks'; +import { dataPluginMock } from '../../../data/public/mocks'; +import { stubIndexPattern } from '../../../data/public/stubs'; +import { KibanaContextProvider, withKibana } from '../../../kibana_react/public'; jest.useFakeTimers(); diff --git a/src/plugins/data/public/ui/query_string_input/query_string_input.tsx b/src/plugins/unified_search/public/query_string_input/query_string_input.tsx similarity index 95% rename from src/plugins/data/public/ui/query_string_input/query_string_input.tsx rename to src/plugins/unified_search/public/query_string_input/query_string_input.tsx index 6464f02dd7cb7..1a075812ac207 100644 --- a/src/plugins/data/public/ui/query_string_input/query_string_input.tsx +++ b/src/plugins/unified_search/public/query_string_input/query_string_input.tsx @@ -10,6 +10,7 @@ import React, { PureComponent } from 'react'; import { i18n } from '@kbn/i18n'; import classNames from 'classnames'; +import { METRIC_TYPE } from '@kbn/analytics'; import { EuiButton, @@ -26,21 +27,27 @@ import { } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { compact, debounce, isEqual, isFunction } from 'lodash'; -import { Toast } from 'src/core/public'; -import { METRIC_TYPE } from '@kbn/analytics'; - -import { IDataPluginServices, IIndexPattern, Query } from '../..'; -import { QuerySuggestion, QuerySuggestionTypes } from '../../autocomplete'; -import { KibanaReactContextValue, toMountPoint } from '../../../../kibana_react/public'; +import { Toast } from '../../../../core/public'; +import { + IDataPluginServices, + IIndexPattern, + Query, + QuerySuggestion, + QuerySuggestionTypes, + getQueryLog, +} from '../../../data/public'; +import { matchPairs } from './match_pairs'; +import { toUser } from './to_user'; +import { fromUser } from './from_user'; +import type { PersistedLog } from '../../../data/public'; +import { getFieldSubtypeNested, KIBANA_USER_QUERY_LANGUAGE_KEY } from '../../../data/common'; +import { KibanaReactContextValue, toMountPoint } from '../../../kibana_react/public'; import { fetchIndexPatterns } from './fetch_index_patterns'; import { QueryLanguageSwitcher } from './language_switcher'; -import { getQueryLog, matchPairs, toUser, fromUser } from '../../query'; -import type { PersistedLog } from '../../query'; import type { SuggestionsListSize } from '../typeahead/suggestions_component'; -import { SuggestionsComponent } from '..'; -import { getFieldSubtypeNested, KIBANA_USER_QUERY_LANGUAGE_KEY } from '../../../common'; +import { SuggestionsComponent } from '../typeahead'; import { onRaf } from '../utils'; -import { getTheme } from '../../services'; +import { getTheme } from '../services'; export interface QueryStringInputProps { indexPatterns: Array; @@ -455,14 +462,14 @@ export default class QueryStringInputUI extends PureComponent { if (notifications && docLinks) { const toast = notifications.toasts.add({ - title: i18n.translate('data.query.queryBar.KQLNestedQuerySyntaxInfoTitle', { + title: i18n.translate('unifiedSearch.query.queryBar.KQLNestedQuerySyntaxInfoTitle', { defaultMessage: 'KQL nested query syntax', }), text: toMountPoint(

{ link: ( @@ -482,7 +489,7 @@ export default class QueryStringInputUI extends PureComponent { onKQLNestedQuerySyntaxInfoOptOut(toast)}> @@ -705,7 +712,7 @@ export default class QueryStringInputUI extends PureComponent {

{ { inputRef={this.assignInputRef} autoComplete="off" spellCheck={false} - aria-label={i18n.translate('data.query.queryBar.searchInputAriaLabel', { + aria-label={i18n.translate('unifiedSearch.query.queryBar.searchInputAriaLabel', { defaultMessage: 'Start typing to search and filter the {pageType} page', values: { pageType: this.services.appName }, })} @@ -769,7 +776,7 @@ export default class QueryStringInputUI extends PureComponent {