From 277c76a97986dcf5bc17be7e8df1441d71fbf916 Mon Sep 17 00:00:00 2001 From: PhilippeOberti Date: Mon, 13 Oct 2025 09:58:37 -0500 Subject: [PATCH] [Security Solution] remove newDataViewPickerEnabled feature flag --- .../styled_components_files.js | 3 - .../translations/translations/de-DE.json | 49 -- .../translations/translations/fr-FR.json | 49 -- .../translations/translations/ja-JP.json | 49 -- .../translations/translations/zh-CN.json | 49 -- .../common/experimental_features.ts | 3 - .../top_values_popover/top_values_popover.tsx | 18 +- .../app/home/global_header/index.test.tsx | 32 +- .../public/app/home/global_header/index.tsx | 20 +- .../public/app/home/index.tsx | 22 +- .../assistant/send_to_timeline/index.tsx | 10 +- .../public/attack_discovery/pages/index.tsx | 9 +- .../tabs/alerts_tab/ease/table.tsx | 2 +- .../alert_selection_query/index.test.tsx | 10 - .../alert_selection_query/index.tsx | 30 +- .../alert_selection/index.test.tsx | 12 +- .../preview_tab/index.test.tsx | 10 - .../hooks/use_schedule_view.test.tsx | 10 - .../hooks/use_settings_view.test.tsx | 12 +- .../hooks/use_settings_view.tsx | 10 +- .../pages/settings_flyout/index.test.tsx | 10 - .../schedule/create_flyout/index.test.tsx | 10 - .../schedule/create_flyout/index.tsx | 18 +- .../definition/filters.test.tsx | 9 - .../details_flyout/definition/filters.tsx | 29 +- .../details_flyout/definition/index.test.tsx | 9 - .../schedule/details_flyout/index.test.tsx | 10 - .../schedule/details_flyout/index.tsx | 10 +- .../schedule/edit_form/edit_form.test.tsx | 10 - .../schedule/utils/convert_form_data.test.ts | 2 - .../schedule/utils/convert_form_data.ts | 4 +- .../public/cases/components/ease/table.tsx | 2 +- .../cases/pages/use_fetch_alert_data.ts | 11 +- .../components/cell_actions/index.test.tsx | 20 +- .../common/components/cell_actions/index.tsx | 17 +- .../events_tab/events_query_tab_body.tsx | 7 +- .../components/events_viewer/index.test.tsx | 2 +- .../common/components/events_viewer/index.tsx | 69 +- .../common/components/inspect/modal.tsx | 11 +- .../markdown_editor/plugins/insight/index.tsx | 22 +- .../plugins/insight/use_insight_query.ts | 38 +- .../components/matrix_histogram/index.tsx | 6 +- .../common/components/search_bar/index.tsx | 34 +- .../components/sessions_viewer/index.tsx | 2 +- .../common/components/tables/helpers.test.tsx | 8 +- .../public/common/components/top_n/index.tsx | 7 +- .../common/components/top_n/top_n.test.tsx | 3 +- .../public/common/components/top_n/top_n.tsx | 5 +- .../alerts/alerts_by_status_donut.test.ts | 9 - .../common/alerts/alerts_histogram.test.ts | 9 - .../common/alerts/alerts_table.test.ts | 9 - .../common/alerts/rule_preview.test.ts | 9 - .../common/authentication.test.ts | 9 - .../lens_attributes/common/event.test.ts | 9 - .../common/external_alert.test.ts | 9 - .../hosts/kpi_host_area.test.ts | 9 - .../hosts/kpi_host_metric.test.ts | 9 - .../hosts/kpi_unique_ips_area.test.ts | 9 - .../hosts/kpi_unique_ips_bar.test.ts | 9 - .../kpi_unique_ips_destination_metric.test.ts | 9 - .../kpi_unique_ips_source_metric.test.ts | 9 - .../network/dns_top_domains.test.ts | 9 - .../network/kpi_dns_queries.test.ts | 9 - .../network/kpi_network_events.test.ts | 9 - .../network/kpi_tls_handshakes.test.ts | 9 - .../network/kpi_unique_flow_ids.test.ts | 9 - .../kpi_unique_private_ips_area.test.ts | 9 - .../kpi_unique_private_ips_bar.test.ts | 9 - ...que_private_ips_destination_metric.test.ts | 9 - ...i_unique_private_ips_source_metric.test.ts | 9 - .../users/kpi_total_users_area.test.ts | 9 - .../users/kpi_total_users_metric.test.ts | 9 - ...user_authentication_metric_failure.test.ts | 9 - .../kpi_user_authentications_area.test.ts | 9 - .../kpi_user_authentications_bar.test.ts | 9 - ...ser_authentications_metric_success.test.ts | 9 - .../use_lens_attributes.test.tsx | 36 +- .../use_lens_attributes.tsx | 36 +- .../visualization_embeddable.tsx | 10 +- .../timeline/use_investigate_in_timeline.ts | 50 +- .../public/common/hooks/use_get_field_spec.ts | 30 - .../common/lib/kibana/kibana_react.mock.ts | 9 +- .../public/common/lib/kuery/index.test.ts | 28 - .../public/common/lib/kuery/index.ts | 23 +- .../public/common/store/reducer.test.tsx | 123 ---- .../public/common/store/store.ts | 9 +- .../utils/timeline/use_show_timeline.test.tsx | 13 - .../timeline/use_show_timeline_for_path.ts | 4 +- .../public/dashboards/pages/details/index.tsx | 11 +- .../hooks/use_browser_fields.test.ts | 45 -- .../hooks/use_browser_fields.ts | 22 +- .../hooks/use_data_view.test.ts | 16 - .../data_view_manager/hooks/use_data_view.ts | 41 +- .../hooks/use_data_view_logger.ts | 15 - .../hooks/use_init_data_view_manager.ts | 45 +- .../hooks/use_sync_url_state.test.ts | 84 +-- .../hooks/use_sync_url_state.ts | 78 +- .../listeners/data_view_selected.test.ts | 6 - .../redux/listeners/data_view_selected.ts | 38 - .../redux/listeners/init_listener.test.ts | 3 - .../redux/listeners/init_listener.ts | 32 - .../rule_preview/preview_histogram.tsx | 2 +- .../step_define_rule.test.tsx | 9 - .../use_filter_by_execution_id.tsx | 26 +- .../pages/rule_details/index.tsx | 23 +- .../components/alert_summary/table/table.tsx | 7 +- .../alert_summary/table/table_section.tsx | 2 - .../components/alerts/content.test.tsx | 19 +- .../detections/components/alerts/content.tsx | 164 ++--- .../alerts/filters/filters_section.tsx | 4 +- .../alerts/filters/page_filters.tsx | 13 +- .../alerts/kpis/kpis_section.test.tsx | 10 +- .../components/alerts/kpis/kpis_section.tsx | 157 ++-- .../search_bar/search_bar_section.test.tsx | 7 +- .../alerts/search_bar/search_bar_section.tsx | 35 +- .../alerts/table/table_section.test.tsx | 32 +- .../components/alerts/table/table_section.tsx | 10 +- .../components/alerts/wrapper.test.tsx | 252 ++----- .../detections/components/alerts/wrapper.tsx | 52 +- .../alerts_kpis/chart_panels/index.test.tsx | 10 - .../alerts_kpis/common/hooks.test.tsx | 19 - .../components/alerts_kpis/common/hooks.ts | 9 +- .../additional_toolbar_controls.test.tsx | 15 - .../additional_toolbar_controls.tsx | 15 +- .../alerts_table/alerts_grouping.test.tsx | 17 +- .../alerts_table/alerts_grouping.tsx | 39 +- .../alerts_table/alerts_sub_grouping.test.tsx | 13 - .../alerts_table/alerts_sub_grouping.tsx | 22 +- .../components/alerts_table/index.tsx | 35 +- .../use_add_bulk_to_timeline.test.tsx | 8 - .../use_add_bulk_to_timeline.tsx | 51 +- .../attacks/schedule_flyout/index.test.tsx | 10 - .../attacks/table/table_section.test.tsx | 7 +- .../attacks/table/table_section.tsx | 9 +- .../components/attacks/wrapper.test.tsx | 185 +++-- .../detections/components/attacks/wrapper.tsx | 21 +- .../components/user_info/index.test.tsx | 5 +- .../cell_value_context.tsx | 9 +- .../render_cell_value.test.tsx | 9 - .../alerts/use_signal_index.test.tsx | 5 +- .../alerts/use_signal_index.tsx | 24 +- .../use_cell_actions.tsx | 18 +- .../hooks/use_rule_from_timeline.test.ts | 22 - .../hooks/use_rule_from_timeline.tsx | 49 +- .../account_switches_tile.tsx | 6 +- .../authentications_tile.tsx | 6 +- .../granted_rights_tile.tsx | 6 +- .../components/key_insights_panel/index.tsx | 12 +- .../privileged_user_activity/index.test.tsx | 14 +- .../privileged_user_activity/index.tsx | 8 +- .../privileged_user_monitoring/index.tsx | 8 +- .../alert_filters_kql_bar.test.tsx | 79 +- .../alert_filters_kql_bar.tsx | 36 +- .../risk_score_preview_section.tsx | 11 +- .../index.tsx | 8 +- .../lens_attributes/risk_score_donut.test.ts | 9 - .../risk_score_over_time_area.test.ts | 9 - .../risk_score_summary.test.ts | 9 - .../pages/entity_analytics_dashboard.test.tsx | 52 +- .../pages/entity_analytics_dashboard.tsx | 30 +- .../pages/entity_analytics_home_page.test.tsx | 36 +- .../pages/entity_analytics_home_page.tsx | 32 +- ...lytics_privileged_user_monitoring_page.tsx | 63 +- .../stat_items/metric_embeddable.tsx | 88 ++- .../components/stat_items/stat_items.tsx | 8 +- .../explore/hosts/pages/details/index.tsx | 71 +- .../public/explore/hosts/pages/hosts.test.tsx | 25 +- .../public/explore/hosts/pages/hosts.tsx | 40 +- .../embeddables/embedded_map.test.tsx | 223 ++---- .../components/embeddables/embedded_map.tsx | 133 +--- .../map_tool_tip/point_tool_tip_content.tsx | 7 +- .../field_renderers/field_renderers.test.tsx | 2 - .../__snapshots__/index.test.tsx.snap | 2 + .../network/pages/details/index.test.tsx | 22 - .../explore/network/pages/details/index.tsx | 53 +- .../pages/navigation/dns_query_tab_body.tsx | 6 +- .../explore/network/pages/network.test.tsx | 36 +- .../public/explore/network/pages/network.tsx | 34 +- .../explore/users/pages/details/index.tsx | 73 +- .../authentications_query_tab_body.tsx | 4 +- .../public/explore/users/pages/users.tsx | 42 +- .../explore/users/pages/users_tabs.test.tsx | 12 - .../left/components/analyze_graph.test.tsx | 294 +++----- .../left/components/analyze_graph.tsx | 40 +- .../components/correlations_details.test.tsx | 1 + .../left/components/entities_details.test.tsx | 6 - .../components/graph_visualization.test.tsx | 10 +- .../left/components/host_details.test.tsx | 6 - .../left/components/host_details.tsx | 25 +- .../left/components/session_view.test.tsx | 10 - .../left/components/user_details.test.tsx | 6 - .../left/components/user_details.tsx | 26 +- .../components/entities_overview.test.tsx | 8 - .../components/host_entity_overview.test.tsx | 16 +- .../right/components/host_entity_overview.tsx | 11 +- .../components/insights_section.test.tsx | 10 - .../components/user_entity_overview.test.tsx | 8 - .../right/components/user_entity_overview.tsx | 10 +- .../visualizations_section.test.tsx | 2 - .../shared/hooks/use_event_details.test.tsx | 7 - .../shared/hooks/use_event_details.ts | 17 +- .../host_right/hooks/use_observed_host.ts | 26 +- .../hooks/use_observed_service.ts | 17 +- .../user_right/hooks/use_observed_user.ts | 20 +- .../hooks/use_data_view_setup.ts | 33 +- .../rule_based_source_input.tsx | 11 +- .../components/network_details.tsx | 29 +- .../components/graph_visualization.test.tsx | 9 - .../shared/components/graph_visualization.tsx | 14 +- .../public/flyout_v2/analyzer/index.tsx | 9 +- .../components/related_alerts_by_ancestry.tsx | 13 +- .../analyzer_preview_container.test.tsx | 17 - .../components/analyzer_preview_container.tsx | 9 +- .../components/correlations_overview.test.tsx | 2 - .../components/related_alerts_by_ancestry.tsx | 13 +- .../visualizations_section.test.tsx | 3 - ...lert_prevalence_from_process_tree.test.tsx | 2 - .../use_alert_prevalence_from_process_tree.ts | 15 +- .../hooks/use_fetch_prevalence.test.tsx | 10 +- .../prevalence/hooks/use_fetch_prevalence.ts | 13 +- .../public/kubernetes/pages/index.tsx | 32 +- .../utils/data_view_spec_to_index_pattern.ts | 15 - .../components/open_flyout_button.test.tsx | 4 - .../notes/components/open_flyout_button.tsx | 11 +- .../index.test.tsx | 5 +- .../index.tsx | 8 +- .../host_alerts_table.test.tsx | 2 - .../components/event_counts/index.tsx | 10 +- .../components/events_by_dataset/index.tsx | 9 +- .../overview/pages/data_quality.test.tsx | 39 +- .../public/overview/pages/data_quality.tsx | 30 +- .../pages/detection_response.test.tsx | 23 +- .../overview/pages/detection_response.tsx | 34 +- .../public/overview/pages/overview.test.tsx | 72 +- .../public/overview/pages/overview.tsx | 35 +- .../public/plugin_services.ts | 2 +- .../public/reports/pages/ai_value.test.tsx | 64 +- .../public/reports/pages/ai_value.tsx | 32 +- .../public/reports/pages/translations.ts | 15 + .../controls/sourcerer_selection.test.tsx | 17 +- .../view/controls/sourcerer_selection.tsx | 10 +- .../components/alerts_sourcerer.test.tsx | 133 ---- .../public/sourcerer/components/helpers.tsx | 169 ----- .../sourcerer/components/index.test.tsx | 678 ------------------ .../public/sourcerer/components/index.tsx | 473 ------------ .../public/sourcerer/components/misc.test.tsx | 539 -------------- .../public/sourcerer/components/readme.md | 53 -- .../sourcerer/components/refresh_button.tsx | 28 - .../components/sourcerer_integration.test.tsx | 143 ---- .../sourcerer/components/sub_components.tsx | 96 --- .../public/sourcerer/components/temporary.tsx | 231 ------ .../components/timeline_sourcerer.test.tsx | 170 ----- .../sourcerer/components/translations.ts | 224 ------ .../public/sourcerer/components/trigger.tsx | 127 ---- .../update_default_data_view_modal.tsx | 93 --- .../use_get_sourcerer_data_view.test.ts | 60 -- .../use_get_sourcerer_data_view.tsx | 43 -- .../components/use_pick_index_patterns.tsx | 264 ------- .../components/use_update_data_view.test.tsx | 87 --- .../components/use_update_data_view.tsx | 72 -- .../public/sourcerer/components/utils.tsx | 207 ------ .../get_sourcerer_data_view.test.ts | 57 -- .../sourcerer/containers/hooks.test.tsx | 558 -------------- .../public/sourcerer/containers/index.tsx | 142 ---- .../sourcerer/containers/sourcerer_paths.ts | 11 +- .../containers/use_init_sourcerer.tsx | 281 -------- .../containers/use_signal_helpers.test.tsx | 103 --- .../containers/use_signal_helpers.tsx | 44 +- .../public/sourcerer/store/actions.ts | 9 - .../public/sourcerer/store/helpers.test.ts | 378 ---------- .../public/sourcerer/store/reducer.ts | 35 - .../public/sourcerer/store/selectors.ts | 36 - .../indicators/hooks/use_ti_data_view.ts | 56 +- .../modules/indicators/pages/indicators.tsx | 8 +- .../default_renderer/index.test.tsx | 2 - .../more_container/index.test.tsx | 2 - .../components/fields_browser/index.tsx | 92 +-- .../actions/new_timeline_button.test.tsx | 14 +- .../actions/open_timeline_button.test.tsx | 7 - .../components/modal/header/index.test.tsx | 19 - .../components/modal/header/index.tsx | 27 +- .../components/new_timeline/index.test.tsx | 15 +- .../components/open_timeline/index.tsx | 23 +- .../open_timeline/note_previews/index.tsx | 11 +- .../open_timeline/use_update_timeline.tsx | 29 +- .../body/unified_timeline_body.test.tsx | 25 +- .../timeline/body/unified_timeline_body.tsx | 10 +- .../timeline/data_providers/index.tsx | 12 +- .../components/timeline/index.test.tsx | 14 +- .../timelines/components/timeline/index.tsx | 30 +- .../components/timeline/kpi/kpi_container.tsx | 38 +- .../timeline/query_bar/eql/index.tsx | 36 +- .../components/timeline/query_bar/index.tsx | 33 +- .../timeline/search_or_filter/index.tsx | 58 +- .../search_or_filter/search_or_filter.tsx | 9 +- .../timeline/tabs/eql/header/index.test.tsx | 12 +- .../timeline/tabs/eql/header/index.tsx | 17 +- .../timeline/tabs/eql/index.test.tsx | 5 - .../components/timeline/tabs/eql/index.tsx | 40 +- .../components/timeline/tabs/esql/index.tsx | 25 +- .../timeline/tabs/pinned/index.test.tsx | 6 - .../components/timeline/tabs/pinned/index.tsx | 35 +- .../timeline/tabs/query/events_count.tsx | 57 +- .../timeline/tabs/query/index.test.tsx | 8 - .../components/timeline/tabs/query/index.tsx | 71 +- .../tabs/shared/use_timeline_columns.tsx | 8 +- .../data_table/index.test.tsx | 11 +- .../unified_components/index.test.tsx | 8 - .../hooks/use_create_timeline.test.tsx | 25 +- .../timelines/hooks/use_create_timeline.tsx | 27 +- .../timelines/pages/timelines_page.test.tsx | 16 - .../public/timelines/pages/timelines_page.tsx | 11 +- .../store/middlewares/timeline_save.test.ts | 43 +- .../store/middlewares/timeline_save.ts | 38 +- .../plugins/security_solution/public/types.ts | 12 +- 315 files changed, 1439 insertions(+), 11015 deletions(-) delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/hooks/use_get_field_spec.ts delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/store/reducer.test.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view_logger.ts delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/kubernetes/pages/utils/data_view_spec_to_index_pattern.ts delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/alerts_sourcerer.test.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/helpers.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/index.test.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/index.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/misc.test.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/readme.md delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/refresh_button.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/sourcerer_integration.test.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/sub_components.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/temporary.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/timeline_sourcerer.test.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/translations.ts delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/trigger.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/update_default_data_view_modal.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/use_get_sourcerer_data_view.test.ts delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/use_get_sourcerer_data_view.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/use_pick_index_patterns.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/use_update_data_view.test.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/use_update_data_view.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/components/utils.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/containers/get_sourcerer_data_view.test.ts delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/containers/hooks.test.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/containers/index.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/containers/use_init_sourcerer.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/containers/use_signal_helpers.test.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/sourcerer/store/helpers.test.ts diff --git a/packages/kbn-babel-preset/styled_components_files.js b/packages/kbn-babel-preset/styled_components_files.js index c1499fd2dffba..fb3c94bf3a6a5 100644 --- a/packages/kbn-babel-preset/styled_components_files.js +++ b/packages/kbn-babel-preset/styled_components_files.js @@ -355,9 +355,6 @@ module.exports = { /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]resolver[\/\\]view[\/\\]resolver_no_process_events.tsx/, /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]resolver[\/\\]view[\/\\]styles.tsx/, /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]resolver[\/\\]view[\/\\]symbol_definitions.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]sourcerer[\/\\]components[\/\\]helpers.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]sourcerer[\/\\]components[\/\\]refresh_button.tsx/, - /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]sourcerer[\/\\]components[\/\\]update_default_data_view_modal.tsx/, /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]timelines[\/\\]components[\/\\]certificate_fingerprint[\/\\]index.tsx/, /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]timelines[\/\\]components[\/\\]edit_data_provider[\/\\]index.tsx/, /x-pack[\/\\]solutions[\/\\]security[\/\\]plugins[\/\\]security_solution[\/\\]public[\/\\]timelines[\/\\]components[\/\\]fields_browser[\/\\]create_field_button[\/\\]index.tsx/, diff --git a/x-pack/platform/plugins/private/translations/translations/de-DE.json b/x-pack/platform/plugins/private/translations/translations/de-DE.json index 3d44a4e580398..4d75855c69dbd 100644 --- a/x-pack/platform/plugins/private/translations/translations/de-DE.json +++ b/x-pack/platform/plugins/private/translations/translations/de-DE.json @@ -40676,52 +40676,6 @@ "xpack.securitySolution.hoverActions.viewDetailsAriaLabel": "Details anzeigen", "xpack.securitySolution.hoverActions.viewDetailsForRowAriaLabel": "Zeigen Sie Details zum Alert oder Ereignis in Zeile {ariaRowindex} an, mit Spalten {columnValues}", "xpack.securitySolution.indexFieldsSearch.errorSearchDescription": "Beim Erstellen der Ad-hoc-Datenansicht ist ein Fehler aufgetreten", - "xpack.securitySolution.indexPatterns.add": "Indexmuster hinzufügen", - "xpack.securitySolution.indexPatterns.advancedOptionsTitle": "Erweiterte Optionen", - "xpack.securitySolution.indexPatterns.alertsBadgeTitle": "Alerts", - "xpack.securitySolution.indexPatterns.callOutDeprecxatedTemplateTitle": "Diese Zeitleistenvorlage verwendet einen älteren Selektor für die Ansicht von Legacy-Daten", - "xpack.securitySolution.indexPatterns.callOutDeprecxatedTitle": "Diese Zeitachse verwendet einen Selektor für die Ansicht von Legacy-Daten", - "xpack.securitySolution.indexPatterns.callOutMissingPatternsTemplateTitle": "Diese Zeitleistenvorlage ist nicht mehr aktuell mit der Security-Datenansicht", - "xpack.securitySolution.indexPatterns.callOutMissingPatternsTitle": "Diese Zeitleiste ist mit der Security-Datenansicht veraltet.", - "xpack.securitySolution.indexPatterns.callOutTimelineTitle": "Die Datenansicht kann nicht geändert werden, wenn „Nur Erkennungswarnungen anzeigen“ ausgewählt ist.", - "xpack.securitySolution.indexPatterns.callOutTitle": "Die Datenansicht kann auf dieser Seite nicht verändert werden", - "xpack.securitySolution.indexPatterns.chooseDataViewLabel": "Wählen Sie die Datenansicht", - "xpack.securitySolution.indexPatterns.closeButton": "Schließen", - "xpack.securitySolution.indexPatterns.continue": "Fortfahren, ohne hinzuzufügen", - "xpack.securitySolution.indexPatterns.dataViewLabel": "Data View", - "xpack.securitySolution.indexPatterns.descriptionsLabel": "Dies sind die derzeit ausgewählten Indexmuster. Das Herausfiltern von Indexmustern aus Ihrer Datenansicht kann die Gesamtleistung verbessern.", - "xpack.securitySolution.indexPatterns.failureToastText": "Beim Update ist ein unerwarteter Fehler aufgetreten. Wenn Sie Ihre Daten ändern möchten, können Sie manuell eine Datenansicht {link} auswählen.", - "xpack.securitySolution.indexPatterns.failureToastTitle": "Datenansicht kann nicht aktualisiert werden", - "xpack.securitySolution.indexPatterns.inactive": "Inaktive Index-Muster", - "xpack.securitySolution.indexPatterns.indexPatternsLabel": "Indexmuster", - "xpack.securitySolution.indexPatterns.missingPatterns": "Die Security-Datenansicht fehlt die folgenden Indexmuster, um die Datenansicht der vorherigen Zeitleiste neu zu erstellen: {callout}", - "xpack.securitySolution.indexPatterns.missingPatterns.callout": "In der Security Datenansicht fehlen die folgenden Indexmuster: {callout}", - "xpack.securitySolution.indexPatterns.missingPatterns.timeline.description": "Wir haben Ihre Zeitleiste durch die Erstellung einer temporären Datenansicht gesichert. Wenn Sie Ihre Daten ändern möchten, können wir die fehlenden Indexmuster zur Security-Datenansicht hinzufügen. Sie können auch manuell eine Datenansicht {link} auswählen.", - "xpack.securitySolution.indexPatterns.missingPatterns.timelineTemplate.description": "Wir haben Ihre Zeitleistenvorlage durch die Erstellung einer temporären Datenansicht erhalten. Wenn Sie Ihre Daten ändern möchten, können wir die fehlenden Indexmuster zur Security-Datenansicht hinzufügen. Sie können auch manuell eine Datenansicht {link} auswählen.", - "xpack.securitySolution.indexPatterns.modifiedBadgeTitle": "Geändert", - "xpack.securitySolution.indexPatterns.noData": "Das Indexmuster auf dieser Zeitleiste stimmt mit keinem Datenstrom, keinem Index oder keinem Indexalias überein.", - "xpack.securitySolution.indexPatterns.onlyDetectionAlertsLabel": "Nur Erkennungswarnungen anzeigen", - "xpack.securitySolution.indexPatterns.pickIndexPatternsCombo": "Indexmuster auswählen", - "xpack.securitySolution.indexPatterns.reloadPageTitle": "Seite neu laden", - "xpack.securitySolution.indexPatterns.resetButton": "Zurücksetzen", - "xpack.securitySolution.indexPatterns.save": "Speichern", - "xpack.securitySolution.indexPatterns.securityDataViewLabel": "Sicherheitsdaten-Ansicht", - "xpack.securitySolution.indexPatterns.securityDefaultDataViewLabel": "Security-Standarddatenansicht", - "xpack.securitySolution.indexPatterns.selectDataView": "Datenansichtsauswahl", - "xpack.securitySolution.indexPatterns.successToastTitle": "Eine oder mehrere Einstellungen erfordern, dass Sie die Seite neu laden, damit sie wirksam werden.", - "xpack.securitySolution.indexPatterns.timeline.currentPatterns": "Die aktiven Indexmuster in dieser Zeitleiste sind{tooltip}: {callout}", - "xpack.securitySolution.indexPatterns.timeline.currentPatternsBad": "Die aktuellen Indexmuster in dieser Zeitleiste sind: {callout}", - "xpack.securitySolution.indexPatterns.timeline.noMatchData": "Die folgenden Indexmuster sind in dieser Timeline gespeichert, stimmen jedoch mit keinen Datenströmen, Indizes oder Index-Aliases überein: {aliases}", - "xpack.securitySolution.indexPatterns.timeline.toggleToNewSourcerer": "Wir haben Ihre Timeline durch die Erstellung einer temporären Datenansicht gesichert. Wenn Sie Ihre Daten ändern möchten, können wir Ihre temporäre Datenansicht mit der neuen Datenansichtsauswahl neu erstellen. Sie können auch manuell eine Datenansicht {link} auswählen.", - "xpack.securitySolution.indexPatterns.timelineTemplate.currentPatterns": "Die aktiven Indexmuster in dieser Timeline-Vorlage sind{tooltip}: {callout}.", - "xpack.securitySolution.indexPatterns.timelineTemplate.currentPatternsBad": "Die aktuellen Indexmuster in dieser Timeline-Vorlage sind: {callout}.", - "xpack.securitySolution.indexPatterns.timelineTemplate.noMatchData": "Die folgenden Indexmuster sind in dieser Timeline-Vorlage gespeichert, stimmen jedoch mit keinen Datenströmen, Indizes oder Index-Aliasen überein: {aliases}", - "xpack.securitySolution.indexPatterns.timelineTemplate.toggleToNewSourcerer": "Wir haben Ihre Zeitleistenvorlage durch das Erstellen einer temporären Datenansicht beibehalten. Wenn Sie Ihre Daten ändern möchten, können wir Ihre temporäre Datenansicht mit dem neuen Datenansicht-Selektor neu erstellen. Sie können auch manuell eine Datenansicht {link} auswählen.", - "xpack.securitySolution.indexPatterns.toggleToNewSourcerer.link": "hier", - "xpack.securitySolution.indexPatterns.update": "Datenansicht aktualisieren und neu erstellen", - "xpack.securitySolution.indexPatterns.updateAvailableBadgeTitle": "Update verfügbar", - "xpack.securitySolution.indexPatterns.updateDataView": "Möchten Sie dieses Indexmuster zur Security-Datenansicht hinzufügen? Andernfalls können wir die Datenansicht ohne die fehlenden Indexmuster neu erstellen.", - "xpack.securitySolution.indexPatterns.updateSecurityDataView": "Security-Datenansicht aktualisieren", "xpack.securitySolution.inputCapture.ariaPlaceHolder": "Geben Sie einen Befehl ein", "xpack.securitySolution.insights.alertCountTitle": "Alerts:", "xpack.securitySolution.insights.misconfigurationsTitle": "Fehlkonfigurationen:", @@ -42333,11 +42287,8 @@ "xpack.securitySolution.socTrends.properties.unlockDatePickerTooltip": "Synchronisierung des Datums-/Zeitbereichs zwischen der aktuell angezeigten Seite und SOC-Trends aktivieren", "xpack.securitySolution.some_page.flyoutCreateSubmitSuccess": "„{name}“ wurde hinzugefügt.", "xpack.securitySolution.source.destination.packetsLabel": "Pkte", - "xpack.securitySolution.sourcerer.disabled": "Die Aktualisierungen der Datenansicht erfordern ein Neuladen der Seite, um wirksam zu werden.", "xpack.securitySolution.sourcerer.error.title": "Fehler beim Aktualisieren der Security-Datenansicht", "xpack.securitySolution.sourcerer.error.toastMessage": "Aktualisieren Sie die Seite", - "xpack.securitySolution.sourcerer.permissions.title": "Schreibrolle zum Generieren von Daten erforderlich", - "xpack.securitySolution.sourcerer.permissions.toastMessage": "Benutzer mit Schreibrechten müssen auf die Elastic Security App zugreifen, um die App-Daten zu initialisieren.", "xpack.securitySolution.stepDefineRule.lastDay": "Letzter Tag", "xpack.securitySolution.stepDefineRule.lastHour": "Letzte Stunde", "xpack.securitySolution.stepDefineRule.lastMonth": "Vergangener Monat", diff --git a/x-pack/platform/plugins/private/translations/translations/fr-FR.json b/x-pack/platform/plugins/private/translations/translations/fr-FR.json index 1335e6d892c56..fb1b46f09740a 100644 --- a/x-pack/platform/plugins/private/translations/translations/fr-FR.json +++ b/x-pack/platform/plugins/private/translations/translations/fr-FR.json @@ -40708,52 +40708,6 @@ "xpack.securitySolution.hoverActions.viewDetailsAriaLabel": "Afficher les détails", "xpack.securitySolution.hoverActions.viewDetailsForRowAriaLabel": "Afficher les détails pour l'alerte ou l'événement de la ligne {ariaRowindex}, avec les colonnes {columnValues}", "xpack.securitySolution.indexFieldsSearch.errorSearchDescription": "Une erreur est survenue lors de la création de la vue de données ad hoc", - "xpack.securitySolution.indexPatterns.add": "Ajouter un modèle d'indexation", - "xpack.securitySolution.indexPatterns.advancedOptionsTitle": "Options avancées", - "xpack.securitySolution.indexPatterns.alertsBadgeTitle": "Alertes", - "xpack.securitySolution.indexPatterns.callOutDeprecxatedTemplateTitle": "Ce modèle de chronologie utilise un sélecteur de vue de données existant", - "xpack.securitySolution.indexPatterns.callOutDeprecxatedTitle": "Cette chronologie utilise un sélecteur de vue de données existant", - "xpack.securitySolution.indexPatterns.callOutMissingPatternsTemplateTitle": "Ce modèle de chronologie n'est pas à jour avec la vue de données Security", - "xpack.securitySolution.indexPatterns.callOutMissingPatternsTitle": "Cette chronologie n'est pas à jour avec la vue de données Security", - "xpack.securitySolution.indexPatterns.callOutTimelineTitle": "La vue de données ne peut pas être modifiée lorsque l'option Afficher uniquement les alertes de détection est sélectionnée", - "xpack.securitySolution.indexPatterns.callOutTitle": "La vue de données ne peut pas être modifiée sur cette page", - "xpack.securitySolution.indexPatterns.chooseDataViewLabel": "Choisir une vue de données", - "xpack.securitySolution.indexPatterns.closeButton": "Fermer", - "xpack.securitySolution.indexPatterns.continue": "Continuer sans ajouter", - "xpack.securitySolution.indexPatterns.dataViewLabel": "Vue de données", - "xpack.securitySolution.indexPatterns.descriptionsLabel": "Il s'agit des modèles d'indexation actuellement sélectionnés. Le filtrage des modèles d'indexation à partir de votre vue de données peut améliorer les performances globales.", - "xpack.securitySolution.indexPatterns.failureToastText": "Une erreur inattendue s'est produite lors de la mise à jour. Si vous souhaitez modifier vos données, vous pouvez sélectionner manuellement une vue de données {link}.", - "xpack.securitySolution.indexPatterns.failureToastTitle": "Impossible de mettre à jour la vue de données", - "xpack.securitySolution.indexPatterns.inactive": "Modèles d'indexation inactifs", - "xpack.securitySolution.indexPatterns.indexPatternsLabel": "Modèles d'indexation", - "xpack.securitySolution.indexPatterns.missingPatterns": "La vue de données Security ne contient pas les modèles d'indexation suivants nécessaires pour recréer la vue de données de la chronologie précédente : {callout}", - "xpack.securitySolution.indexPatterns.missingPatterns.callout": "La vue de données Security ne contient pas les modèles d'indexation suivants : {callout}", - "xpack.securitySolution.indexPatterns.missingPatterns.timeline.description": "Nous avons préservé votre chronologie en créant une vue de données temporaires. Si vous souhaitez modifier vos données, nous pouvons ajouter les modèles d'indexation manquants à la vue de données Security. Vous pouvez également sélectionner manuellement une vue de données {link}.", - "xpack.securitySolution.indexPatterns.missingPatterns.timelineTemplate.description": "Nous avons conservé votre modèle de chronologie en créant une vue de données temporaires. Si vous souhaitez modifier vos données, nous pouvons ajouter les modèles d'indexation manquants à la vue de données Security. Vous pouvez également sélectionner manuellement une vue de données {link}.", - "xpack.securitySolution.indexPatterns.modifiedBadgeTitle": "Modifié", - "xpack.securitySolution.indexPatterns.noData": "Le modèle d'indexation de cette chronologie ne correspond à aucun flux de données, index ni alias d'index.", - "xpack.securitySolution.indexPatterns.onlyDetectionAlertsLabel": "Afficher uniquement les alertes de détection", - "xpack.securitySolution.indexPatterns.pickIndexPatternsCombo": "Choisir les modèles d'indexation", - "xpack.securitySolution.indexPatterns.reloadPageTitle": "Actualiser la page", - "xpack.securitySolution.indexPatterns.resetButton": "Réinitialiser", - "xpack.securitySolution.indexPatterns.save": "Enregistrer", - "xpack.securitySolution.indexPatterns.securityDataViewLabel": "Vue de données Security", - "xpack.securitySolution.indexPatterns.securityDefaultDataViewLabel": "Vue de données Security par défaut", - "xpack.securitySolution.indexPatterns.selectDataView": "Sélection de la vue de données", - "xpack.securitySolution.indexPatterns.successToastTitle": "Un ou plusieurs paramètres nécessitent l'actualisation de la page pour pouvoir prendre effet", - "xpack.securitySolution.indexPatterns.timeline.currentPatterns": "Les modèles d'indexation actifs de cette chronologie sont {tooltip} : {callout}", - "xpack.securitySolution.indexPatterns.timeline.currentPatternsBad": "Les modèles d'indexation actuels de cette chronologie sont : {callout}", - "xpack.securitySolution.indexPatterns.timeline.noMatchData": "Les modèles d'indexation suivants sont enregistrés dans cette chronologie, mais ils ne correspondent à aucun flux de données, index ni alias d'index : {aliases}", - "xpack.securitySolution.indexPatterns.timeline.toggleToNewSourcerer": "Nous avons préservé votre chronologie en créant une vue de données temporaires. Si vous souhaitez modifier vos données, nous pouvons recréer votre vue de données temporaires à l'aide du sélecteur de vue de nouvelles données. Vous pouvez également sélectionner manuellement une vue de données {link}.", - "xpack.securitySolution.indexPatterns.timelineTemplate.currentPatterns": "Les modèles d'indexation actifs de ce modèle de chronologie sont {tooltip} : {callout}", - "xpack.securitySolution.indexPatterns.timelineTemplate.currentPatternsBad": "Les modèles d'indexation actuels de ce modèle de chronologie sont : {callout}", - "xpack.securitySolution.indexPatterns.timelineTemplate.noMatchData": "Les modèles d'indexation suivants sont enregistrés dans ce modèle de chronologie, mais ils ne correspondent à aucun flux de données, index ni alias d'index : {aliases}", - "xpack.securitySolution.indexPatterns.timelineTemplate.toggleToNewSourcerer": "Nous avons conservé votre modèle de chronologie en créant une vue de données temporaires. Si vous souhaitez modifier vos données, nous pouvons recréer votre vue de données temporaires à l'aide du sélecteur de vue de nouvelles données. Vous pouvez également sélectionner manuellement une vue de données {link}.", - "xpack.securitySolution.indexPatterns.toggleToNewSourcerer.link": "ici", - "xpack.securitySolution.indexPatterns.update": "Mettre à jour et recréer la vue de données", - "xpack.securitySolution.indexPatterns.updateAvailableBadgeTitle": "Mise à jour disponible", - "xpack.securitySolution.indexPatterns.updateDataView": "Souhaitez-vous ajouter ce modèle d'indexation à la vue de données Security ? Sinon, nous pouvons recréer la vue de données sans les modèles d'indexation manquants.", - "xpack.securitySolution.indexPatterns.updateSecurityDataView": "Mettre à jour la vue de données Security", "xpack.securitySolution.inputCapture.ariaPlaceHolder": "Saisir une commande", "xpack.securitySolution.insights.alertCountTitle": "Alertes :", "xpack.securitySolution.insights.misconfigurationsTitle": "Configurations incorrectes :", @@ -42369,11 +42323,8 @@ "xpack.securitySolution.socTrends.properties.unlockDatePickerTooltip": "Activer la synchronisation de la plage de date/heure entre la page actuellement consultée et les tendances SOC", "xpack.securitySolution.some_page.flyoutCreateSubmitSuccess": "\"{name}\" a été ajouté.", "xpack.securitySolution.source.destination.packetsLabel": "pkts", - "xpack.securitySolution.sourcerer.disabled": "Les mises à jour apportées à la vue de données requièrent l'actualisation de la page pour pouvoir prendre effet.", "xpack.securitySolution.sourcerer.error.title": "Erreur lors de la mise à jour de la vue de données Security", "xpack.securitySolution.sourcerer.error.toastMessage": "Actualiser la page", - "xpack.securitySolution.sourcerer.permissions.title": "Rôle d'écriture requis pour générer les données", - "xpack.securitySolution.sourcerer.permissions.toastMessage": "Les utilisateurs disposant de l'autorisation d'écriture doivent accéder à l'application Elastic Security pour initialiser les données source de l'application.", "xpack.securitySolution.stepDefineRule.lastDay": "Dernier jour", "xpack.securitySolution.stepDefineRule.lastHour": "Dernière heure", "xpack.securitySolution.stepDefineRule.lastMonth": "Mois dernier", diff --git a/x-pack/platform/plugins/private/translations/translations/ja-JP.json b/x-pack/platform/plugins/private/translations/translations/ja-JP.json index 9a1ec3ce3495a..0636eedea224c 100644 --- a/x-pack/platform/plugins/private/translations/translations/ja-JP.json +++ b/x-pack/platform/plugins/private/translations/translations/ja-JP.json @@ -40847,52 +40847,6 @@ "xpack.securitySolution.hoverActions.viewDetailsAriaLabel": "詳細を表示", "xpack.securitySolution.hoverActions.viewDetailsForRowAriaLabel": "行 {ariaRowindex}、列 {columnValues} のアラートまたはイベントの詳細を表示", "xpack.securitySolution.indexFieldsSearch.errorSearchDescription": "アドホックデータビューの作成中にエラーが発生しました。", - "xpack.securitySolution.indexPatterns.add": "インデックスパターンを追加", - "xpack.securitySolution.indexPatterns.advancedOptionsTitle": "高度なオプション", - "xpack.securitySolution.indexPatterns.alertsBadgeTitle": "アラート", - "xpack.securitySolution.indexPatterns.callOutDeprecxatedTemplateTitle": "このタイムラインテンプレートはレガシーデータビューセレクターを使用します", - "xpack.securitySolution.indexPatterns.callOutDeprecxatedTitle": "このタイムラインはレガシーデータビューセレクターを使用します", - "xpack.securitySolution.indexPatterns.callOutMissingPatternsTemplateTitle": "このタイムラインテンプレートはセキュリティデータビューの日付の範囲外です", - "xpack.securitySolution.indexPatterns.callOutMissingPatternsTitle": "このタイムラインはセキュリティデータビューの日付の範囲外です", - "xpack.securitySolution.indexPatterns.callOutTimelineTitle": "[検出アラートのみを表示]が選択されているときには、データビューを修正できません", - "xpack.securitySolution.indexPatterns.callOutTitle": "このページではデータビューを修正できません", - "xpack.securitySolution.indexPatterns.chooseDataViewLabel": "データビューを選択", - "xpack.securitySolution.indexPatterns.closeButton": "閉じる", - "xpack.securitySolution.indexPatterns.continue": "追加せずに続行", - "xpack.securitySolution.indexPatterns.dataViewLabel": "データビュー", - "xpack.securitySolution.indexPatterns.descriptionsLabel": "これらは現在選択されているインデックスパターンです。データビューからインデックスパターンを除外すると、全体的なパフォーマンスを改善できます。", - "xpack.securitySolution.indexPatterns.failureToastText": "更新時に予期しないエラーが発生しました。データを変更する場合は、手動でデータビュー{link}を選択できます。", - "xpack.securitySolution.indexPatterns.failureToastTitle": "データビューを更新できません", - "xpack.securitySolution.indexPatterns.inactive": "非アクティブなインデックスパターン", - "xpack.securitySolution.indexPatterns.indexPatternsLabel": "インデックスパターン", - "xpack.securitySolution.indexPatterns.missingPatterns": "以前のタイムラインのデータビューを再作成するには、セキュリティデータビューに次のインデックスパターンがありません:{callout}", - "xpack.securitySolution.indexPatterns.missingPatterns.callout": "セキュリティデータビューには次のインデックスパターンがありません:{callout}", - "xpack.securitySolution.indexPatterns.missingPatterns.timeline.description": "一時データビューを作成することで、タイムラインを保持しています。データを修正する場合は、見つからないインデックスパターンをセキュリティデータビューに追加できます。手動でデータビュー{link}を選択することもできます。", - "xpack.securitySolution.indexPatterns.missingPatterns.timelineTemplate.description": "一時データビューを作成することで、タイムラインテンプレートを保持しています。データを修正する場合は、見つからないインデックスパターンをセキュリティデータビューに追加できます。手動でデータビュー{link}を選択することもできます。", - "xpack.securitySolution.indexPatterns.modifiedBadgeTitle": "変更済み", - "xpack.securitySolution.indexPatterns.noData": "このタイムラインのインデックスパターンはデータストリーム、インデックス、またはインデックスエイリアスと一致しません。", - "xpack.securitySolution.indexPatterns.onlyDetectionAlertsLabel": "検出アラートのみを表示", - "xpack.securitySolution.indexPatterns.pickIndexPatternsCombo": "インデックスパターンを選択", - "xpack.securitySolution.indexPatterns.reloadPageTitle": "ページを再読み込み", - "xpack.securitySolution.indexPatterns.resetButton": "リセット", - "xpack.securitySolution.indexPatterns.save": "保存", - "xpack.securitySolution.indexPatterns.securityDataViewLabel": "セキュリティデータビュー", - "xpack.securitySolution.indexPatterns.securityDefaultDataViewLabel": "セキュリティデフォルトデータビュー", - "xpack.securitySolution.indexPatterns.selectDataView": "データビュー選択", - "xpack.securitySolution.indexPatterns.successToastTitle": "設定を有効にするためにページの再読み込みが必要です", - "xpack.securitySolution.indexPatterns.timeline.currentPatterns": "このタイムラインのアクティブなインデックスパターンは{tooltip}です:{callout}", - "xpack.securitySolution.indexPatterns.timeline.currentPatternsBad": "このタイムラインの現在のインデックスパターン:{callout}", - "xpack.securitySolution.indexPatterns.timeline.noMatchData": "次のインデックスパターンはこのタイムラインに保存されますが、データストリーム、インデックス、またはインデックスエイリアスと一致しません:{aliases}", - "xpack.securitySolution.indexPatterns.timeline.toggleToNewSourcerer": "一時データビューを作成することで、タイムラインを保持しています。データを修正する場合は、新しいデータビューセレクターを使用して、一時データビューを再作成できます。手動でデータビュー{link}を選択することもできます。", - "xpack.securitySolution.indexPatterns.timelineTemplate.currentPatterns": "このタイムラインテンプレートのアクティブなインデックスパターンは{tooltip}です:{callout}", - "xpack.securitySolution.indexPatterns.timelineTemplate.currentPatternsBad": "このタイムラインテンプレートの現在のインデックスパターン:{callout}", - "xpack.securitySolution.indexPatterns.timelineTemplate.noMatchData": "次のインデックスパターンはこのタイムラインテンプレートに保存されますが、データストリーム、インデックス、またはインデックスエイリアスと一致しません:{aliases}", - "xpack.securitySolution.indexPatterns.timelineTemplate.toggleToNewSourcerer": "一時データビューを作成することで、タイムラインテンプレートを保持しています。データを修正する場合は、新しいデータビューセレクターを使用して、一時データビューを再作成できます。手動でデータビュー{link}を選択することもできます。", - "xpack.securitySolution.indexPatterns.toggleToNewSourcerer.link": "こちら", - "xpack.securitySolution.indexPatterns.update": "データビューを更新して再作成", - "xpack.securitySolution.indexPatterns.updateAvailableBadgeTitle": "更新が利用可能です", - "xpack.securitySolution.indexPatterns.updateDataView": "このインデックスパターンをセキュリティデータビューに追加しますか?そうでない場合は、見つからないインデックスパターンなしで、データビューを再作成できます。", - "xpack.securitySolution.indexPatterns.updateSecurityDataView": "セキュリティデータビューを更新", "xpack.securitySolution.inputCapture.ariaPlaceHolder": "コマンドを入力", "xpack.securitySolution.insights.alertCountTitle": "アラート:", "xpack.securitySolution.insights.misconfigurationsTitle": "構成エラー:", @@ -42511,11 +42465,8 @@ "xpack.securitySolution.socTrends.properties.unlockDatePickerTooltip": "現在表示中のページとSOCトレンドの間の日付/時刻範囲の同期を有効にします", "xpack.securitySolution.some_page.flyoutCreateSubmitSuccess": "\"{name}\"が追加されました。", "xpack.securitySolution.source.destination.packetsLabel": "パケット", - "xpack.securitySolution.sourcerer.disabled": "データビューの更新を有効にするには、ページを再読み込みする必要があります。", "xpack.securitySolution.sourcerer.error.title": "セキュリティデータビューの更新エラー", "xpack.securitySolution.sourcerer.error.toastMessage": "ページを更新", - "xpack.securitySolution.sourcerer.permissions.title": "データを生成するには書き込みロールが必要です", - "xpack.securitySolution.sourcerer.permissions.toastMessage": "アプリソースデータを初期化するには、書き込み権限のあるユーザーがElastic Securityアプリにアクセスする必要があります。", "xpack.securitySolution.stepDefineRule.lastDay": "昨日", "xpack.securitySolution.stepDefineRule.lastHour": "過去1時間", "xpack.securitySolution.stepDefineRule.lastMonth": "先月", diff --git a/x-pack/platform/plugins/private/translations/translations/zh-CN.json b/x-pack/platform/plugins/private/translations/translations/zh-CN.json index cf6e8fcea5831..bcc61edc4ebb7 100644 --- a/x-pack/platform/plugins/private/translations/translations/zh-CN.json +++ b/x-pack/platform/plugins/private/translations/translations/zh-CN.json @@ -40847,52 +40847,6 @@ "xpack.securitySolution.hoverActions.viewDetailsAriaLabel": "查看详情", "xpack.securitySolution.hoverActions.viewDetailsForRowAriaLabel": "查看第 {ariaRowindex} 行的告警或事件的详细信息,其中列为 {columnValues}", "xpack.securitySolution.indexFieldsSearch.errorSearchDescription": "创建临时数据视图时出错", - "xpack.securitySolution.indexPatterns.add": "添加索引模式", - "xpack.securitySolution.indexPatterns.advancedOptionsTitle": "高级选项", - "xpack.securitySolution.indexPatterns.alertsBadgeTitle": "告警", - "xpack.securitySolution.indexPatterns.callOutDeprecxatedTemplateTitle": "此时间线模板使用旧版数据视图选择器", - "xpack.securitySolution.indexPatterns.callOutDeprecxatedTitle": "此时间线使用旧版数据视图选择器", - "xpack.securitySolution.indexPatterns.callOutMissingPatternsTemplateTitle": "对于安全数据视图,此时间线模板已过时", - "xpack.securitySolution.indexPatterns.callOutMissingPatternsTitle": "对于安全数据视图,此时间线已过时", - "xpack.securitySolution.indexPatterns.callOutTimelineTitle": "选择仅显示检测告警时,无法修改数据视图", - "xpack.securitySolution.indexPatterns.callOutTitle": "无法在此页面上修改数据视图", - "xpack.securitySolution.indexPatterns.chooseDataViewLabel": "选择数据视图", - "xpack.securitySolution.indexPatterns.closeButton": "关闭", - "xpack.securitySolution.indexPatterns.continue": "继续,而不添加", - "xpack.securitySolution.indexPatterns.dataViewLabel": "数据视图", - "xpack.securitySolution.indexPatterns.descriptionsLabel": "这些是当前选择的索引模式。从您的数据视图中筛除索引模式可帮助提高整体性能。", - "xpack.securitySolution.indexPatterns.failureToastText": "更新时发生意外错误。如果要修改数据,您可以手动选择数据视图 {link}。", - "xpack.securitySolution.indexPatterns.failureToastTitle": "无法更新数据视图", - "xpack.securitySolution.indexPatterns.inactive": "非活动索引模式", - "xpack.securitySolution.indexPatterns.indexPatternsLabel": "索引模式", - "xpack.securitySolution.indexPatterns.missingPatterns": "要重新创建上一时间线的数据视图,安全数据视图缺少以下索引模式:{callout}", - "xpack.securitySolution.indexPatterns.missingPatterns.callout": "安全数据视图缺少以下索引模式:{callout}", - "xpack.securitySolution.indexPatterns.missingPatterns.timeline.description": "我们已通过创建临时数据视图来保留您的时间线。如果您要修改数据,我们可以将缺失的索引模式添加到安全数据视图。您还可以手动选择数据视图 {link}。", - "xpack.securitySolution.indexPatterns.missingPatterns.timelineTemplate.description": "我们已通过创建临时数据视图来保留您的时间线模板。如果您要修改数据,我们可以将缺失的索引模式添加到安全数据视图。您还可以手动选择数据视图 {link}。", - "xpack.securitySolution.indexPatterns.modifiedBadgeTitle": "已修改", - "xpack.securitySolution.indexPatterns.noData": "此时间线上的索引模式不匹配任何数据流、索引或索引别名。", - "xpack.securitySolution.indexPatterns.onlyDetectionAlertsLabel": "仅显示检测告警", - "xpack.securitySolution.indexPatterns.pickIndexPatternsCombo": "选取索引模式", - "xpack.securitySolution.indexPatterns.reloadPageTitle": "重新加载页面", - "xpack.securitySolution.indexPatterns.resetButton": "重置", - "xpack.securitySolution.indexPatterns.save": "保存", - "xpack.securitySolution.indexPatterns.securityDataViewLabel": "安全数据视图", - "xpack.securitySolution.indexPatterns.securityDefaultDataViewLabel": "安全默认数据视图", - "xpack.securitySolution.indexPatterns.selectDataView": "数据视图选择", - "xpack.securitySolution.indexPatterns.successToastTitle": "一个或多个设置需要您重新加载页面才能生效", - "xpack.securitySolution.indexPatterns.timeline.currentPatterns": "此时间线中的活动索引模式为 {tooltip}:{callout}", - "xpack.securitySolution.indexPatterns.timeline.currentPatternsBad": "此时间线中的当前索引模式为:{callout}", - "xpack.securitySolution.indexPatterns.timeline.noMatchData": "以下索引模式已保存到此时间线,但不匹配任何数据流、索引或索引别名:{aliases}", - "xpack.securitySolution.indexPatterns.timeline.toggleToNewSourcerer": "我们已通过创建临时数据视图来保留您的时间线。如果您要修改数据,我们可以使用新的数据视图选择器重新创建临时数据视图。您还可以手动选择数据视图 {link}。", - "xpack.securitySolution.indexPatterns.timelineTemplate.currentPatterns": "此时间线模板中的活动索引模式为 {tooltip}:{callout}", - "xpack.securitySolution.indexPatterns.timelineTemplate.currentPatternsBad": "此时间线模板中的当前索引模式为:{callout}", - "xpack.securitySolution.indexPatterns.timelineTemplate.noMatchData": "以下索引模式已保存到此时间线模板,但不匹配任何数据流、索引或索引别名:{aliases}", - "xpack.securitySolution.indexPatterns.timelineTemplate.toggleToNewSourcerer": "我们已通过创建临时数据视图来保留您的时间线模板。如果您要修改数据,我们可以使用新的数据视图选择器重新创建临时数据视图。您还可以手动选择数据视图 {link}。", - "xpack.securitySolution.indexPatterns.toggleToNewSourcerer.link": "此处", - "xpack.securitySolution.indexPatterns.update": "更新并重新创建数据视图", - "xpack.securitySolution.indexPatterns.updateAvailableBadgeTitle": "有可用更新", - "xpack.securitySolution.indexPatterns.updateDataView": "是否要将此索引模式添加到安全数据视图? 否则,我们可以不使用缺失的索引模式来重新创建数据视图。", - "xpack.securitySolution.indexPatterns.updateSecurityDataView": "更新安全数据视图", "xpack.securitySolution.inputCapture.ariaPlaceHolder": "输入命令", "xpack.securitySolution.insights.alertCountTitle": "告警:", "xpack.securitySolution.insights.misconfigurationsTitle": "错误配置:", @@ -42511,11 +42465,8 @@ "xpack.securitySolution.socTrends.properties.unlockDatePickerTooltip": "启用当前查看的页面与您的时间线之间的日期/时间范围同步", "xpack.securitySolution.some_page.flyoutCreateSubmitSuccess": "已添加“{name}”。", "xpack.securitySolution.source.destination.packetsLabel": "pkts", - "xpack.securitySolution.sourcerer.disabled": "数据视图的更新需要重新加载页面才能生效。", "xpack.securitySolution.sourcerer.error.title": "更新安全数据视图时出错", "xpack.securitySolution.sourcerer.error.toastMessage": "刷新页面", - "xpack.securitySolution.sourcerer.permissions.title": "需要写入角色才能生成数据", - "xpack.securitySolution.sourcerer.permissions.toastMessage": "具有写入权限的用户需要访问 Elastic Security 应用才能初始化应用源数据。", "xpack.securitySolution.stepDefineRule.lastDay": "昨天", "xpack.securitySolution.stepDefineRule.lastHour": "上一小时", "xpack.securitySolution.stepDefineRule.lastMonth": "上个月", diff --git a/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts b/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts index 98b6801aa9578..c2041495bce9a 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts @@ -158,9 +158,6 @@ export const allowedExperimentalValues = Object.freeze({ */ crowdstrikeRunScriptEnabled: true, - /** Enables new Data View Picker */ - newDataViewPickerEnabled: true, - /** * Enables Microsoft Defender for Endpoint's RunScript command * Release: 8.19/9.1 diff --git a/x-pack/solutions/security/plugins/security_solution/public/app/components/top_values_popover/top_values_popover.tsx b/x-pack/solutions/security/plugins/security_solution/public/app/components/top_values_popover/top_values_popover.tsx index b27f9abd0a97a..de471647a4da6 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/app/components/top_values_popover/top_values_popover.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/app/components/top_values_popover/top_values_popover.tsx @@ -9,26 +9,17 @@ import React, { useCallback } from 'react'; import { EuiWrappingPopover } from '@elastic/eui'; import { useLocation } from 'react-router-dom'; import useObservable from 'react-use/lib/useObservable'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import { StatefulTopN } from '../../../common/components/top_n'; import { getScopeFromPath } from '../../../sourcerer/containers/sourcerer_paths'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import { useKibana } from '../../../common/lib/kibana'; import { useDataView } from '../../../data_view_manager/hooks/use_data_view'; import { useBrowserFields } from '../../../data_view_manager/hooks/use_browser_fields'; export const TopValuesPopover = React.memo(() => { const { pathname } = useLocation(); - const sourcererScope = getScopeFromPath(pathname); - const { browserFields: oldBrowserFields, sourcererDataView: oldSourcererDataView } = - useSourcererDataView(sourcererScope); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - - const { dataView: experimentalDataView } = useDataView(sourcererScope); - const experimentalBrowserFields = useBrowserFields(sourcererScope); - - const browserFields = newDataViewPickerEnabled ? experimentalBrowserFields : oldBrowserFields; + const scope = getScopeFromPath(pathname); + const { dataView } = useDataView(scope); + const browserFields = useBrowserFields(scope); const { services: { topValuesPopover }, @@ -56,8 +47,7 @@ export const TopValuesPopover = React.memo(() => { field={data.fieldName} scopeId={data.scopeId} toggleTopN={onClose} - dataView={experimentalDataView} - dataViewSpec={oldSourcererDataView} + dataView={dataView} browserFields={browserFields} /> diff --git a/x-pack/solutions/security/plugins/security_solution/public/app/home/global_header/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/app/home/global_header/index.test.tsx index 80855a7b8f1d3..74965a6bf27cc 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/app/home/global_header/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/app/home/global_header/index.test.tsx @@ -16,7 +16,7 @@ import { } from '../../../../common/constants'; import { createMockStore, mockGlobalState, TestProviders } from '../../../common/mock'; import { TimelineId } from '../../../../common/types/timeline'; -import { sourcererPaths } from '../../../sourcerer/containers/sourcerer_paths'; +import { dataViewPickerPaths } from '../../../sourcerer/containers/sourcerer_paths'; import { DATA_VIEW_PICKER_TEST_ID } from '../../../data_view_manager/components/data_view_picker/constants'; import { useKibana as mockUseKibana } from '../../../common/lib/kibana/__mocks__'; @@ -121,21 +121,19 @@ describe('global header', () => { expect(link?.getAttribute('href')).toBe(ADD_THREAT_INTELLIGENCE_DATA_PATH); }); - // TODO: Skipping until feature flag is enabled https://github.com/elastic/security-team/issues/11959 by default - // it.each(sourcererPaths)('shows data view manager on %s page', (pathname) => { - // (useLocation as jest.Mock).mockReturnValue({ pathname }); - // - // const { getByTestId } = render( - // - // - // - // ); - // expect(getByTestId(DATA_VIEW_PICKER_TEST_ID)).toBeInTheDocument(); - // }); - - // TODO: Skipping until feature flag is enabled https://github.com/elastic/security-team/issues/11959 by default - it.skip('shows data view manager on rule details page', () => { - (useLocation as jest.Mock).mockReturnValue({ pathname: sourcererPaths[2] }); + it.each(dataViewPickerPaths)('shows data view manager on %s page', (pathname) => { + (useLocation as jest.Mock).mockReturnValue({ pathname }); + + const { getByTestId } = render( + + + + ); + expect(getByTestId(DATA_VIEW_PICKER_TEST_ID)).toBeInTheDocument(); + }); + + it('shows data view manager on rule details page', () => { + (useLocation as jest.Mock).mockReturnValue({ pathname: dataViewPickerPaths[2] }); const { getByTestId } = render( @@ -160,7 +158,7 @@ describe('global header', () => { }; const mockStore = createMockStore(mockstate); - (useLocation as jest.Mock).mockReturnValue({ pathname: sourcererPaths[2] }); + (useLocation as jest.Mock).mockReturnValue({ pathname: dataViewPickerPaths[2] }); const { queryByTestId } = render( diff --git a/x-pack/solutions/security/plugins/security_solution/public/app/home/global_header/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/app/home/global_header/index.tsx index c998688a04cad..d8660cc13dae9 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/app/home/global_header/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/app/home/global_header/index.tsx @@ -14,22 +14,19 @@ import React, { useEffect, useMemo } from 'react'; import { useLocation } from 'react-router-dom'; import { createHtmlPortalNode, InPortal, OutPortal } from 'react-reverse-portal'; import { i18n } from '@kbn/i18n'; - import { toMountPoint } from '@kbn/react-kibana-mount'; import { PageScope } from '../../../data_view_manager/constants'; import { SECURITY_FEATURE_ID } from '../../../../common'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import { MlPopover } from '../../../common/components/ml_popover/ml_popover'; import { useKibana } from '../../../common/lib/kibana'; import { isDashboardViewPath, isDetectionsPath } from '../../../helpers'; -import { Sourcerer } from '../../../sourcerer/components'; import { TimelineId } from '../../../../common/types/timeline'; import { timelineDefaults } from '../../../timelines/store/defaults'; import { timelineSelectors } from '../../../timelines/store'; import { useShallowEqualSelector } from '../../../common/hooks/use_selector'; import { getScopeFromPath, - showSourcererByPath, + showDataViewPickerByPath, } from '../../../sourcerer/containers/sourcerer_paths'; import { useAddIntegrationsUrl } from '../../../common/hooks/use_add_integrations_url'; import { DataViewPicker } from '../../../data_view_manager/components/data_view_picker'; @@ -43,7 +40,6 @@ const BUTTON_ADD_DATA = i18n.translate('xpack.securitySolution.globalHeader.butt * right hand side of the Kibana global header */ export const GlobalHeader = React.memo(() => { - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); const portalNode = useMemo(() => createHtmlPortalNode(), []); const { theme, @@ -61,8 +57,8 @@ export const GlobalHeader = React.memo(() => { (state) => (getTimeline(state, TimelineId.active) ?? timelineDefaults).show ); - const sourcererScope = getScopeFromPath(pathname, newDataViewPickerEnabled); - const showSourcerer = showSourcererByPath(pathname); + const pageScope = getScopeFromPath(pathname); + const showDataViewPicker = showDataViewPickerByPath(pathname); const dashboardViewPath = isDashboardViewPath(pathname); const { href, onClick } = useAddIntegrationsUrl(); @@ -88,12 +84,6 @@ export const GlobalHeader = React.memo(() => { } }, [portalNode, setHeaderActionMenu, theme, kibanaServiceI18n, dashboardViewPath]); - const dataViewPicker = newDataViewPickerEnabled ? ( - - ) : ( - - ); - return ( @@ -116,7 +106,9 @@ export const GlobalHeader = React.memo(() => { {BUTTON_ADD_DATA} )} - {showSourcerer && !showTimeline && dataViewPicker} + {showDataViewPicker && !showTimeline && ( + + )} diff --git a/x-pack/solutions/security/plugins/security_solution/public/app/home/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/app/home/index.tsx index 0a9db39ee0329..c85fc7d64067a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/app/home/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/app/home/index.tsx @@ -7,54 +7,36 @@ import React from 'react'; import { useLocation } from 'react-router-dom'; - import { DragDropContextWrapper } from '../../common/components/drag_and_drop/drag_drop_context_wrapper'; import { SecuritySolutionAppWrapper } from '../../common/components/page'; - import { HelpMenu } from '../../common/components/help_menu'; import { getScopeFromPath } from '../../sourcerer/containers/sourcerer_paths'; import { GlobalHeader } from './global_header'; import { ConsoleManager } from '../../management/components/console/components/console_manager'; - import { useUrlState } from '../../common/hooks/use_url_state'; import { useUpdateBrowserTitle } from '../../common/hooks/use_update_browser_title'; import { useUpdateExecutionContext } from '../../common/hooks/use_update_execution_context'; import { useUpgradeSecurityPackages } from '../../detection_engine/rule_management/logic/use_upgrade_security_packages'; import { useSetupDetectionEngineHealthApi } from '../../detection_engine/rule_monitoring'; import { TopValuesPopover } from '../components/top_values_popover/top_values_popover'; -import { useInitSourcerer } from '../../sourcerer/containers/use_init_sourcerer'; import { useInitDataViewManager } from '../../data_view_manager/hooks/use_init_data_view_manager'; import { useRestoreDataViewManagerStateFromURL } from '../../data_view_manager/hooks/use_sync_url_state'; import { useBrowserFields } from '../../data_view_manager/hooks/use_browser_fields'; -import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; -import { type BrowserFields } from '../../common/containers/source'; interface HomePageProps { children: React.ReactNode; } const HomePageComponent: React.FC = ({ children }) => { - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const { pathname } = useLocation(); - const { browserFields: oldBrowserFields } = useInitSourcerer(getScopeFromPath(pathname, false)); - const { browserFields: experimentalBrowserFields } = useBrowserFields( - getScopeFromPath(pathname, newDataViewPickerEnabled) - ); + const browserFields = useBrowserFields(getScopeFromPath(pathname)); - useRestoreDataViewManagerStateFromURL( - useInitDataViewManager(), - getScopeFromPath(pathname, newDataViewPickerEnabled) - ); + useRestoreDataViewManagerStateFromURL(useInitDataViewManager(), getScopeFromPath(pathname)); useUrlState(); useUpdateBrowserTitle(); useUpdateExecutionContext(); - const browserFields = ( - newDataViewPickerEnabled ? experimentalBrowserFields : oldBrowserFields - ) as BrowserFields; - // side effect: this will attempt to upgrade the endpoint package if it is not up to date // this will run when a user navigates to the Security Solution app and when they navigate between // tabs in the app. This is useful for keeping the endpoint package as up to date as possible until diff --git a/x-pack/solutions/security/plugins/security_solution/public/assistant/send_to_timeline/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/assistant/send_to_timeline/index.tsx index df521c57f69a9..6c722ac52f46c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/assistant/send_to_timeline/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/assistant/send_to_timeline/index.tsx @@ -35,10 +35,8 @@ import { } from '../../timelines/store/actions'; import { useDiscoverInTimelineContext } from '../../common/components/discover_in_timeline/use_discover_in_timeline_context'; import { useShowTimeline } from '../../common/utils/timeline/use_show_timeline'; -import { useSourcererDataView } from '../../sourcerer/containers'; import { useDiscoverState } from '../../timelines/components/timeline/tabs/esql/use_discover_state'; import { useKibana } from '../../common/lib/kibana'; -import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; import { useDataView } from '../../data_view_manager/hooks/use_data_view'; export interface SendToTimelineButtonProps { @@ -64,14 +62,8 @@ export const SendToTimelineButton: FC { const pageTitle = useMemo(() => , []); - const { sourcererDataView: oldSourcererDataView } = useSourcererDataView(); - const { dataView: experimentalDataView } = useDataView(); + const { dataView } = useDataView(); // filterQuery is the combined search bar query and filters in ES format: const [filterQuery, kqlError] = useMemo( () => convertToBuildEsQuery({ config: getEsQueryConfig(uiSettings), - dataViewSpec: oldSourcererDataView, - dataView: experimentalDataView, + dataView, queries: [query ?? getDefaultQuery()], // <-- search bar query filters: filters ?? [], // <-- search bar filters }), - [experimentalDataView, filters, oldSourcererDataView, query, uiSettings] + [dataView, filters, query, uiSettings] ); // renders a toast if the filter query is invalid: diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/results/attack_discovery_panel/tabs/alerts_tab/ease/table.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/results/attack_discovery_panel/tabs/alerts_tab/ease/table.tsx index 53934679d1588..d5219a3e40f95 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/results/attack_discovery_panel/tabs/alerts_tab/ease/table.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/results/attack_discovery_panel/tabs/alerts_tab/ease/table.tsx @@ -71,7 +71,7 @@ export const Table = memo(({ dataView, id, packages, query }: TableProps) => { [application, cases, data, fieldFormats, http, licensing, notifications, settings] ); - const browserFields = useBrowserFields(PageScope.alerts, dataView); + const browserFields = useBrowserFields(PageScope.alerts); const additionalContext: AdditionalTableContext = useMemo( () => ({ diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/alert_selection_query/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/alert_selection_query/index.test.tsx index 099490b4d0a8f..07fc622cd17b2 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/alert_selection_query/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/alert_selection_query/index.test.tsx @@ -12,15 +12,10 @@ import React from 'react'; import { AlertSelectionQuery } from '.'; import { useKibana } from '../../../../../common/lib/kibana'; import { TestProviders } from '../../../../../common/mock'; -import { useSourcererDataView } from '../../../../../sourcerer/containers'; jest.mock('../../../../../common/lib/kibana'); -jest.mock('../../../../../sourcerer/containers'); const mockUseKibana = useKibana as jest.MockedFunction; -const mockUseSourcererDataView = useSourcererDataView as jest.MockedFunction< - typeof useSourcererDataView ->; describe('AlertSelectionQuery', () => { const defaultProps = { @@ -47,11 +42,6 @@ describe('AlertSelectionQuery', () => { }, }, } as unknown as jest.Mocked>); - - mockUseSourcererDataView.mockReturnValue({ - sourcererDataView: {}, - loading: false, - } as unknown as jest.Mocked>); }); it('renders the SearchBar', () => { diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/alert_selection_query/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/alert_selection_query/index.tsx index 1e0005e57d752..ffc838cca47df 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/alert_selection_query/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/alert_selection_query/index.tsx @@ -13,18 +13,12 @@ import type { DataView } from '@kbn/data-views-plugin/common'; import type { Filter, Query } from '@kbn/es-query'; import { debounce } from 'lodash/fp'; import React, { useCallback, useMemo } from 'react'; - import { PageScope } from '../../../../../data_view_manager/constants'; -import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; import { useKibana } from '../../../../../common/lib/kibana'; import { getCommonTimeRanges } from '../helpers/get_common_time_ranges'; -import { useSourcererDataView } from '../../../../../sourcerer/containers'; -import { useCreateDataView } from '../../../../../common/hooks/use_create_data_view'; import type { AlertsSelectionSettings } from '../../types'; import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; -export const MAX_ALERTS = 500; -export const MIN_ALERTS = 50; export const STEP = 50; export const NO_INDEX_PATTERNS: DataView[] = []; @@ -50,29 +44,13 @@ const AlertSelectionQueryComponent: React.FC = ({ } = useKibana().services; const { euiTheme } = useEuiTheme(); - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const { dataView: experimentalDataView, status } = useDataView(PageScope.alerts); - - // get the sourcerer `DataViewSpec` for alerts: - const { sourcererDataView: oldSourcererDataViewSpec, loading: oldIsLoadingIndexPattern } = - useSourcererDataView(PageScope.alerts); - - // create a `DataView` from the `DataViewSpec`: - const { dataView: oldDataView, loading: oldIsLoadingDataView } = useCreateDataView({ - dataViewSpec: oldSourcererDataViewSpec, - loading: oldIsLoadingIndexPattern, - skip: newDataViewPickerEnabled, // skip data view creation if the new data view picker is enabled - }); - - const alertsDataView = newDataViewPickerEnabled ? experimentalDataView : oldDataView; - const isLoadingIndexPattern = newDataViewPickerEnabled - ? status !== 'ready' - : oldIsLoadingDataView; + const { dataView, status } = useDataView(PageScope.alerts); + const isLoadingIndexPattern = status !== 'ready'; // create a container for the alerts `DataView`, as required by the search bar: const indexPatterns: DataView[] = useMemo( - () => (alertsDataView ? [alertsDataView] : NO_INDEX_PATTERNS), - [alertsDataView] + () => (dataView ? [dataView] : NO_INDEX_PATTERNS), + [dataView] ); // Users accumulate an "unsubmitted" query as they type in the search bar, diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/index.test.tsx index 9179ab4a02274..c66881c3db6e2 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/index.test.tsx @@ -6,13 +6,12 @@ */ import type { FilterManager } from '@kbn/data-plugin/public'; -import { render, screen, fireEvent } from '@testing-library/react'; +import { fireEvent, render, screen } from '@testing-library/react'; import React from 'react'; import { AlertSelection } from '.'; import { useKibana } from '../../../../common/lib/kibana'; import { TestProviders } from '../../../../common/mock'; -import { useSourcererDataView } from '../../../../sourcerer/containers'; import { CUSTOMIZE_THE_CONNECTOR_AND_ALERTS } from './translations'; jest.mock('react-router', () => ({ @@ -23,7 +22,6 @@ jest.mock('react-router', () => ({ withRouter: jest.fn(), })); jest.mock('../../../../common/lib/kibana'); -jest.mock('../../../../sourcerer/containers'); jest.mock('../../../../common/hooks/use_space_id', () => ({ useSpaceId: jest.fn().mockReturnValue('default'), })); @@ -49,9 +47,6 @@ const defaultProps = { }; const mockUseKibana = useKibana as jest.MockedFunction; -const mockUseSourcererDataView = useSourcererDataView as jest.MockedFunction< - typeof useSourcererDataView ->; describe('AlertSelection', () => { beforeEach(() => { @@ -69,11 +64,6 @@ describe('AlertSelection', () => { }, }, } as unknown as jest.Mocked>); - - mockUseSourcererDataView.mockReturnValue({ - sourcererDataView: {}, - loading: false, - } as unknown as jest.Mocked>); }); it('renders the customize alerts text', () => { diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/preview_tab/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/preview_tab/index.test.tsx index 3de72d3870e4d..96404ef11ba46 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/preview_tab/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/alert_selection/preview_tab/index.test.tsx @@ -12,12 +12,10 @@ import { PreviewTab } from '.'; import { useKibana } from '../../../../../common/lib/kibana'; import { TestProviders } from '../../../../../common/mock'; import { useSignalIndex } from '../../../../../detections/containers/detection_engine/alerts/use_signal_index'; -import { useSourcererDataView } from '../../../../../sourcerer/containers'; const mockDispatch = jest.fn(); jest.mock('../../../../../common/lib/kibana'); -jest.mock('../../../../../sourcerer/containers'); jest.mock('../../../../../detections/containers/detection_engine/alerts/use_signal_index'); jest.mock('react-router-dom', () => ({ matchPath: jest.fn(), @@ -32,9 +30,6 @@ jest.mock('react-redux', () => ({ })); const mockUseKibana = useKibana as jest.MockedFunction; -const mockUseSourcererDataView = useSourcererDataView as jest.MockedFunction< - typeof useSourcererDataView ->; const mockUseSignalIndex = useSignalIndex as jest.MockedFunction; describe('PreviewTab', () => { @@ -67,11 +62,6 @@ describe('PreviewTab', () => { }, } as unknown as jest.Mocked>); - mockUseSourcererDataView.mockReturnValue({ - sourcererDataView: {}, - loading: false, - } as unknown as jest.Mocked>); - mockUseSignalIndex.mockReturnValue({ loading: false, signalIndexExists: true, diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/hooks/use_schedule_view.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/hooks/use_schedule_view.test.tsx index 35810235b49f4..7453bfe2c1951 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/hooks/use_schedule_view.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/hooks/use_schedule_view.test.tsx @@ -11,7 +11,6 @@ import { act, fireEvent, render, renderHook, screen, waitFor } from '@testing-li import { useScheduleView } from './use_schedule_view'; import { useFindAttackDiscoverySchedules } from '../schedule/logic/use_find_schedules'; import { useKibana } from '../../../../common/lib/kibana'; -import { useSourcererDataView } from '../../../../sourcerer/containers'; import { TestProviders } from '../../../../common/mock'; import { mockFindAttackDiscoverySchedules } from '../../mock/mock_find_attack_discovery_schedules'; import { triggersActionsUiMock } from '@kbn/triggers-actions-ui-plugin/public/mocks'; @@ -26,13 +25,9 @@ jest.mock('react-router', () => ({ withRouter: jest.fn(), })); jest.mock('../../../../common/lib/kibana'); -jest.mock('../../../../sourcerer/containers'); jest.mock('../schedule/logic/use_find_schedules'); const mockUseKibana = useKibana as jest.MockedFunction; -const mockUseSourcererDataView = useSourcererDataView as jest.MockedFunction< - typeof useSourcererDataView ->; const mockUseFindAttackDiscoverySchedules = useFindAttackDiscoverySchedules as jest.MockedFunction< typeof useFindAttackDiscoverySchedules >; @@ -71,11 +66,6 @@ describe('useScheduleView', () => { setupUseKibana(); - mockUseSourcererDataView.mockReturnValue({ - sourcererDataView: {}, - loading: false, - } as unknown as jest.Mocked>); - mockUseFindAttackDiscoverySchedules.mockReturnValue({ data: mockFindAttackDiscoverySchedules, isLoading: false, diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/hooks/use_settings_view.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/hooks/use_settings_view.test.tsx index 5676eef70dd58..3fc84f3db41ff 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/hooks/use_settings_view.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/hooks/use_settings_view.test.tsx @@ -10,9 +10,8 @@ import { act, fireEvent, render, renderHook, screen } from '@testing-library/rea import React from 'react'; import { useKibana } from '../../../../common/lib/kibana'; -import { useSourcererDataView } from '../../../../sourcerer/containers'; -import { useSettingsView } from './use_settings_view'; import type { UseSettingsView } from './use_settings_view'; +import { useSettingsView } from './use_settings_view'; import { TestProviders } from '../../../../common/mock'; const mockFilterManager = createFilterManagerMock(); @@ -72,8 +71,6 @@ jest.mock('react-router', () => ({ jest.mock('../../../../common/lib/kibana'); -jest.mock('../../../../sourcerer/containers'); - jest.mock('../../../../common/hooks/use_space_id', () => { return { useSpaceId: jest.fn().mockReturnValue('default'), @@ -139,8 +136,6 @@ const defaultProps = { }; const mockUseKibana = useKibana as jest.MockedFunction; -const mockUseSourcererDataView: jest.MockedFunction = - useSourcererDataView as jest.MockedFunction; describe('useSettingsView', () => { beforeEach(() => { @@ -171,11 +166,6 @@ describe('useSettingsView', () => { }, }, } as unknown as jest.Mocked>); - - mockUseSourcererDataView.mockReturnValue({ - sourcererDataView: {}, - loading: false, - } as unknown as jest.Mocked>); }); // DRY helper for simulating connector change and save diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/hooks/use_settings_view.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/hooks/use_settings_view.tsx index 564df614a4de4..5eb00beb606f6 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/hooks/use_settings_view.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/hooks/use_settings_view.tsx @@ -25,7 +25,6 @@ import { convertToBuildEsQuery } from '../../../../common/lib/kuery'; import { useDataView } from '../../../../data_view_manager/hooks/use_data_view'; import { parseFilterQuery } from '../parse_filter_query'; import type { SettingsOverrideOptions } from '../../results/history/types'; -import { useSourcererDataView } from '../../../../sourcerer/containers'; import * as i18n from './translations'; import type { AlertsSelectionSettings } from '../types'; @@ -58,8 +57,7 @@ export const useSettingsView = ({ const { euiTheme } = useEuiTheme(); const { uiSettings } = useKibana().services; const filterManager = useRef(new FilterManager(uiSettings)); - const { sourcererDataView: oldSourcererDataView } = useSourcererDataView(); - const { dataView: experimentalDataView } = useDataView(); + const { dataView } = useDataView(); const [alertSummaryStackBy0, setAlertSummaryStackBy0] = useState(DEFAULT_STACK_BY_FIELD); @@ -141,8 +139,7 @@ export const useSettingsView = ({ // Convert settings to filter query for overrides const [filterQuery, kqlError] = convertToBuildEsQuery({ config: getEsQueryConfig(uiSettings), - dataViewSpec: oldSourcererDataView, - dataView: experimentalDataView, + dataView, queries: [settings.query], filters: settings.filters, }); @@ -158,10 +155,9 @@ export const useSettingsView = ({ overrideStart: settings.start, }); }, [ - experimentalDataView, + dataView, handleSave, localConnectorId, - oldSourcererDataView, onGenerate, settings.end, settings.filters, diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/index.test.tsx index a6e67eb9558b8..107def29f2087 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/index.test.tsx @@ -16,11 +16,9 @@ import { getDefaultQuery } from '../helpers'; import { useKibana } from '../../../common/lib/kibana'; import { TestProviders } from '../../../common/mock'; import { SCHEDULE_TAB_ID, SETTINGS_TAB_ID } from './constants'; -import { useSourcererDataView } from '../../../sourcerer/containers'; jest.mock('../../../common/hooks/use_experimental_features'); jest.mock('../../../common/lib/kibana'); -jest.mock('../../../sourcerer/containers'); jest.mock('react-router-dom', () => ({ matchPath: jest.fn(), useLocation: jest.fn().mockReturnValue({ @@ -71,9 +69,6 @@ const createMockProps = (overrides = {}) => ({ const defaultProps = createMockProps(); const mockUseKibana = useKibana as jest.MockedFunction; -const mockUseSourcererDataView = useSourcererDataView as jest.MockedFunction< - typeof useSourcererDataView ->; const setupMocks = (overrides = {}) => { mockUseKibana.mockReturnValue({ @@ -91,11 +86,6 @@ const setupMocks = (overrides = {}) => { }, }, } as unknown as jest.Mocked>); - - mockUseSourcererDataView.mockReturnValue({ - sourcererDataView: {}, - loading: false, - } as unknown as jest.Mocked>); }; const renderComponent = (props = defaultProps) => { diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/create_flyout/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/create_flyout/index.test.tsx index 51516114ce368..df87c815ce9a1 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/create_flyout/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/create_flyout/index.test.tsx @@ -15,13 +15,11 @@ import * as i18n from './translations'; import { useKibana } from '../../../../../common/lib/kibana'; import { TestProviders } from '../../../../../common/mock/test_providers'; -import { useSourcererDataView } from '../../../../../sourcerer/containers'; import { useCreateAttackDiscoverySchedule } from '../logic/use_create_schedule'; jest.mock('@kbn/inference-connectors'); jest.mock('../logic/use_create_schedule'); jest.mock('../../../../../common/lib/kibana'); -jest.mock('../../../../../sourcerer/containers'); jest.mock('react-router-dom', () => ({ matchPath: jest.fn(), useLocation: jest.fn().mockReturnValue({ @@ -42,9 +40,6 @@ const mockConnectors: unknown[] = [ ]; const mockUseKibana = useKibana as jest.MockedFunction; -const mockUseSourcererDataView = useSourcererDataView as jest.MockedFunction< - typeof useSourcererDataView ->; const defaultProps = { connectorId: undefined, @@ -86,11 +81,6 @@ describe.skip('CreateFlyout', () => { }, } as unknown as jest.Mocked>); - mockUseSourcererDataView.mockReturnValue({ - sourcererDataView: {}, - loading: false, - } as unknown as jest.Mocked>); - (useLoadConnectors as jest.Mock).mockReturnValue({ isLoading: false, data: mockConnectors, diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/create_flyout/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/create_flyout/index.tsx index 945757ae9a1b9..7dad5abe67518 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/create_flyout/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/create_flyout/index.tsx @@ -19,12 +19,10 @@ import { import { useAssistantContext } from '@kbn/elastic-assistant'; import { useLoadConnectors } from '@kbn/inference-connectors'; import React, { useCallback, useState } from 'react'; - import { PageScope } from '../../../../../data_view_manager/constants'; import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { useKibana } from '../../../../../common/lib/kibana'; import { ConfirmationModal } from '../confirmation_modal'; -import { useSourcererDataView } from '../../../../../sourcerer/containers'; import { Footer } from '../../footer'; import { MIN_FLYOUT_WIDTH } from '../../constants'; import { useEditForm } from '../edit_form'; @@ -66,14 +64,17 @@ export const CreateFlyout: React.FC = React.memo(({ onClose }) => { settings, }); - const { sourcererDataView } = useSourcererDataView(); - const { dataView: experimentalDataView } = useDataView(PageScope.alerts); + const { dataView, status } = useDataView(PageScope.alerts); const { mutateAsync: createAttackDiscoverySchedule, isLoading: isLoadingQuery } = useCreateAttackDiscoverySchedule(); const onCreateSchedule = useCallback( async (scheduleData: AttackDiscoveryScheduleSchema) => { + if (status !== 'ready') { + return; + } + const connector = aiConnectors?.find((item) => item.id === scheduleData.connectorId); if (!connector) { return; @@ -84,9 +85,8 @@ export const CreateFlyout: React.FC = React.memo(({ onClose }) => { scheduleData, alertsIndexPattern ?? '', connector, - sourcererDataView, uiSettings, - experimentalDataView + dataView ); await createAttackDiscoverySchedule({ scheduleToCreate }); onClose(); @@ -98,15 +98,15 @@ export const CreateFlyout: React.FC = React.memo(({ onClose }) => { aiConnectors, alertsIndexPattern, createAttackDiscoverySchedule, - experimentalDataView, + dataView, onClose, - sourcererDataView, + status, uiSettings, ] ); const { editForm, actionButtons } = useEditForm({ - isLoading: isLoadingConnectors || isLoadingQuery, + isLoading: isLoadingConnectors || isLoadingQuery || status !== 'ready', onFormMutated, onSave: onCreateSchedule, saveButtonTitle: i18n.SCHEDULE_CREATE_BUTTON_TITLE, diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/definition/filters.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/definition/filters.test.tsx index cdae5883f727e..0545b92a96a01 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/definition/filters.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/definition/filters.test.tsx @@ -11,17 +11,12 @@ import { act, render, screen } from '@testing-library/react'; import { Filters } from './filters'; import { useCreateDataView } from '../../../../../../common/hooks/use_create_data_view'; import { TestProviders } from '../../../../../../common/mock'; -import { useSourcererDataView } from '../../../../../../sourcerer/containers'; import { useIsExperimentalFeatureEnabled } from '../../../../../../common/hooks/use_experimental_features'; jest.mock('../../../../../../common/hooks/use_create_data_view'); -jest.mock('../../../../../../sourcerer/containers'); jest.mock('../../../../../../common/hooks/use_experimental_features'); const mockUseCreateDataView = useCreateDataView as jest.MockedFunction; -const mockUseSourcererDataView = useSourcererDataView as jest.MockedFunction< - typeof useSourcererDataView ->; const renderComponent = async () => { await act(() => { @@ -51,10 +46,6 @@ describe.skip('Filters', () => { }, loading: false, } as unknown as jest.Mocked>); - mockUseSourcererDataView.mockReturnValue({ - sourcererDataView: {}, - loading: false, - } as unknown as jest.Mocked>); }); it('should render filters component', async () => { diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/definition/filters.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/definition/filters.tsx index 578fdbc6e73ab..1311569594562 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/definition/filters.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/definition/filters.tsx @@ -13,37 +13,20 @@ import { FilterItems } from '@kbn/unified-search-plugin/public'; import { PageScope } from '../../../../../../data_view_manager/constants'; import { useDataView } from '../../../../../../data_view_manager/hooks/use_data_view'; -import { useSourcererDataView } from '../../../../../../sourcerer/containers'; -import { useCreateDataView } from '../../../../../../common/hooks/use_create_data_view'; -import { useIsExperimentalFeatureEnabled } from '../../../../../../common/hooks/use_experimental_features'; interface FiltersProps { filters: Filter[]; } export const Filters: React.FC = React.memo(({ filters }) => { - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const { dataView: experimentalDataView } = useDataView(PageScope.alerts); - - // get the sourcerer `DataViewSpec` for alerts: - const { sourcererDataView: oldSourcererDataView, loading: oldIsLoadingIndexPattern } = - useSourcererDataView(PageScope.alerts); - - // create a `DataView` from the `DataViewSpec`: - const { dataView: oldDataView } = useCreateDataView({ - dataViewSpec: oldSourcererDataView, - loading: oldIsLoadingIndexPattern, - skip: newDataViewPickerEnabled, - }); - - const alertsDataView = newDataViewPickerEnabled ? experimentalDataView : oldDataView; + const { dataView } = useDataView(PageScope.alerts); const isEsql = filters.some((filter) => filter?.query?.language === 'esql'); const searchBarFilters = useMemo(() => { - if (!alertsDataView || isEsql) { + if (!dataView || isEsql) { return filters; } - const index = alertsDataView.getIndexPattern(); + const index = dataView.getIndexPattern(); const filtersWithUpdatedMetaIndex = filters.map((filter) => { return { ...filter, @@ -55,9 +38,9 @@ export const Filters: React.FC = React.memo(({ filters }) => { }); return filtersWithUpdatedMetaIndex; - }, [alertsDataView, filters, isEsql]); + }, [dataView, filters, isEsql]); - if (!alertsDataView) { + if (!dataView) { return null; } @@ -65,7 +48,7 @@ export const Filters: React.FC = React.memo(({ filters }) => { return ( - + ); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/definition/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/definition/index.test.tsx index 0b462f0829735..b391b9ce6a6af 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/definition/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/definition/index.test.tsx @@ -11,18 +11,13 @@ import { act, render, screen } from '@testing-library/react'; import { ScheduleDefinition } from '.'; import { useCreateDataView } from '../../../../../../common/hooks/use_create_data_view'; import { TestProviders } from '../../../../../../common/mock'; -import { useSourcererDataView } from '../../../../../../sourcerer/containers'; import { mockAttackDiscoverySchedule } from '../../../../mock/mock_attack_discovery_schedule'; import { useIsExperimentalFeatureEnabled } from '../../../../../../common/hooks/use_experimental_features'; jest.mock('../../../../../../common/hooks/use_create_data_view'); -jest.mock('../../../../../../sourcerer/containers'); jest.mock('../../../../../../common/hooks/use_experimental_features'); const mockUseCreateDataView = useCreateDataView as jest.MockedFunction; -const mockUseSourcererDataView = useSourcererDataView as jest.MockedFunction< - typeof useSourcererDataView ->; const renderComponent = async (schedule = mockAttackDiscoverySchedule) => { await act(() => { @@ -39,10 +34,6 @@ describe('ScheduleDefinition', () => { getIndexPattern: () => 'logstash-*', fields: [{ name: '_type' }], } as unknown as jest.Mocked>); - mockUseSourcererDataView.mockReturnValue({ - sourcererDataView: {}, - loading: false, - } as unknown as jest.Mocked>); }); it('should render definition title', async () => { diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/index.test.tsx index b0d7412dbea86..42656cad3cad7 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/index.test.tsx @@ -14,7 +14,6 @@ import { DetailsFlyout } from '.'; import { useKibana } from '../../../../../common/lib/kibana'; import { TestProviders } from '../../../../../common/mock'; -import { useSourcererDataView } from '../../../../../sourcerer/containers'; import { useUpdateAttackDiscoverySchedule } from '../logic/use_update_schedule'; import { useGetAttackDiscoverySchedule } from '../logic/use_get_schedule'; import { mockAttackDiscoverySchedule } from '../../../mock/mock_attack_discovery_schedule'; @@ -25,7 +24,6 @@ jest.mock('@kbn/inference-connectors'); jest.mock('../logic/use_update_schedule'); jest.mock('../logic/use_get_schedule'); jest.mock('../../../../../common/lib/kibana'); -jest.mock('../../../../../sourcerer/containers'); jest.mock('react-router-dom', () => ({ matchPath: jest.fn(), useLocation: jest.fn().mockReturnValue({ @@ -46,9 +44,6 @@ const mockConnectors: unknown[] = [ ]; const mockUseKibana = useKibana as jest.MockedFunction; -const mockUseSourcererDataView = useSourcererDataView as jest.MockedFunction< - typeof useSourcererDataView ->; const updateAttackDiscoveryScheduleMock = jest.fn(); const defaultProps = { @@ -100,11 +95,6 @@ describe('DetailsFlyout', () => { setupUseKibana(); - mockUseSourcererDataView.mockReturnValue({ - sourcererDataView: {}, - loading: false, - } as unknown as jest.Mocked>); - (useLoadConnectors as jest.Mock).mockReturnValue({ isLoading: false, data: mockConnectors, diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/index.tsx index b0f3b63e7dd1b..562f3baca738d 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/index.tsx @@ -32,7 +32,6 @@ import * as i18n from './translations'; import { useKibana } from '../../../../../common/lib/kibana'; import { ConfirmationModal } from '../confirmation_modal'; -import { useSourcererDataView } from '../../../../../sourcerer/containers'; import { Footer } from '../../footer'; import { MIN_FLYOUT_WIDTH } from '../../constants'; import type { AttackDiscoveryScheduleSchema } from '../edit_form/types'; @@ -86,8 +85,7 @@ export const DetailsFlyout: React.FC = React.memo(({ scheduleId, onClose id: scheduleId, }); - const { sourcererDataView } = useSourcererDataView(); - const { dataView: experimentalDataView } = useDataView(PageScope.alerts); + const { dataView } = useDataView(PageScope.alerts); const [isEditing, setIsEditing] = useState(false); @@ -106,9 +104,8 @@ export const DetailsFlyout: React.FC = React.memo(({ scheduleId, onClose scheduleData, alertsIndexPattern ?? '', connector, - sourcererDataView, uiSettings, - experimentalDataView + dataView ); await updateAttackDiscoverySchedule({ id: scheduleId, scheduleToUpdate }); setIsEditing(false); @@ -119,9 +116,8 @@ export const DetailsFlyout: React.FC = React.memo(({ scheduleId, onClose [ aiConnectors, alertsIndexPattern, - sourcererDataView, uiSettings, - experimentalDataView, + dataView, updateAttackDiscoverySchedule, scheduleId, ] diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/edit_form/edit_form.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/edit_form/edit_form.test.tsx index 92bd79e99a6fe..fcabd9a4b1cec 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/edit_form/edit_form.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/edit_form/edit_form.test.tsx @@ -16,7 +16,6 @@ import { EditForm } from './edit_form'; import { useKibana } from '../../../../../common/lib/kibana'; import { TestProviders } from '../../../../../common/mock'; -import { useSourcererDataView } from '../../../../../sourcerer/containers'; import { getDefaultQuery } from '../../../helpers'; const mockConnectors: unknown[] = [ @@ -36,13 +35,9 @@ jest.mock('react-router', () => ({ withRouter: jest.fn(), })); jest.mock('../../../../../common/lib/kibana'); -jest.mock('../../../../../sourcerer/containers'); jest.mock('../../../../../common/hooks/use_connectors'); const mockUseKibana = useKibana as jest.MockedFunction; -const mockUseSourcererDataView = useSourcererDataView as jest.MockedFunction< - typeof useSourcererDataView ->; const onChangeMock = jest.fn(); const defaultProps = { @@ -95,11 +90,6 @@ describe.skip('EditForm', () => { }, } as unknown as jest.Mocked>); - mockUseSourcererDataView.mockReturnValue({ - sourcererDataView: {}, - loading: false, - } as unknown as jest.Mocked>); - (useConnectors as jest.Mock).mockReturnValue({ connectors: mockConnectors, setCurrentConnector: jest.fn(), diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/utils/convert_form_data.test.ts b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/utils/convert_form_data.test.ts index 6f15fe55b695f..5bc4730999168 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/utils/convert_form_data.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/utils/convert_form_data.test.ts @@ -6,7 +6,6 @@ */ import type { IUiSettingsClient } from '@kbn/core/public'; -import type { DataViewSpec } from '@kbn/data-plugin/common'; import type { AIConnector } from '@kbn/elastic-assistant'; import { convertFormDataInBaseSchedule } from './convert_form_data'; @@ -48,7 +47,6 @@ describe('convertFormDataInBaseSchedule', () => { }, '.alert-*', {} as AIConnector, - {} as DataViewSpec, { get: jest.fn(), } as unknown as IUiSettingsClient, diff --git a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/utils/convert_form_data.ts b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/utils/convert_form_data.ts index 7ba7b547920ae..9e09bf7b98399 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/utils/convert_form_data.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/utils/convert_form_data.ts @@ -6,7 +6,7 @@ */ import type { IUiSettingsClient } from '@kbn/core/public'; -import type { DataView, DataViewSpec } from '@kbn/data-plugin/common'; +import type { DataView } from '@kbn/data-plugin/common'; import { getEsQueryConfig } from '@kbn/data-plugin/common'; import type { AIConnector } from '@kbn/elastic-assistant'; @@ -19,7 +19,6 @@ export const convertFormDataInBaseSchedule = ( scheduleData: AttackDiscoveryScheduleSchema, alertsIndexPattern: string, connector: AIConnector, - dataViewSpec: DataViewSpec, uiSettings: IUiSettingsClient, dataView: DataView ) => { @@ -27,7 +26,6 @@ export const convertFormDataInBaseSchedule = ( const [filterQuery, kqlError] = convertToBuildEsQuery({ config: getEsQueryConfig(uiSettings), - dataViewSpec, dataView, queries: [alertsSelectionSettings.query], filters: alertsSelectionSettings.filters, diff --git a/x-pack/solutions/security/plugins/security_solution/public/cases/components/ease/table.tsx b/x-pack/solutions/security/plugins/security_solution/public/cases/components/ease/table.tsx index 7d8a2e0ff0999..fd1ab67c5ce18 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/cases/components/ease/table.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/cases/components/ease/table.tsx @@ -78,7 +78,7 @@ export const Table = memo(({ dataView, id, onLoaded, packages, query }: TablePro [application, cases, data, fieldFormats, http, licensing, notifications, settings] ); - const browserFields = useBrowserFields(PageScope.alerts, dataView); + const browserFields = useBrowserFields(PageScope.alerts); const additionalContext: AdditionalTableContext = useMemo(() => ({ packages }), [packages]); diff --git a/x-pack/solutions/security/plugins/security_solution/public/cases/pages/use_fetch_alert_data.ts b/x-pack/solutions/security/plugins/security_solution/public/cases/pages/use_fetch_alert_data.ts index 76d80a0278988..5aff2dd1b3790 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/cases/pages/use_fetch_alert_data.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/cases/pages/use_fetch_alert_data.ts @@ -8,25 +8,16 @@ import { useMemo } from 'react'; import type { Ecs } from '@kbn/cases-plugin/common'; import { PageScope } from '../../data_view_manager/constants'; -import { useSourcererDataView } from '../../sourcerer/containers'; import { useQueryAlerts } from '../../detections/containers/detection_engine/alerts/use_query'; import { useAlertsPrivileges } from '../../detections/containers/detection_engine/alerts/use_alerts_privileges'; import { ALERTS_QUERY_NAMES } from '../../detections/containers/detection_engine/alerts/constants'; import type { SignalHit } from '../../common/utils/alerts'; import { buildAlertsQuery, formatAlertToEcsSignal } from '../../common/utils/alerts'; -import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; import { useSelectedPatterns } from '../../data_view_manager/hooks/use_selected_patterns'; export const useFetchAlertData = (alertIds: string[]): [boolean, Record] => { const { hasAlertsRead } = useAlertsPrivileges(); - const { selectedPatterns: oldSelectedPatterns } = useSourcererDataView(PageScope.alerts); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - - const experimentalSelectedPatterns = useSelectedPatterns(PageScope.alerts); - const selectedPatterns = newDataViewPickerEnabled - ? experimentalSelectedPatterns - : oldSelectedPatterns; + const selectedPatterns = useSelectedPatterns(PageScope.alerts); const alertsQuery = useMemo(() => buildAlertsQuery(alertIds), [alertIds]); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/cell_actions/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/cell_actions/index.test.tsx index ed588175d4637..65f4fa4efc1ba 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/cell_actions/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/cell_actions/index.test.tsx @@ -13,7 +13,17 @@ import { SECURITY_CELL_ACTIONS_DEFAULT } from '@kbn/ui-actions-plugin/common/tri jest.mock('../../../data_view_manager/hooks/use_data_view', () => ({ useDataView: jest.fn(() => ({ - dataView: { id: 'security-default-dataview-id', fields: { getByName: jest.fn() } }, + dataView: { + id: 'security-default-dataview-id', + fields: { + getByName: jest.fn().mockReturnValue({ + toSpec: jest.fn().mockReturnValue({ + searchable: true, + aggregatable: true, + }), + }), + }, + }, })), })); @@ -27,12 +37,6 @@ jest.mock('@kbn/cell-actions', () => ({ CellActions: jest.fn(() =>
), })); -const mockFieldSpec = { someFieldSpec: 'theFieldSpec' }; -const mockGetFieldSpec = jest.fn((_: string) => mockFieldSpec); -const mockUseGetFieldSpec = jest.fn((_: unknown) => mockGetFieldSpec); -jest.mock('../../hooks/use_get_field_spec', () => ({ - useGetFieldSpec: (param: unknown) => mockUseGetFieldSpec(param), -})); const mockDataViewId = 'security-default-dataview-id'; const mockUseDataViewId = jest.fn((_: unknown) => mockDataViewId); jest.mock('../../hooks/use_data_view_id', () => ({ @@ -91,7 +95,7 @@ describe('SecurityCellActions', () => { expect(MockCellActions).toHaveBeenCalledWith( expect.objectContaining({ - data: [{ field: mockFieldSpec, value: 'fieldValue' }], + data: [{ field: { aggregatable: true, searchable: true }, value: 'fieldValue' }], }), {} ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/cell_actions/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/cell_actions/index.tsx index 6938deb5b6404..bee3a69417789 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/cell_actions/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/cell_actions/index.tsx @@ -17,9 +17,6 @@ import type { EuiButtonIconProps } from '@elastic/eui'; import { PageScope } from '../../../data_view_manager/constants'; import type { SecurityCellActionMetadata } from '../../../app/actions/types'; import { SecurityCellActionType } from '../../../app/actions/constants'; -import { useGetFieldSpec } from '../../hooks/use_get_field_spec'; -import { useDataViewId } from '../../hooks/use_data_view_id'; -import { useIsExperimentalFeatureEnabled } from '../../hooks/use_experimental_features'; import { useDataView } from '../../../data_view_manager/hooks/use_data_view'; // bridge exports for convenience @@ -66,12 +63,8 @@ export const SecurityCellActions: React.FC = ({ children, ...props }) => { - const oldGetFieldSpec = useGetFieldSpec(sourcererScopeId); - const oldDataViewId = useDataViewId(sourcererScopeId); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const { dataView: experimentalDataView } = useDataView(sourcererScopeId); - const dataViewId = newDataViewPickerEnabled ? experimentalDataView.id : oldDataViewId; + const { dataView } = useDataView(sourcererScopeId); + const { id: dataViewId } = dataView; // Make a dependency key to prevent unnecessary re-renders when data object is defined inline // It is necessary because the data object is an array or an object and useMemo would always re-render @@ -81,14 +74,12 @@ export const SecurityCellActions: React.FC = ({ () => (Array.isArray(data) ? data : [data]) .map(({ field, value }) => ({ - field: newDataViewPickerEnabled - ? experimentalDataView.fields?.getByName(field)?.toSpec() - : oldGetFieldSpec(field), + field: dataView.fields?.getByName(field)?.toSpec(), value, })) .filter((item): item is CellActionsData => !!item.field), // eslint-disable-next-line react-hooks/exhaustive-deps -- Use the dependencyKey to prevent unnecessary re-renders - [dependencyKey, oldGetFieldSpec, newDataViewPickerEnabled, experimentalDataView.fields] + [dependencyKey, dataView.fields] ); const metadataWithDataView = useMemo(() => ({ ...metadata, dataViewId }), [dataViewId, metadata]); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/events_tab/events_query_tab_body.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/events_tab/events_query_tab_body.tsx index 7f8bf0184ebe3..f7c9ca339fa3c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/events_tab/events_query_tab_body.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/events_tab/events_query_tab_body.tsx @@ -15,7 +15,6 @@ import { dataTableActions } from '@kbn/securitysolution-data-table'; import { SECURITY_CELL_ACTIONS_DEFAULT } from '@kbn/ui-actions-plugin/common/trigger_ids'; import { PageScope } from '../../../data_view_manager/constants'; import { useBulkAddEventsToCaseActions } from '../../../cases/attachments/event/hooks/use_bulk_event_actions'; -import { useIsExperimentalFeatureEnabled } from '../../hooks/use_experimental_features'; import type { CustomBulkAction } from '../../../../common/types'; import { RowRendererValues } from '../../../../common/api/timeline'; import { StatefulEventsViewer } from '../events_viewer'; @@ -87,8 +86,6 @@ const EventsQueryTabBodyComponent: React.FC = }) => { let ACTION_BUTTON_COUNT = MAX_ACTION_BUTTON_COUNT; - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const dispatch = useDispatch(); const { globalFullScreen } = useGlobalFullScreen(); const [defaultNumberFormat] = useUiSetting$(DEFAULT_NUMBER_FORMAT); @@ -208,7 +205,7 @@ const EventsQueryTabBodyComponent: React.FC = filterQuery={matrixHistogramFilterQuery} {...(showExternalAlerts ? alertsHistogramConfig : eventsHistogramConfig)} subtitle={getHistogramSubtitle} - sourcererScopeId={newDataViewPickerEnabled ? PageScope.explore : PageScope.default} + pageScope={PageScope.explore} /> )} = leadingControlColumns={leadingControlColumns} renderCellValue={DefaultCellRenderer} rowRenderers={defaultRowRenderers} - sourcererScope={newDataViewPickerEnabled ? PageScope.explore : PageScope.default} + pageScope={PageScope.explore} tableId={tableId} unit={showExternalAlerts ? i18n.EXTERNAL_ALERTS_UNIT : i18n.EVENTS_UNIT} defaultModel={defaultModel} diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/events_viewer/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/events_viewer/index.test.tsx index 0d01b2b48d79f..847e40a11b13b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/events_viewer/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/events_viewer/index.test.tsx @@ -62,7 +62,7 @@ const testProps: EventsViewerProps = { leadingControlColumns: getDefaultControlColumn(ACTION_BUTTON_COUNT), renderCellValue: DefaultCellRenderer, rowRenderers: defaultRowRenderers, - sourcererScope: PageScope.default, + pageScope: PageScope.default, start: from, tableId: TableId.test, }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/events_viewer/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/events_viewer/index.tsx index eaad3c34b1270..30c1e8b4e65a8 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/events_viewer/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/events_viewer/index.tsx @@ -5,8 +5,6 @@ * 2.0. */ -/* TODO: (new data view picker) remove this after new picker is enabled */ - import { css } from '@emotion/react'; import type { SubsetDataTableModel, TableId } from '@kbn/securitysolution-data-table'; import { @@ -48,7 +46,6 @@ import type { RowRenderer, SortColumnTimeline as Sort } from '../../../../common import { InputsModelId } from '../../store/inputs/constants'; import type { State } from '../../store'; import { inputsActions } from '../../store/actions'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import type { CellValueElementProps } from '../../../timelines/components/timeline/cell_rendering'; import { useKibana } from '../../lib/kibana'; import type { FieldEditorActions } from '../../../timelines/components/fields_browser'; @@ -64,8 +61,6 @@ import type { BulkActionsProp } from '../toolbar/bulk_actions/types'; import { StatefulEventContext } from './stateful_event_context'; import { defaultUnit } from '../toolbar/unit'; import { globalFiltersQuerySelector, globalQuerySelector } from '../../store/inputs/selectors'; -import { useGetFieldSpec } from '../../hooks/use_get_field_spec'; -import { useIsExperimentalFeatureEnabled } from '../../hooks/use_experimental_features'; import { useSelectedPatterns } from '../../../data_view_manager/hooks/use_selected_patterns'; import { useBrowserFields } from '../../../data_view_manager/hooks/use_browser_fields'; @@ -82,7 +77,7 @@ export interface EventsViewerProps { pageFilters?: Filter[]; renderCellValue: React.FC; rowRenderers: RowRenderer[]; - sourcererScope: PageScope; + pageScope: PageScope; start: string; tableId: TableId; topRightMenuOptions?: React.ReactNode; @@ -107,7 +102,7 @@ const StatefulEventsViewerComponent: React.FC { - return newDataViewPickerEnabled - ? (experimentalDataView.getRuntimeMappings() as RunTimeMappings) ?? {} - : (oldSourcererDataView?.runtimeFieldMap as RunTimeMappings) ?? {}; - }, [newDataViewPickerEnabled, experimentalDataView, oldSourcererDataView]); - - const experimentalGetFieldSpec = useCallback( + return (dataView.getRuntimeMappings() as RunTimeMappings) ?? {}; + }, [dataView]); + const getFieldSpec = useCallback( (fieldName: string) => { - return experimentalDataView.fields?.getByName(fieldName)?.toSpec(); + return dataView.fields?.getByName(fieldName)?.toSpec(); }, - [experimentalDataView.fields] + [dataView.fields] ); - const getFieldSpec = newDataViewPickerEnabled ? experimentalGetFieldSpec : oldGetFieldSpec; const editorActionsRef = useRef(null); useEffect(() => { @@ -220,7 +193,7 @@ const StatefulEventsViewerComponent: React.FC @@ -244,22 +217,12 @@ const StatefulEventsViewerComponent: React.FC) => { const isEditMode = node != null; - const { sourcererDataView: oldSourcererDataView } = useSourcererDataView(PageScope.default); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - - const { dataView: experimentalDataView } = useDataView(PageScope.default); - const dataViewName = newDataViewPickerEnabled - ? experimentalDataView.name - : oldSourcererDataView.name; + const { dataView } = useDataView(PageScope.default); const { unifiedSearch: { @@ -310,12 +300,6 @@ const InsightEditorComponent = ({ uiSettings, } = useKibana().services; - const oldDataView = useGetScopedSourcererDataView({ - sourcererScope: PageScope.default, - }); - - const dataView = newDataViewPickerEnabled ? experimentalDataView : oldDataView; - const [providers, setProviders] = useState([[]]); const dateRangeChoices = useMemo(() => { const settings: Array<{ from: string; to: string; display: string }> = uiSettings.get( @@ -423,7 +407,7 @@ const InsightEditorComponent = ({ ); }, [labelController.field.value, providers, dataView]); const filtersStub = useMemo(() => { - const index = dataViewName ?? '*'; + const index = dataView.name ?? '*'; return [ { $state: { @@ -437,7 +421,7 @@ const InsightEditorComponent = ({ }, }, ]; - }, [dataViewName]); + }, [dataView.name]); const isPlatinum = useLicense().isAtLeast('platinum'); return ( diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_query.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_query.ts index a4a68b84ee5a2..bd54f584c7f4e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_query.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/use_insight_query.ts @@ -11,12 +11,10 @@ import { getEsQueryConfig } from '@kbn/data-plugin/common'; import type { DataProvider } from '@kbn/timelines-plugin/common'; import { DataLoadingState } from '@kbn/unified-data-table'; import { PageScope } from '../../../../../data_view_manager/constants'; -import { useIsExperimentalFeatureEnabled } from '../../../../hooks/use_experimental_features'; import { TimelineId } from '../../../../../../common/types/timeline'; import { useKibana } from '../../../../lib/kibana'; import { combineQueries } from '../../../../lib/kuery'; import { useTimelineEvents } from '../../../../../timelines/containers'; -import { useSourcererDataView } from '../../../../../sourcerer/containers'; import type { TimeRange } from '../../../../store/inputs/model'; import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { useSelectedPatterns } from '../../../../../data_view_manager/hooks/use_selected_patterns'; @@ -45,24 +43,9 @@ export const useInsightQuery = ({ }: UseInsightQuery): UseInsightQueryResult => { const { uiSettings } = useKibana().services; const esQueryConfig = useMemo(() => getEsQueryConfig(uiSettings), [uiSettings]); - const { - browserFields: oldBrowserFields, - selectedPatterns: oldSelectedPatterns, - sourcererDataView: oldSourcererDataView, - dataViewId: oldDataViewId, - } = useSourcererDataView(PageScope.timeline); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - - const { dataView: experimentalDataView } = useDataView(PageScope.timeline); - const experimentalSelectedPatterns = useSelectedPatterns(PageScope.timeline); - const experimentalBrowserFields = useBrowserFields(PageScope.timeline); - - const selectedPatterns = newDataViewPickerEnabled - ? experimentalSelectedPatterns - : oldSelectedPatterns; - const browserFields = newDataViewPickerEnabled ? experimentalBrowserFields : oldBrowserFields; - const dataViewId = newDataViewPickerEnabled ? experimentalDataView.id ?? '' : oldDataViewId; + const { dataView } = useDataView(PageScope.timeline); + const selectedPatterns = useSelectedPatterns(PageScope.timeline); + const browserFields = useBrowserFields(PageScope.timeline); const [hasError, setHasError] = useState(false); const combinedQueries = useMemo(() => { @@ -71,8 +54,7 @@ export const useInsightQuery = ({ const parsedCombinedQueries = combineQueries({ config: esQueryConfig, dataProviders, - dataViewSpec: oldSourcererDataView, - dataView: experimentalDataView, + dataView, browserFields, filters, kqlQuery: { @@ -87,18 +69,10 @@ export const useInsightQuery = ({ setHasError(true); return null; } - }, [ - hasError, - esQueryConfig, - dataProviders, - oldSourcererDataView, - experimentalDataView, - browserFields, - filters, - ]); + }, [hasError, esQueryConfig, dataProviders, dataView, browserFields, filters]); const [dataLoadingState, { events, totalCount }] = useTimelineEvents({ - dataViewId, + dataViewId: dataView.id ?? '', fields, filterQuery: combinedQueries?.filterQuery, id: TimelineId.active, diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/matrix_histogram/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/matrix_histogram/index.tsx index 89f1321a15a3a..f4bea695f1c24 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/matrix_histogram/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/matrix_histogram/index.tsx @@ -33,7 +33,7 @@ export type MatrixHistogramComponentProps = MatrixHistogramQueryProps & hideHistogramIfEmpty?: boolean; id: string; showSpacer?: boolean; - sourcererScopeId?: PageScope; + pageScope?: PageScope; hideQueryToggle?: boolean; applyGlobalQueriesAndFilters?: boolean; }; @@ -65,7 +65,7 @@ export const MatrixHistogramComponent: React.FC = stackByOptions, startDate, subtitle, - sourcererScopeId, + pageScope, title, titleSize, hideQueryToggle = false, @@ -194,7 +194,7 @@ export const MatrixHistogramComponent: React.FC = {toggleStatus ? ( void; - sourcererDataViewSpec?: DataViewSpec | undefined; // TODO remove when we remove the newDataViewPickerEnabled feature flag - dataView: DataView; - timelineId?: string; dataTestSubj?: string; + dataView: DataView; hideFilterBar?: boolean; hideQueryInput?: boolean; + id: InputsModelId.global | InputsModelId.timeline; + pollForSignalIndex?: () => void; + timelineId?: string; /** * Allows to hide the query menu button displayed to the left of the query input. */ @@ -61,6 +56,7 @@ interface SiemSearchBarProps { export const SearchBarComponent = memo( ({ + dataTestSubj, dataView, end, filterQuery, @@ -75,11 +71,9 @@ export const SearchBarComponent = memo( savedQuery, setSavedQuery, setSearchBarFilter, - sourcererDataViewSpec, start, toStr, updateSearch, - dataTestSubj, }) => { const { data: { @@ -91,7 +85,6 @@ export const SearchBarComponent = memo( unifiedSearch: { ui: { SearchBar }, }, - fieldFormats, } = useKibana().services; const dispatch = useDispatch(); @@ -304,20 +297,12 @@ export const SearchBarComponent = memo( // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); const dataViews: DataView[] | null = useMemo(() => { - if (newDataViewPickerEnabled) { - if (dataView != null) { - return [dataView]; - } - return null; - } - - if (sourcererDataViewSpec != null) { - return [new DataView({ spec: sourcererDataViewSpec, fieldFormats })]; + if (dataView != null) { + return [dataView]; } return null; - }, [newDataViewPickerEnabled, sourcererDataViewSpec, dataView, fieldFormats]); + }, [dataView]); const onTimeRangeChange = useCallback( ({ dateRange }: { dateRange: TimeRange }) => { @@ -363,7 +348,6 @@ export const SearchBarComponent = memo( prevProps.end === nextProps.end && prevProps.filterQuery === nextProps.filterQuery && prevProps.fromStr === nextProps.fromStr && - deepEqual(prevProps.sourcererDataViewSpec, nextProps.sourcererDataViewSpec) && prevProps.id === nextProps.id && prevProps.isLoading === nextProps.isLoading && prevProps.savedQuery === nextProps.savedQuery && diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/sessions_viewer/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/sessions_viewer/index.tsx index dfed025904988..51c684b702f5b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/sessions_viewer/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/sessions_viewer/index.tsx @@ -158,7 +158,7 @@ const SessionsViewComponent: React.FC = ({ leadingControlColumns={leadingControlColumns} renderCellValue={DefaultCellRenderer} rowRenderers={defaultRowRenderers} - sourcererScope={PageScope.default} + pageScope={PageScope.default} start={startDate} unit={unit} /> diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/tables/helpers.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/tables/helpers.test.tsx index 907b0a103d161..e69c7b988f9d9 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/tables/helpers.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/tables/helpers.test.tsx @@ -6,20 +6,18 @@ */ import React from 'react'; -import { screen, render, fireEvent } from '@testing-library/react'; +import { fireEvent, render, screen } from '@testing-library/react'; import { - RowItemOverflowComponent, - OverflowFieldComponent, getRowItemsWithActions, + OverflowFieldComponent, + RowItemOverflowComponent, } from './helpers'; import { TestProviders } from '../../mock'; import { getEmptyValue } from '../empty_value'; jest.mock('../../lib/kibana'); -jest.mock('../../hooks/use_get_field_spec'); - describe('Table Helpers', () => { const items = ['item1', 'item2', 'item3']; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/top_n/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/top_n/index.tsx index 371bcdc83b807..0c930c1c8379c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/top_n/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/top_n/index.tsx @@ -10,7 +10,7 @@ import type { ConnectedProps } from 'react-redux'; import { connect } from 'react-redux'; import type { Filter, Query } from '@kbn/es-query'; -import { type DataView, type DataViewSpec, getEsQueryConfig } from '@kbn/data-plugin/common'; +import { type DataView, getEsQueryConfig } from '@kbn/data-plugin/common'; import { isActiveTimeline } from '../../../helpers'; import { InputsModelId } from '../../store/inputs/constants'; import { useGlobalTime } from '../../containers/use_global_time'; @@ -77,7 +77,6 @@ const connector = connect(makeMapStateToProps); export interface OwnProps { browserFields: BrowserFields; field: string; - dataViewSpec?: DataViewSpec; dataView: DataView; scopeId?: string; toggleTopN: () => void; @@ -98,7 +97,6 @@ const StatefulTopNComponent: React.FC = ({ browserFields, dataProviders, field, - dataViewSpec, dataView, globalFilters = EMPTY_FILTERS, globalQuery = EMPTY_QUERY, @@ -122,7 +120,6 @@ const StatefulTopNComponent: React.FC = ({ config: getEsQueryConfig(uiSettings), dataProviders, filters: activeTimelineFilters, - dataViewSpec, dataView, kqlMode, kqlQuery: { @@ -137,7 +134,6 @@ const StatefulTopNComponent: React.FC = ({ uiSettings, dataProviders, activeTimelineFilters, - dataViewSpec, dataView, kqlMode, activeTimelineKqlQueryExpression, @@ -158,7 +154,6 @@ const StatefulTopNComponent: React.FC = ({ filters={isActiveTimeline(scopeId ?? '') ? EMPTY_FILTERS : globalFilters} from={isActiveTimeline(scopeId ?? '') ? activeTimelineFrom : from} dataView={dataView} - dataViewSpec={dataViewSpec} options={options} paddingSize={paddingSize} query={isActiveTimeline(scopeId ?? '') ? EMPTY_QUERY : globalQuery} diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/top_n/top_n.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/top_n/top_n.test.tsx index 08864ebd19fa1..52f61b15ad55f 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/top_n/top_n.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/top_n/top_n.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { fireEvent, render, screen, waitFor } from '@testing-library/react'; -import { mockDataViewSpec, TestProviders } from '../../mock'; +import { TestProviders } from '../../mock'; import { allEvents, defaultOptions } from './helpers'; import type { Props as TopNProps } from './top_n'; @@ -107,7 +107,6 @@ describe('TopN', () => { filters: [], from: '2020-04-14T00:31:47.695Z', dataView: createStubDataView({ spec: {} }), - dataViewSpec: mockDataViewSpec, options: defaultOptions, query, setAbsoluteRangeDatePickerTarget: InputsModelId.global, diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/top_n/top_n.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/top_n/top_n.tsx index eceee5ede0a46..129338e0f2c3e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/top_n/top_n.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/top_n/top_n.tsx @@ -10,7 +10,7 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { css } from '@emotion/react'; import type { Filter, Query } from '@kbn/es-query'; -import type { DataView, DataViewSpec } from '@kbn/data-plugin/common'; +import type { DataView } from '@kbn/data-plugin/common'; import type { GlobalTimeArgs } from '../../containers/use_global_time'; import { EventsByDataset } from '../../../overview/components/events_by_dataset'; import { SignalsByCategory } from '../../../overview/components/signals_by_category'; @@ -53,7 +53,6 @@ export interface Props extends Pick = ({ field, from, dataView, - dataViewSpec, options, paddingSize, query, @@ -126,7 +124,6 @@ const TopNComponent: React.FC = ({ from={from} headerChildren={headerChildren} dataView={dataView} - dataViewSpec={dataViewSpec} onlyField={field} paddingSize={paddingSize} query={query} diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/alerts_by_status_donut.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/alerts_by_status_donut.test.ts index b0def5a347ef6..23ea598472668 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/alerts_by_status_donut.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/alerts_by_status_donut.test.ts @@ -18,15 +18,6 @@ jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('generated-uuid'), })); -jest.mock('../../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - dataViewId: 'security-solution-my-test', - indicesExist: true, - selectedPatterns: ['signal-index'], - sourcererDataView: {}, - }), -})); - jest.mock('../../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/alerts_histogram.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/alerts_histogram.test.ts index 2d4af1d1d415e..f5ff48b714cb1 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/alerts_histogram.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/alerts_histogram.test.ts @@ -18,15 +18,6 @@ jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('generated-uuid'), })); -jest.mock('../../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - dataViewId: 'security-solution-my-test', - indicesExist: true, - selectedPatterns: ['signal-index'], - sourcererDataView: {}, - }), -})); - jest.mock('../../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/alerts_table.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/alerts_table.test.ts index 359527a02baa6..a7803332fbb2e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/alerts_table.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/alerts_table.test.ts @@ -26,15 +26,6 @@ jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('generated-uuid'), })); -jest.mock('../../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - dataViewId: 'security-solution-my-test', - indicesExist: true, - selectedPatterns: ['signal-index'], - sourcererDataView: {}, - }), -})); - jest.mock('../../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/rule_preview.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/rule_preview.test.ts index 6126439e6a7bc..93c628b3c34a8 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/rule_preview.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/rule_preview.test.ts @@ -19,15 +19,6 @@ jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('generated-uuid'), })); -jest.mock('../../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - dataViewId: 'security-solution-my-test', - indicesExist: true, - selectedPatterns: ['signal-index'], - sourcererDataView: {}, - }), -})); - jest.mock('../../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/authentication.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/authentication.test.ts index 1a23bad1ae9f4..ffc0a6050f5f0 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/authentication.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/authentication.test.ts @@ -19,15 +19,6 @@ jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('generated-uuid'), })); -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/event.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/event.test.ts index b265f7e70cb13..4c444d1fc21b0 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/event.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/event.test.ts @@ -24,15 +24,6 @@ jest.mock('uuid', () => ({ .mockReturnValue('e09e0380-0740-4105-becc-0a4ca12e3944'), })); -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/external_alert.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/external_alert.test.ts index a7c507a5bf2a7..28a62bd20e579 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/external_alert.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/external_alert.test.ts @@ -18,15 +18,6 @@ jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('generated-uuid'), })); -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_host_area.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_host_area.test.ts index 57bc1bee4108d..6be6df0cf3ec6 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_host_area.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_host_area.test.ts @@ -14,15 +14,6 @@ import { getKpiHostAreaLensAttributes } from './kpi_host_area'; import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { withIndices } from '../../../../../data_view_manager/hooks/__mocks__/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_host_metric.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_host_metric.test.ts index 771a048946735..99aaae9dae3e3 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_host_metric.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_host_metric.test.ts @@ -14,15 +14,6 @@ import { buildKpiHostMetricLensAttributes, kpiHostMetricLensAttributes } from '. import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { withIndices } from '../../../../../data_view_manager/hooks/__mocks__/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_area.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_area.test.ts index ede745a5698d2..c65f82c382e69 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_area.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_area.test.ts @@ -14,15 +14,6 @@ import { getKpiUniqueIpsAreaLensAttributes } from './kpi_unique_ips_area'; import { getMockDataViewWithMatchedIndices } from '../../../../../data_view_manager/mocks/mock_data_view'; import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_bar.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_bar.test.ts index c6e3a36ef9bee..c1f1983065f83 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_bar.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_bar.test.ts @@ -14,15 +14,6 @@ import { getKpiUniqueIpsBarLensAttributes } from './kpi_unique_ips_bar'; import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { withIndices } from '../../../../../data_view_manager/hooks/__mocks__/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_destination_metric.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_destination_metric.test.ts index ec80b1973d20f..5a59854ba4aa0 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_destination_metric.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_destination_metric.test.ts @@ -14,15 +14,6 @@ import { kpiUniqueIpsDestinationMetricLensAttributes } from './kpi_unique_ips_de import { getMockDataViewWithMatchedIndices } from '../../../../../data_view_manager/mocks/mock_data_view'; import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_source_metric.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_source_metric.test.ts index 22a0b7faa08ce..f89aaf55b1edc 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_source_metric.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/kpi_unique_ips_source_metric.test.ts @@ -14,15 +14,6 @@ import { kpiUniqueIpsSourceMetricLensAttributes } from './kpi_unique_ips_source_ import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { withIndices } from '../../../../../data_view_manager/hooks/__mocks__/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/dns_top_domains.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/dns_top_domains.test.ts index 9591e11b2ffec..f6c0875e7fa2b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/dns_top_domains.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/dns_top_domains.test.ts @@ -20,15 +20,6 @@ jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('generated-uuid'), })); -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_dns_queries.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_dns_queries.test.ts index ccb83b2f2cea9..942b74a95351d 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_dns_queries.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_dns_queries.test.ts @@ -14,15 +14,6 @@ import { kpiDnsQueriesLensAttributes } from './kpi_dns_queries'; import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { withIndices } from '../../../../../data_view_manager/hooks/__mocks__/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_network_events.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_network_events.test.ts index b86214f7ecb49..c247e3f5b8638 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_network_events.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_network_events.test.ts @@ -14,15 +14,6 @@ import { kpiNetworkEventsLensAttributes } from './kpi_network_events'; import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { withIndices } from '../../../../../data_view_manager/hooks/__mocks__/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_tls_handshakes.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_tls_handshakes.test.ts index b8652acc7587f..4e3d945a13805 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_tls_handshakes.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_tls_handshakes.test.ts @@ -14,15 +14,6 @@ import { kpiTlsHandshakesLensAttributes } from './kpi_tls_handshakes'; import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { withIndices } from '../../../../../data_view_manager/hooks/__mocks__/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_flow_ids.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_flow_ids.test.ts index 69c80febb6f51..98eacf3fedd0e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_flow_ids.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_flow_ids.test.ts @@ -14,15 +14,6 @@ import { kpiUniqueFlowIdsLensAttributes } from './kpi_unique_flow_ids'; import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { withIndices } from '../../../../../data_view_manager/hooks/__mocks__/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_area.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_area.test.ts index 7cea7e3cc4ccf..5f4c52d57b89a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_area.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_area.test.ts @@ -14,15 +14,6 @@ import { getKpiUniquePrivateIpsAreaLensAttributes } from './kpi_unique_private_i import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { withIndices } from '../../../../../data_view_manager/hooks/__mocks__/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_bar.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_bar.test.ts index 464cbba69886e..80c98a38a74fb 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_bar.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_bar.test.ts @@ -18,15 +18,6 @@ jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('generated-uuid'), })); -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_destination_metric.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_destination_metric.test.ts index 9e9380d10274e..0b7ed33f8e86e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_destination_metric.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_destination_metric.test.ts @@ -14,15 +14,6 @@ import { kpiUniquePrivateIpsDestinationMetricLensAttributes } from './kpi_unique import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { withIndices } from '../../../../../data_view_manager/hooks/__mocks__/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_source_metric.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_source_metric.test.ts index 30deab696c731..4867879299309 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_source_metric.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/kpi_unique_private_ips_source_metric.test.ts @@ -14,15 +14,6 @@ import { kpiUniquePrivateIpsSourceMetricLensAttributes } from './kpi_unique_priv import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { withIndices } from '../../../../../data_view_manager/hooks/__mocks__/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_total_users_area.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_total_users_area.test.ts index 026bf5120916d..6e71a8d84e44d 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_total_users_area.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_total_users_area.test.ts @@ -14,15 +14,6 @@ import { getKpiTotalUsersAreaLensAttributes } from './kpi_total_users_area'; import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { withIndices } from '../../../../../data_view_manager/hooks/__mocks__/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_total_users_metric.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_total_users_metric.test.ts index 19e60de0ab8a2..0a8b7607115d3 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_total_users_metric.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_total_users_metric.test.ts @@ -17,15 +17,6 @@ import { import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { withIndices } from '../../../../../data_view_manager/hooks/__mocks__/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentication_metric_failure.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentication_metric_failure.test.ts index ff43164cd7e38..a1a5797cea4e7 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentication_metric_failure.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentication_metric_failure.test.ts @@ -14,15 +14,6 @@ import { kpiUserAuthenticationsMetricFailureLensAttributes } from './kpi_user_au import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { withIndices } from '../../../../../data_view_manager/hooks/__mocks__/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentications_area.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentications_area.test.ts index 1f8c142bc4347..879269af14728 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentications_area.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentications_area.test.ts @@ -19,15 +19,6 @@ jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('generated-uuid'), })); -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentications_bar.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentications_bar.test.ts index 21ee989634cad..ddd3220173b2c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentications_bar.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentications_bar.test.ts @@ -19,15 +19,6 @@ jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('generated-uuid'), })); -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentications_metric_success.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentications_metric_success.test.ts index b6c1c8498a822..18ffe8abe0a8c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentications_metric_success.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/kpi_user_authentications_metric_success.test.ts @@ -14,15 +14,6 @@ import { kpiUserAuthenticationsMetricSuccessLensAttributes } from './kpi_user_au import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view'; import { withIndices } from '../../../../../data_view_manager/hooks/__mocks__/use_data_view'; -jest.mock('../../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.test.tsx index e1d75e2acb817..def64c6dba5f6 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.test.tsx @@ -12,14 +12,13 @@ import { useLensAttributes } from './use_lens_attributes'; import { fieldNameExistsFilter, getDetailsPageFilter, + getESQLGlobalFilters, getIndexFilters, - sourceOrDestinationIpExistsFilter, getNetworkDetailsPageFilter, - getESQLGlobalFilters, + sourceOrDestinationIpExistsFilter, } from './utils'; import { filterFromSearchBar, queryFromSearchBar, wrapper } from './mocks'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import { kpiHostMetricLensAttributes } from './lens_attributes/hosts/kpi_host_metric'; import { useRouteSpy } from '../../utils/route/use_route_spy'; import { SecurityPageName } from '../../../app/types'; @@ -36,7 +35,6 @@ jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('generated-uuid'), })); -jest.mock('../../../sourcerer/containers'); jest.mock('../../utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn(), })); @@ -56,12 +54,6 @@ describe('useLensAttributes', () => { }); beforeEach(() => { - (useSourcererDataView as jest.Mock).mockReturnValue({ - dataViewId: 'security-solution-default', - indicesExist: true, - selectedPatterns: ['auditbeat-*'], - sourcererDataView: {}, - }); (useRouteSpy as jest.Mock).mockReturnValue([ { detailName: 'mockHost', @@ -335,12 +327,6 @@ describe('useLensAttributes', () => { it('should return null if no indices exist', () => { jest.mocked(useDataView).mockImplementation(defaultImplementation); - (useSourcererDataView as jest.Mock).mockReturnValue({ - dataViewId: 'security-solution-default', - indicesExist: false, - selectedPatterns: ['auditbeat-*'], - sourcererDataView: {}, - }); const { result } = renderHook( () => useLensAttributes({ @@ -354,12 +340,6 @@ describe('useLensAttributes', () => { }); it('should return null if stackByField is an empty string', () => { - (useSourcererDataView as jest.Mock).mockReturnValue({ - dataViewId: 'security-solution-default', - indicesExist: false, - selectedPatterns: ['auditbeat-*'], - sourcererDataView: {}, - }); const { result } = renderHook( () => useLensAttributes({ @@ -373,12 +353,6 @@ describe('useLensAttributes', () => { }); it('should return null if extraOptions.breakDownField is an empty string', () => { - (useSourcererDataView as jest.Mock).mockReturnValue({ - dataViewId: 'security-solution-default', - indicesExist: false, - selectedPatterns: ['auditbeat-*'], - sourcererDataView: {}, - }); const { result } = renderHook( () => useLensAttributes({ @@ -395,12 +369,6 @@ describe('useLensAttributes', () => { }); it('should return Lens attributes if adHocDataViews exist', () => { - (useSourcererDataView as jest.Mock).mockReturnValue({ - dataViewId: 'security-solution-default', - indicesExist: false, - selectedPatterns: ['auditbeat-*'], - sourcererDataView: {}, - }); const { result } = renderHook( () => useLensAttributes({ diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.tsx index 2e8eeafebd19f..ee382ce85f941 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.tsx @@ -10,7 +10,6 @@ import { useEuiTheme } from '@elastic/eui'; import { PageScope } from '../../../data_view_manager/constants'; import { useDataView } from '../../../data_view_manager/hooks/use_data_view'; import { SecurityPageName } from '../../../../common/constants'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import { useDeepEqualSelector } from '../../hooks/use_selector'; import { inputsSelectors } from '../../store'; import { useRouteSpy } from '../../utils/route/use_route_spy'; @@ -23,7 +22,6 @@ import { getNetworkDetailsPageFilter, sourceOrDestinationIpExistsFilter, } from './utils'; -import { useIsExperimentalFeatureEnabled } from '../../hooks/use_experimental_features'; import { useSelectedPatterns } from '../../../data_view_manager/hooks/use_selected_patterns'; import { useGlobalFilterQuery } from '../../hooks/use_global_filter_query'; @@ -40,36 +38,16 @@ export const useLensAttributes = ({ signalIndexName, }: UseLensAttributesProps): LensAttributes | null => { const { euiTheme } = useEuiTheme(); - const { - selectedPatterns: oldSelectedPatterns, - dataViewId: oldDataViewId, - indicesExist: oldIndicesExist, - } = useSourcererDataView(scopeId); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - - const { dataView: experimentalDataView } = useDataView(scopeId); - const experimentalSelectedPatterns = useSelectedPatterns(scopeId); - - const dataViewId = newDataViewPickerEnabled ? experimentalDataView.id ?? '' : oldDataViewId; - const indicesExist = newDataViewPickerEnabled - ? !!experimentalDataView.matchedIndices?.length - : oldIndicesExist; - + const { dataView } = useDataView(scopeId); + const dataViewSelectedPatterns = useSelectedPatterns(scopeId); + const indicesExist = !!dataView.matchedIndices?.length; const selectedPatterns = useMemo(() => { if (signalIndexName) { return [signalIndexName]; - } else if (newDataViewPickerEnabled) { - return experimentalSelectedPatterns; } else { - return oldSelectedPatterns; + return dataViewSelectedPatterns; } - }, [ - experimentalSelectedPatterns, - newDataViewPickerEnabled, - oldSelectedPatterns, - signalIndexName, - ]); + }, [dataViewSelectedPatterns, signalIndexName]); const getGlobalQuerySelector = useMemo(() => inputsSelectors.globalQuerySelector(), []); const getGlobalFiltersQuerySelector = useMemo( @@ -166,7 +144,7 @@ export const useLensAttributes = ({ }, references: attrs?.references?.map((ref: { id: string; name: string; type: string }) => ({ ...ref, - id: dataViewId, + id: dataView.id ?? '', })), } as LensAttributes; }, [ @@ -185,7 +163,7 @@ export const useLensAttributes = ({ pageFilters, tabsFilters, filters, - dataViewId, + dataView.id, ]); return hasAdHocDataViews || (!hasAdHocDataViews && indicesExist) ? lensAttrsWithInjectedData diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/visualization_embeddable.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/visualization_embeddable.tsx index df94a53836aaf..698d5fc5eda47 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/visualization_embeddable.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/visualization_actions/visualization_embeddable.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useCallback, useEffect, useRef, useMemo } from 'react'; +import React, { useCallback, useEffect, useMemo, useRef } from 'react'; import { useDispatch } from 'react-redux'; import { css } from '@emotion/react'; @@ -18,9 +18,7 @@ import { InputsModelId } from '../../store/inputs/constants'; import { useRefetchByRestartingSession } from '../page/use_refetch_by_session'; import { LensEmbeddable } from './lens_embeddable'; import type { EmbeddableData, VisualizationEmbeddableProps } from './types'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import { useVisualizationResponse } from './use_visualization_response'; -import { useIsExperimentalFeatureEnabled } from '../../hooks/use_experimental_features'; const VisualizationEmbeddableComponent: React.FC = (props) => { const dispatch = useDispatch(); @@ -41,12 +39,8 @@ const VisualizationEmbeddableComponent: React.FC = queryId: id, }); - const { indicesExist: oldIndicesExist } = useSourcererDataView(lensProps.scopeId); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); const { dataView } = useDataView(lensProps.scopeId); - - const indicesExist = newDataViewPickerEnabled ? dataView.hasMatchedIndices() : oldIndicesExist; + const indicesExist = dataView.hasMatchedIndices(); const memorizedTimerange = useRef(lensProps.timerange); const getGlobalQuery = useMemo(() => inputsSelectors.globalQueryByIdSelector(), []); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/hooks/timeline/use_investigate_in_timeline.ts b/x-pack/solutions/security/plugins/security_solution/public/common/hooks/timeline/use_investigate_in_timeline.ts index 3bbb7bf3d2a98..90f058ca1ec24 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/hooks/timeline/use_investigate_in_timeline.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/hooks/timeline/use_investigate_in_timeline.ts @@ -8,20 +8,18 @@ import { useCallback } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import type { Filter, Query } from '@kbn/es-query'; +import { useSelectedPatterns } from '../../../data_view_manager/hooks/use_selected_patterns'; import { PageScope } from '../../../data_view_manager/constants'; import { useSelectDataView } from '../../../data_view_manager/hooks/use_select_data_view'; import { useCreateTimeline } from '../../../timelines/hooks/use_create_timeline'; import { applyKqlFilterQuery, setFilters, updateProviders } from '../../../timelines/store/actions'; import type { DataProvider } from '../../../../common/types'; -import type { State } from '../../store/types'; import { sourcererSelectors } from '../../store'; import { inputsActions } from '../../store/inputs'; import { InputsModelId } from '../../store/inputs/constants'; import type { TimeRange } from '../../store/inputs/model'; import { TimelineId } from '../../../../common/types/timeline'; import { TimelineTypeEnum } from '../../../../common/api/timeline'; -import { sourcererActions } from '../../store/actions'; -import { useIsExperimentalFeatureEnabled } from '../use_experimental_features'; interface InvestigateInTimelineArgs { /** @@ -64,10 +62,7 @@ export const useInvestigateInTimeline = () => { const signalIndexName = useSelector(sourcererSelectors.signalIndexName); const defaultDataView = useSelector(sourcererSelectors.defaultDataView); - const timelineSelectedPatterns = useSelector((state: State) => - sourcererSelectors.sourcererScopeSelectedPatterns(state, PageScope.timeline) - ); - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); + const timelineSelectedPatterns = useSelectedPatterns(PageScope.timeline); const clearTimelineTemplate = useCreateTimeline({ timelineId: TimelineId.active, @@ -141,37 +136,17 @@ export const useInvestigateInTimeline = () => { const fallbackPatterns = timelineSelectedPatterns.length ? timelineSelectedPatterns : [signalIndexName || '']; - if (newDataViewPickerEnabled) { - setSelectedDataView({ - scope: PageScope.timeline, - id: dataViewId, - fallbackPatterns, - }); - } else { - dispatch( - sourcererActions.setSelectedDataView({ - id: PageScope.timeline, - selectedDataViewId: dataViewId, - selectedPatterns: fallbackPatterns, - }) - ); - } + setSelectedDataView({ + scope: PageScope.timeline, + id: dataViewId, + fallbackPatterns, + }); } else if (!keepDataView) { - if (newDataViewPickerEnabled) { - setSelectedDataView({ - scope: PageScope.timeline, - id: defaultDataView.id, - fallbackPatterns: [signalIndexName || ''], - }); - } else { - dispatch( - sourcererActions.setSelectedDataView({ - id: PageScope.timeline, - selectedDataViewId: defaultDataView.id, - selectedPatterns: [signalIndexName || ''], - }) - ); - } + setSelectedDataView({ + scope: PageScope.timeline, + id: defaultDataView.id, + fallbackPatterns: [signalIndexName || ''], + }); } // Unlock the time range from the global time range dispatch(inputsActions.removeLinkTo([InputsModelId.timeline, InputsModelId.global])); @@ -181,7 +156,6 @@ export const useInvestigateInTimeline = () => { clearTimelineTemplate, clearTimelineDefault, dispatch, - newDataViewPickerEnabled, setSelectedDataView, defaultDataView.id, signalIndexName, diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/hooks/use_get_field_spec.ts b/x-pack/solutions/security/plugins/security_solution/public/common/hooks/use_get_field_spec.ts deleted file mode 100644 index 527d76595a7a6..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/common/hooks/use_get_field_spec.ts +++ /dev/null @@ -1,30 +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; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { useCallback, useMemo } from 'react'; -import { useSelector } from 'react-redux'; -import type { PageScope } from '../../data_view_manager/constants'; -import { sourcererSelectors } from '../../sourcerer/store'; -import type { State } from '../store'; - -export const useGetFieldSpec = (scopeId: PageScope) => { - const kibanaDataViews = useSelector(sourcererSelectors.kibanaDataViews); - const selectedDataViewId = useSelector((state: State) => - sourcererSelectors.sourcererScopeSelectedDataViewId(state, scopeId) - ); - const dataView = useMemo( - () => kibanaDataViews.find((dv) => dv.id === selectedDataViewId), - [kibanaDataViews, selectedDataViewId] - ); - return useCallback( - (fieldName: string) => { - const fields = dataView?.fields; - return fields && fields[fieldName]; - }, - [dataView?.fields] - ); -}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts b/x-pack/solutions/security/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts index ac4f6606f30f9..94eba01f74510 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts @@ -7,7 +7,6 @@ import React from 'react'; import type { RecursivePartial } from '@elastic/eui/src/components/common'; -import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; import { kqlPluginMock } from '@kbn/kql/public/mocks'; import { navigationPluginMock } from '@kbn/navigation-plugin/public/mocks'; @@ -29,11 +28,11 @@ import { DEFAULT_INTERVAL_PAUSE, DEFAULT_INTERVAL_VALUE, DEFAULT_REFRESH_RATE_INTERVAL, - DEFAULT_TIME_RANGE, - DEFAULT_TO, - DEFAULT_RULES_TABLE_REFRESH_SETTING, DEFAULT_RULE_REFRESH_INTERVAL_ON, DEFAULT_RULE_REFRESH_INTERVAL_VALUE, + DEFAULT_RULES_TABLE_REFRESH_SETTING, + DEFAULT_TIME_RANGE, + DEFAULT_TO, SECURITY_FEATURE_ID, } from '../../../../common/constants'; import type { StartServices } from '../../../types'; @@ -116,7 +115,6 @@ export const createStartServicesMock = ( const apm = mockApm(); const data = dataPluginMock.createStartContract(); const customDataService = dataPluginMock.createStartContract(); - const logger = loggingSystemMock.createLogger(); const security = securityMock.createSetup(); const urlService = new MockUrlService(); const locator = urlService.locators.create(new MlLocatorDefinition()); @@ -160,7 +158,6 @@ export const createStartServicesMock = ( apm, cases, kql, - logger, unifiedSearch, navigation, discover, diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/kuery/index.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/lib/kuery/index.test.ts index e93c5cf543be5..c7df7fa53a8e3 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/lib/kuery/index.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/kuery/index.test.ts @@ -8,7 +8,6 @@ import expect from '@kbn/expect'; import type { DataProvider } from '../../../../common/types/timeline'; import { buildGlobalQuery, convertToBuildEsQuery } from '.'; -import { mockDataViewSpec } from '../../mock'; import { createStubDataView } from '@kbn/data-views-plugin/common/data_views/data_view.stub'; describe('convertToBuildEsQuery', () => { @@ -164,7 +163,6 @@ describe('convertToBuildEsQuery', () => { config, dataView: createStubDataView({ spec: {} }), queries: queryWithNestedFields, - dataViewSpec: mockDataViewSpec, filters, }); @@ -181,7 +179,6 @@ describe('convertToBuildEsQuery', () => { config: configWithOverride, dataView: createStubDataView({ spec: {} }), queries: queryWithNestedFields, - dataViewSpec: mockDataViewSpec, filters, }); @@ -286,29 +283,6 @@ describe('convertToBuildEsQuery', () => { describe('When ignoreFilterIfFieldNotInIndex is true', () => { const updatedConfig = { ...config, ignoreFilterIfFieldNotInIndex: true }; - it('should use dataViewSpec when an empty dataView is provided', () => { - mockDataViewSpec.fields = { - _id: { - name: '_id', - type: 'string', - esTypes: ['keyword'], - aggregatable: true, - searchable: true, - scripted: false, - }, - }; - const emptyStubDataView = createStubDataView({ spec: { id: '', title: '' } }); - const [converted] = convertToBuildEsQuery({ - config: updatedConfig, - dataView: emptyStubDataView, // <-- empty dataView - queries: queryWithNestedFields, - dataViewSpec: mockDataViewSpec, // <-- should be used instead of the empty dataView - filters, - }); - - expect(JSON.parse(converted ?? '')).to.eql(expectedConverted); // just verify that something was built - }); - it('should not use the field if the filter is not mapped in the', () => { const updatedConvertedWithoutIdQuery = structuredClone(expectedConverted); updatedConvertedWithoutIdQuery.bool.filter = [updatedConvertedWithoutIdQuery.bool.filter[0]]; // remove the search bar filter @@ -322,7 +296,6 @@ describe('convertToBuildEsQuery', () => { config: updatedConfig, dataView: dataViewWithoutIdMapped, queries: queryWithNestedFields, - dataViewSpec: mockDataViewSpec, filters, }); @@ -350,7 +323,6 @@ describe('convertToBuildEsQuery', () => { config: updatedConfig, dataView: dataViewWithIdMapped, queries: queryWithNestedFields, - dataViewSpec: mockDataViewSpec, filters, }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/kuery/index.ts b/x-pack/solutions/security/plugins/security_solution/public/common/lib/kuery/index.ts index 26d6e2db69813..e04d0a6124efc 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/lib/kuery/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/kuery/index.ts @@ -14,7 +14,7 @@ import { } from '@kbn/es-query'; import { get, isEmpty } from 'lodash/fp'; import memoizeOne from 'memoize-one'; -import type { DataView, DataViewSpec } from '@kbn/data-plugin/common'; +import type { DataView } from '@kbn/data-plugin/common'; import { prepareKQLParam } from '../../../../common/utils/kql'; import type { BrowserFields } from '../../../../common/search_strategy'; import type { DataProvider, DataProvidersAnd } from '../../../../common/types'; @@ -30,10 +30,6 @@ export type PrimitiveOrArrayOfPrimitives = export interface CombineQueries { config: EsQueryConfig; dataProviders: DataProvider[]; - /** - * @deprecated Use `dataView` instead. Which accepts a DataView instance instead of a DataViewSpec. - */ - dataViewSpec?: DataViewSpec; dataView: DataView; browserFields: BrowserFields; filters: Filter[]; @@ -204,32 +200,22 @@ export const isDataProviderEmpty = (dataProviders: DataProvider[]) => { return isEmpty(dataProviders) || isEmpty(dataProviders.filter((d) => d.enabled === true)); }; -export const dataViewSpecToViewBase = (dataViewSpec?: DataViewSpec): DataViewBase => { - return { title: dataViewSpec?.title || '', fields: Object.values(dataViewSpec?.fields || {}) }; -}; - export const convertToBuildEsQuery = ({ config, - dataView, // New dataview with newDataViewPickerEnabled - dataViewSpec, // Account for the case where sourcerer is active, but this can just use dataView + dataView, queries, filters, }: { config: EsQueryConfig; dataView: DataView; - /** - * @deprecated Use `dataView` instead. Which accepts a DataView instance instead of a DataViewSpec. - */ - dataViewSpec?: DataViewSpec; // Ignored but kept for type compatibility queries: Query[]; filters: Filter[]; }): [string, undefined] | [undefined, Error] => { try { - const newDataViewExists = dataView?.id && dataView?.getIndexPattern(); return [ JSON.stringify( buildEsQuery( - newDataViewExists ? dataView : (dataViewSpecToViewBase(dataViewSpec) as DataView), + dataView, queries, filters.filter((f) => f.meta.disabled === false), { @@ -255,7 +241,6 @@ export interface CombinedQuery { export const combineQueries = ({ config, dataProviders = [], - dataViewSpec, dataView, browserFields, filters = [], @@ -269,7 +254,6 @@ export const combineQueries = ({ const [filterQuery, kqlError] = convertToBuildEsQuery({ config, queries: [kuery], - dataViewSpec, dataView, filters, }); @@ -298,7 +282,6 @@ export const combineQueries = ({ const [filterQuery, kqlError] = convertToBuildEsQuery({ config, queries: [kuery], - dataViewSpec, dataView, filters, }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/store/reducer.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/store/reducer.test.tsx deleted file mode 100644 index 2df9f1e28a536..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/common/store/reducer.test.tsx +++ /dev/null @@ -1,123 +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; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import React from 'react'; -import { parseExperimentalConfigValue } from '../../../common/experimental_features'; -import type { SecuritySubPlugins } from '../../app/types'; -import { createInitialState } from './reducer'; -import { mockIndexPattern, mockSourcererState, TestProviders, createMockStore } from '../mock'; -import { useSourcererDataView } from '../../sourcerer/containers'; -import { renderHook } from '@testing-library/react'; -import { initialGroupingState } from './grouping/reducer'; -import { initialAnalyzerState } from '../../resolver/store/helpers'; -import { initialNotesState } from '../../notes/store/notes.slice'; - -jest.mock('../hooks/use_selector'); -jest.mock('../lib/kibana', () => { - const original = jest.requireActual('../lib/kibana'); - return { - ...original, - useKibana: () => ({ - ...original.useKibana(), - services: { - ...original.useKibana().services, - upselling: { - ...original.useKibana().services.upselling, - featureUsage: { - ...original.useKibana().services.upselling.featureUsage, - hasShown: jest.fn(), - }, - }, - }, - }), - KibanaServices: { - get: jest.fn(() => ({ uiSettings: { get: () => ({ from: 'now-24h', to: 'now' }) } })), - }, - }; -}); -jest.mock('../containers/source', () => ({ - useFetchIndex: () => [ - false, - { indexes: [], indicesExist: true, indexPatterns: mockIndexPattern }, - ], -})); - -// TODO: this is more of a hook test, a reducer is a pure function and should not need hooks and context to test. -describe('createInitialState', () => { - describe('sourcerer -> default -> indicesExist', () => { - const mockPluginState = {} as Omit< - SecuritySubPlugins['store']['initialState'], - 'app' | 'dragAndDrop' | 'inputs' | 'sourcerer' - >; - const defaultState = { - defaultDataView: mockSourcererState.defaultDataView, - enableExperimental: parseExperimentalConfigValue([]).features, - kibanaDataViews: [mockSourcererState.defaultDataView], - signalIndexName: 'siem-signals-default', - signalIndexMappingOutdated: false, - }; - const initState = createInitialState( - mockPluginState, - defaultState, - { - dataTable: { tableById: {} }, - }, - { - groups: initialGroupingState, - }, - { - analyzer: initialAnalyzerState, - }, - initialNotesState - ); - - test('indicesExist should be TRUE if patternList is NOT empty', async () => { - const { result } = renderHook(() => useSourcererDataView(), { - wrapper: ({ children }: React.PropsWithChildren<{}>) => ( - {children} - ), - }); - expect(result.current.indicesExist).toEqual(true); - }); - - test('indicesExist should be FALSE if patternList is empty', () => { - const state = createInitialState( - mockPluginState, - { - ...defaultState, - defaultDataView: { - ...defaultState.defaultDataView, - patternList: [], - }, - kibanaDataViews: [ - { - ...defaultState.defaultDataView, - patternList: [], - }, - ], - }, - { - dataTable: { - tableById: {}, - }, - }, - { - groups: initialGroupingState, - }, - { - analyzer: initialAnalyzerState, - }, - initialNotesState - ); - const { result } = renderHook(() => useSourcererDataView(), { - wrapper: ({ children }: React.PropsWithChildren<{}>) => ( - {children} - ), - }); - expect(result.current.indicesExist).toEqual(false); - }); - }); -}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/store/store.ts b/x-pack/solutions/security/plugins/security_solution/public/common/store/store.ts index 871f4e9bc40eb..cca67e86ce522 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/store/store.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/store/store.ts @@ -8,12 +8,12 @@ import thunk from 'redux-thunk'; import type { Action, - Store, - Middleware, + AnyAction, Dispatch, + Middleware, PreloadedState, - AnyAction, Reducer, + Store, } from 'redux'; import { applyMiddleware, createStore as createReduxStore } from 'redux'; import { composeWithDevTools } from 'redux-devtools-extension/developmentOnly'; @@ -58,8 +58,7 @@ export const createStoreFactory = async ( const { kibanaDataViews, defaultDataView, signal } = await createDefaultDataView({ application: coreStart.application, http: coreStart.http, - // TODO: (new data view picker) remove this in cleanup phase https://github.com/elastic/security-team/issues/12665 - skip: enableExperimental.newDataViewPickerEnabled, + skip: true, }); const timelineInitialState = { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/utils/timeline/use_show_timeline.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/utils/timeline/use_show_timeline.test.tsx index 51cc1decc08b0..8a4fdd0f36986 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/utils/timeline/use_show_timeline.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/utils/timeline/use_show_timeline.test.tsx @@ -38,16 +38,6 @@ jest.mock('react-router-dom', () => { }; }); -const mockUseSourcererDataView = jest.fn( - (): { indicesExist: boolean; dataViewId: string | null } => ({ - indicesExist: true, - dataViewId: null, - }) -); -jest.mock('../../../sourcerer/containers', () => ({ - useSourcererDataView: () => mockUseSourcererDataView(), -})); - jest.mocked(useDataView).mockImplementation(withMatchedIndices); const mockUseUserPrivileges = useUserPrivileges as jest.Mock; @@ -120,20 +110,17 @@ it('shows timeline for users with timeline read access', async () => { describe('sourcererDataView', () => { it('should show timeline when indices exist', () => { - mockUseSourcererDataView.mockReturnValueOnce({ indicesExist: true, dataViewId: 'test' }); const { result } = renderUseShowTimeline(); expect(result.current).toEqual([true]); }); it('should show timeline when dataViewId is null', () => { - mockUseSourcererDataView.mockReturnValueOnce({ indicesExist: false, dataViewId: null }); const { result } = renderUseShowTimeline(); expect(result.current).toEqual([true]); }); it('should show timeline even when indices do not exist (data view state does not gate visibility)', () => { jest.mocked(useDataView).mockImplementation(defaultImplementation); - mockUseSourcererDataView.mockReturnValueOnce({ indicesExist: false, dataViewId: 'test' }); const { result } = renderUseShowTimeline(); expect(result.current).toEqual([true]); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/utils/timeline/use_show_timeline_for_path.ts b/x-pack/solutions/security/plugins/security_solution/public/common/utils/timeline/use_show_timeline_for_path.ts index 6cea58c4305ab..1c23c79903892 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/utils/timeline/use_show_timeline_for_path.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/utils/timeline/use_show_timeline_for_path.ts @@ -8,7 +8,6 @@ import { useCallback, useMemo } from 'react'; import { matchPath } from 'react-router-dom'; import { SecurityPageName } from '@kbn/security-solution-navigation'; - import { ARTIFACT_MANAGEMENT_TAB_ROUTING_PATHS } from '../../../management/common/constants'; import type { NormalizedLink } from '../../links'; import { useNormalizedAppLinks } from '../../links/links_hooks'; @@ -17,7 +16,7 @@ import { hasAccessToSecuritySolution } from '../../../helpers_access'; const useHiddenTimelineRoutes = () => { const normalizedLinks = useNormalizedAppLinks(); - const hiddenTimelineRoutes = useMemo( + return useMemo( () => Object.values(normalizedLinks).reduce((acc: string[], link: NormalizedLink) => { if (link.hideTimeline) { @@ -31,7 +30,6 @@ const useHiddenTimelineRoutes = () => { }, []), [normalizedLinks] ); - return hiddenTimelineRoutes; }; export const useShowTimelineForGivenPath = () => { diff --git a/x-pack/solutions/security/plugins/security_solution/public/dashboards/pages/details/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/dashboards/pages/details/index.tsx index 5137de3442eaa..2a367179a6910 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/dashboards/pages/details/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/dashboards/pages/details/index.tsx @@ -23,12 +23,10 @@ import { SiemSearchBar } from '../../../common/components/search_bar'; import { SecuritySolutionPageWrapper } from '../../../common/components/page_wrapper'; import { FiltersGlobal } from '../../../common/components/filters_global'; import { InputsModelId } from '../../../common/store/inputs/constants'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import { HeaderPage } from '../../../common/components/header_page'; import { inputsSelectors } from '../../../common/store'; import { useDeepEqualSelector } from '../../../common/hooks/use_selector'; import { DashboardToolBar } from '../../components/dashboard_tool_bar'; - import { useDashboardRenderer } from '../../hooks/use_dashboard_renderer'; import { DashboardTitle } from '../../components/dashboard_title'; @@ -52,7 +50,6 @@ const DashboardViewComponent: React.FC = ({ ); const query = useDeepEqualSelector(getGlobalQuerySelector); const filters = useDeepEqualSelector(getGlobalFiltersQuerySelector); - const { sourcererDataView: oldSourcererDataViewSpec } = useSourcererDataView(); const { show: canReadDashboard } = useCapabilities('dashboard_v2'); const errorState = useMemo( @@ -68,16 +65,12 @@ const DashboardViewComponent: React.FC = ({ const onDashboardToolBarLoad = useCallback((mode: ViewMode) => { setViewMode(mode); }, []); - const { dataView: experimentalDataView } = useDataView(); + const { dataView } = useDataView(); return ( <> - + { } `); }); - - it('should use the passed in dataView when the feature flag is disabled', () => { - jest.mocked(useIsExperimentalFeatureEnabled).mockReturnValue(false); - const oldDataView = new DataView({ - spec: { - id: 'old-dataView', - title: 'security-solution-data-view-old', - fields: { - '@timestamp': { - name: '@timestamp', - type: 'date', - esTypes: ['date'], - aggregatable: true, - searchable: true, - scripted: false, - }, - }, - }, - // @ts-expect-error: DataView constructor expects more, but this is enough for our test - fieldFormats: { getDefaultInstance: () => ({}) }, - }); - const wrapper = renderHook(() => useBrowserFields(PageScope.default, oldDataView), { - wrapper: TestProviders, - }); - - expect(wrapper.result.current).toMatchInlineSnapshot(` - Object { - "base": Object { - "fields": Object { - "@timestamp": Object { - "aggregatable": true, - "esTypes": Array [ - "date", - ], - "name": "@timestamp", - "scripted": false, - "searchable": true, - "shortDotsEnable": false, - "type": "date", - }, - }, - }, - } - `); - }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_browser_fields.ts b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_browser_fields.ts index 00f7ea48fbecc..57e38f637077e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_browser_fields.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_browser_fields.ts @@ -7,32 +7,20 @@ import { useMemo } from 'react'; import type { BrowserFields } from '@kbn/timelines-plugin/common'; -import type { DataView } from '@kbn/data-views-plugin/common'; import { PageScope } from '../constants'; import { useDataView } from './use_data_view'; import { buildBrowserFields } from '../utils/build_browser_fields'; -import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; -const emptyFields = {}; +const emptyFields = {} as BrowserFields; -export const useBrowserFields = ( - scope: PageScope = PageScope.default, - /** - * @deprecated remove when newDataViewPickerEnabled is removed - */ - oldDataView?: DataView -): BrowserFields => { +export const useBrowserFields = (scope: PageScope = PageScope.default): BrowserFields => { const { dataView } = useDataView(scope); - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const activeDataView = newDataViewPickerEnabled ? dataView : oldDataView; return useMemo(() => { - if (!activeDataView?.id) { + if (!dataView?.id) { return emptyFields; } - const browserFields = buildBrowserFields(activeDataView?.fields); - - return browserFields; - }, [activeDataView]); + return buildBrowserFields(dataView?.fields); + }, [dataView]); }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view.test.ts b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view.test.ts index 65bb3e16d3f66..3e7dd613a4d34 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view.test.ts @@ -7,11 +7,8 @@ import { act, renderHook, waitFor } from '@testing-library/react'; import { DataView } from '@kbn/data-views-plugin/public'; -import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; - import { DEFAULT_SECURITY_SOLUTION_DATA_VIEW_ID, PageScope } from '../constants'; import { useDataView } from './use_data_view'; -import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; import { useSelector } from 'react-redux'; import type { FieldFormatsStartCommon } from '@kbn/field-formats-plugin/common'; @@ -24,7 +21,6 @@ jest.mock('react-redux', () => ({ const mockGet = jest.fn(); const mockToastsDanger = jest.fn(); -const mockLogger = loggingSystemMock.createLogger(); const mockNotifications = { toasts: { @@ -49,7 +45,6 @@ jest.mock('../../common/lib/kibana', () => { services: { dataViews: mockDataViews, notifications: mockNotifications, - logger: mockLogger, }, }), }; @@ -58,7 +53,6 @@ jest.mock('../../common/lib/kibana', () => { describe('useDataView', () => { beforeEach(() => { jest.clearAllMocks(); - jest.mocked(useIsExperimentalFeatureEnabled).mockReturnValue(true); jest .mocked(useSelector) .mockReturnValue({ dataViewId: DEFAULT_SECURITY_SOLUTION_DATA_VIEW_ID, status: 'ready' }); @@ -111,16 +105,6 @@ describe('useDataView', () => { }); }); - it('should not call get if newDataViewPickerEnabled is false', async () => { - jest.mocked(useIsExperimentalFeatureEnabled).mockReturnValue(false); - - const { result, rerender } = renderHook(() => useDataView(PageScope.default)); - - await act(async () => rerender(PageScope.default)); - expect(mockGet).not.toHaveBeenCalled(); - expect(result.current.status).toBe('pristine'); - }); - it('should not call get if dataViewId is missing', async () => { jest.mocked(useSelector).mockReturnValue({ dataViewId: undefined, status: 'ready' }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view.ts b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view.ts index 932a4c194cfa3..bdb177fd33553 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view.ts @@ -7,15 +7,12 @@ import { useEffect, useMemo, useRef, useState } from 'react'; import { DataView } from '@kbn/data-views-plugin/public'; - import { useSelector } from 'react-redux'; import { type FieldFormatsStartCommon } from '@kbn/field-formats-plugin/common'; import { useKibana } from '../../common/lib/kibana'; import { PageScope } from '../constants'; -import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; import { sourcererAdapterSelector } from '../redux/selectors'; import type { SharedDataViewSelectionState } from '../redux/types'; -import { useDataViewManagerLogger } from './use_data_view_logger'; const INITIAL_DV = new DataView({ fieldFormats: {} as FieldFormatsStartCommon, @@ -40,8 +37,6 @@ export const useDataView = ( const { dataViewId, status: internalStatus } = useSelector( sourcererAdapterSelector(dataViewManagerScope) ); - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const logger = useDataViewManagerLogger('useDataView'); const [localStatus, setLocalStatus] = useState('pristine'); const [retrievedDataView, setRetrievedDataView] = useState(INITIAL_DV); @@ -49,21 +44,11 @@ export const useDataView = ( useEffect(() => { (async () => { - if (!newDataViewPickerEnabled) { - return; - } - if (!dataViewId || internalStatus !== 'ready') { - logger.debug( - `Data view not loaded yet. dataViewId: ${dataViewId}, internalStatus: ${internalStatus}` - ); return; } if (loadedForTheFirstTimeRef.current) { - logger.debug( - `DataView has loaded once already. Updating data view status to loading for scope ${dataViewManagerScope}...` - ); setLocalStatus('loading'); } @@ -71,16 +56,13 @@ export const useDataView = ( // TODO: remove conditional .get call when new data view picker is stabilized // this is due to the fact that many of our tests mock kibana hook and do not provide proper // double for dataViews service - logger.debug(`Fetching data view with ID: ${dataViewId}...`); const currDv = await dataViews?.get(dataViewId); if (!loadedForTheFirstTimeRef.current) { loadedForTheFirstTimeRef.current = true; } - logger.debug(`Data view with ID: ${dataViewId} fetched successfully.`); setRetrievedDataView(currDv); setLocalStatus('ready'); } catch (error) { - logger.error(`Error fetching data view with ID: ${dataViewId}`, error); // TODO: (remove conditional call when feature flag is on (mocks are broken for some tests)) notifications?.toasts?.addDanger({ title: 'Error retrieving data view', @@ -89,23 +71,10 @@ export const useDataView = ( setLocalStatus('error'); } })(); - // This is specifically for the logger as it looks to create a new instance on every run of this hook - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [ - dataViews, - dataViewId, - internalStatus, - notifications, - newDataViewPickerEnabled, - // logger, - dataViewManagerScope, - ]); - - return useMemo(() => { - if (!newDataViewPickerEnabled) { - return { dataView: retrievedDataView, status: localStatus }; - } + }, [dataViewManagerScope, dataViews, dataViewId, internalStatus, notifications]); - return { dataView: retrievedDataView, status: localStatus }; - }, [newDataViewPickerEnabled, retrievedDataView, localStatus]); + return useMemo( + () => ({ dataView: retrievedDataView, status: localStatus }), + [retrievedDataView, localStatus] + ); }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view_logger.ts b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view_logger.ts deleted file mode 100644 index fe57f245154de..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view_logger.ts +++ /dev/null @@ -1,15 +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; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import { useKibana } from '../../common/lib/kibana'; - -export const DATA_VIEW_LOGGER_NAME = 'dataViewManager'; - -export const useDataViewManagerLogger = (...childContextPaths: string[]) => { - const services = useKibana().services; - childContextPaths.unshift(DATA_VIEW_LOGGER_NAME); - return services.logger.get(...childContextPaths); -}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_init_data_view_manager.ts b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_init_data_view_manager.ts index e6610fdcf24ea..51cc1c8000504 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_init_data_view_manager.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_init_data_view_manager.ts @@ -20,9 +20,7 @@ import { createInitListener } from '../redux/listeners/init_listener'; import { sharedDataViewManagerSlice } from '../redux/slices'; import { type SelectDataViewAsyncPayload } from '../redux/actions'; import { PageScope } from '../constants'; -import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; import { useUserInfo } from '../../detections/components/user_info'; -import { useDataViewManagerLogger } from './use_data_view_logger'; type OriginalListener = Parameters[0]; @@ -43,18 +41,11 @@ const removeListener = (listener: Listener) => export const useInitDataViewManager = () => { const dispatch = useDispatch(); const services = useKibana().services; - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); const enableAlertsAndAttacksAlignment = services.uiSettings.get( ENABLE_ALERTS_AND_ATTACKS_ALIGNMENT_SETTING, false ); - const logger = useDataViewManagerLogger('useInitDataViewManager'); - const createInitListenerLogger = useDataViewManagerLogger('createInitListener'); - const createDataViewSelectedListenerLogger = useDataViewManagerLogger( - 'createDataViewSelectedListener' - ); - const { loading: loadingSignalIndex, signalIndexName, @@ -69,17 +60,10 @@ export const useInitDataViewManager = () => { isOutdated: !!signalIndexMappingOutdated, }) ); - logger.debug(`signal index set: ${signalIndexName}`); } - }, [dispatch, loadingSignalIndex, logger, signalIndexMappingOutdated, signalIndexName]); + }, [dispatch, loadingSignalIndex, signalIndexMappingOutdated, signalIndexName]); useEffect(() => { - // TODO: (new data view picker) remove this in cleanup phase https://github.com/elastic/security-team/issues/12665 - // Also, make sure it works exactly as x-pack/solutions/security/plugins/security_solution/public/sourcerer/containers/use_init_sourcerer.tsx - if (!newDataViewPickerEnabled) { - return; - } - onSignalIndexUpdated(); // because we only want onSignalIndexUpdated to run when signalIndexName updates, // but we want to know about the updates from the dependencies of onSignalIndexUpdated @@ -87,11 +71,6 @@ export const useInitDataViewManager = () => { }, [signalIndexName]); useEffect(() => { - // TODO: (new data view picker) remove this in cleanup phase https://github.com/elastic/security-team/issues/12665 - if (!newDataViewPickerEnabled) { - return; - } - // NOTE: init listener contains logic that preloads default security solution data view const dataViewsLoadingListener = createInitListener( { @@ -102,13 +81,10 @@ export const useInitDataViewManager = () => { application: services.application, spaces: services.spaces, storage: services.storage, - logger: createInitListenerLogger, }, enableAlertsAndAttacksAlignment ); - logger.debug('Registering data view manager listeners'); - dispatch(addListener(dataViewsLoadingListener)); // NOTE: Every scope has its own listener instance; this allows for cancellation @@ -126,12 +102,9 @@ export const useInitDataViewManager = () => { dataViews: services.dataViews, notifications: services.notifications, storage: services.storage, - logger: createDataViewSelectedListenerLogger, }) ); - logger.debug('Registering data view selected listeners for all scopes'); - listeners.forEach((dataViewSelectedListener) => { dispatch(addListener(dataViewSelectedListener)); }); @@ -139,36 +112,26 @@ export const useInitDataViewManager = () => { // NOTE: this kicks off the data loading in the Data View Picker return () => { - logger.debug('Cleaning up listeners'); dispatch(removeListener(dataViewsLoadingListener)); listeners.forEach((dataViewSelectedListener) => { - logger.debug(`Removed listener for scope ${dataViewSelectedListener.actionCreator.name}`); dispatch(removeListener(dataViewSelectedListener)); }); }; }, [ enableAlertsAndAttacksAlignment, dispatch, - logger, - newDataViewPickerEnabled, services.application, services.dataViews, services.http, services.notifications, - createInitListenerLogger, services.spaces, services.storage, services.uiSettings, - createDataViewSelectedListenerLogger, ]); return useCallback( - (initialSelection: SelectDataViewAsyncPayload[]) => { - logger.debug( - `Initializing Data View Manager with initial selection: ${JSON.stringify(initialSelection)}` - ); - dispatch(sharedDataViewManagerSlice.actions.init(initialSelection)); - }, - [dispatch, logger] + (initialSelection: SelectDataViewAsyncPayload[]) => + dispatch(sharedDataViewManagerSlice.actions.init(initialSelection)), + [dispatch] ); }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_sync_url_state.test.ts b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_sync_url_state.test.ts index f8d1ae97d1914..0263b0a17db7e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_sync_url_state.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_sync_url_state.test.ts @@ -6,82 +6,14 @@ */ import { renderHook } from '@testing-library/react'; -import { - useRestoreDataViewManagerStateFromURL, - useSyncSourcererUrlState, -} from './use_sync_url_state'; -import * as reactRedux from 'react-redux'; -import * as experimentalFeatures from '../../common/hooks/use_experimental_features'; +import { useRestoreDataViewManagerStateFromURL } from './use_sync_url_state'; import * as globalQueryString from '../../common/utils/global_query_string'; import { PageScope } from '../constants'; -jest.mock('react-redux'); -jest.mock('../../common/hooks/use_experimental_features'); jest.mock('../../common/utils/global_query_string'); -jest.mock('../../common/store/selectors'); -jest.mock('./use_select_data_view'); - -describe('useSyncSourcererUrlState', () => { - const mockDispatch = jest.fn(); - const mockUpdateUrlParam = jest.fn(); - const mockUseSelector = reactRedux.useSelector as jest.Mock; - const mockUseDispatch = reactRedux.useDispatch as jest.Mock; - const mockUseIsExperimentalFeatureEnabled = - experimentalFeatures.useIsExperimentalFeatureEnabled as jest.Mock; - const mockUseUpdateUrlParam = globalQueryString.useUpdateUrlParam as jest.Mock; - const mockUseInitializeUrlParam = globalQueryString.useInitializeUrlParam as jest.Mock; - - beforeEach(() => { - jest.clearAllMocks(); - mockUseDispatch.mockReturnValue(mockDispatch); - mockUseUpdateUrlParam.mockReturnValue(mockUpdateUrlParam); - mockUseInitializeUrlParam.mockImplementation((_key, cb) => cb); - mockUseSelector.mockImplementation((fn) => fn({})); - }); - - it('should not dispatch or update url param if newDataViewPickerEnabled is true', () => { - mockUseIsExperimentalFeatureEnabled.mockReturnValue(true); - renderHook(() => useSyncSourcererUrlState(PageScope.default)); - // Simulate onInitializeUrlParam call - const onInitializeUrlParam = mockUseInitializeUrlParam.mock.calls[0][1]; - onInitializeUrlParam({ default: { id: 'test-id', selectedPatterns: ['a'] } }); - expect(mockDispatch).not.toHaveBeenCalled(); - expect(mockUpdateUrlParam).not.toHaveBeenCalled(); - }); - - it('should dispatch setSelectedDataView if newDataViewPickerEnabled is false and initialState is provided', () => { - mockUseIsExperimentalFeatureEnabled.mockReturnValue(false); - renderHook(() => useSyncSourcererUrlState(PageScope.default)); - const onInitializeUrlParam = mockUseInitializeUrlParam.mock.calls[0][1]; - onInitializeUrlParam({ default: { id: 'test-id', selectedPatterns: ['a'] } }); - expect(mockDispatch).toHaveBeenCalledWith({ - payload: { - id: 'default', - selectedDataViewId: 'test-id', - selectedPatterns: ['a'], - }, - type: 'x-pack/security_solution/local/sourcerer/SET_SELECTED_DATA_VIEW', - }); - }); - - it('should update url param if newDataViewPickerEnabled is false and initialState is null', () => { - mockUseIsExperimentalFeatureEnabled.mockReturnValue(false); - mockUseSelector - .mockReturnValueOnce('test-id') // scopeDataViewId - .mockReturnValueOnce(['a']); // selectedPatterns - renderHook(() => useSyncSourcererUrlState(PageScope.default)); - const onInitializeUrlParam = mockUseInitializeUrlParam.mock.calls[0][1]; - onInitializeUrlParam(null); - expect(mockUpdateUrlParam).toHaveBeenCalledWith({ - default: { id: 'test-id', selectedPatterns: ['a'] }, - }); - }); -}); describe('useRestoreDataViewManagerStateFromURL', () => { - const mockUseIsExperimentalFeatureEnabled = - experimentalFeatures.useIsExperimentalFeatureEnabled as jest.Mock; const mockUseInitializeUrlParam = globalQueryString.useInitializeUrlParam as jest.Mock; beforeEach(() => { @@ -89,20 +21,8 @@ describe('useRestoreDataViewManagerStateFromURL', () => { mockUseInitializeUrlParam.mockImplementation((_key, cb) => cb); }); - it('should not call initDataViewSelection if newDataViewPickerEnabled is false', () => { - const initDataViewSelection = jest.fn(); - mockUseIsExperimentalFeatureEnabled.mockReturnValue(false); - renderHook(() => - useRestoreDataViewManagerStateFromURL(initDataViewSelection, PageScope.default) - ); - const onInitializeUrlParam = mockUseInitializeUrlParam.mock.calls[0][1]; - onInitializeUrlParam({ default: { id: 'test-id', selectedPatterns: ['a'] } }); - expect(initDataViewSelection).not.toHaveBeenCalled(); - }); - - it('should call initDataViewSelection for each scope if newDataViewPickerEnabled is true', () => { + it('should call initDataViewSelection for each scope', () => { const initDataViewSelection = jest.fn(); - mockUseIsExperimentalFeatureEnabled.mockReturnValue(true); renderHook(() => useRestoreDataViewManagerStateFromURL(initDataViewSelection, PageScope.default) ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_sync_url_state.ts b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_sync_url_state.ts index e42fb73616cbc..7d8880cf3faac 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_sync_url_state.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_sync_url_state.ts @@ -6,78 +6,12 @@ */ import { useCallback } from 'react'; -import { useDispatch, useSelector } from 'react-redux'; import { PageScope } from '../constants'; import { type SourcererUrlState } from '../../sourcerer/store/model'; -import { useInitializeUrlParam, useUpdateUrlParam } from '../../common/utils/global_query_string'; +import { useInitializeUrlParam } from '../../common/utils/global_query_string'; import { URL_PARAM_KEY } from '../../common/hooks/constants'; -import type { State } from '../../common/store/types'; -import { sourcererSelectors } from '../../common/store/selectors'; -import { sourcererActions } from '../../common/store/actions'; -import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; import { type SelectDataViewAsyncPayload } from '../redux/actions'; -// TODO: remove this in cleanup phase Remove deprecated sourcerer code https://github.com/elastic/security-team/issues/12665 -export const useSyncSourcererUrlState = ( - scopeId: - | PageScope.default - | PageScope.explore - | PageScope.attacks - | PageScope.alerts = PageScope.default -) => { - const scopeDataViewId = useSelector((state: State) => { - return sourcererSelectors.sourcererScopeSelectedDataViewId(state, scopeId); - }); - const selectedPatterns = useSelector((state: State) => { - return sourcererSelectors.sourcererScopeSelectedPatterns(state, scopeId); - }); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - - const dispatch = useDispatch(); - - const updateUrlParam = useUpdateUrlParam(URL_PARAM_KEY.sourcerer); - - const onInitializeUrlParam = useCallback( - (initialState: SourcererUrlState | null) => { - // TODO: This is due to a new feature https://github.com/elastic/security-team/issues/11959 - // if new picker flag is enabled, we should not kick off the legacy url flow - if (newDataViewPickerEnabled) { - return; - } - - // Initialize the store with value from UrlParam. - if (initialState != null) { - (Object.keys(initialState) as PageScope[]).forEach((scope) => { - if (!(scope === PageScope.default && scopeId === PageScope.alerts)) { - dispatch( - sourcererActions.setSelectedDataView({ - id: scope, - selectedDataViewId: initialState[scope]?.id ?? null, - selectedPatterns: initialState[scope]?.selectedPatterns ?? [], - }) - ); - } - }); - } else { - // Initialize the UrlParam with values from the store. - // It isn't strictly necessary but I am keeping it for compatibility with the previous implementation. - if (scopeDataViewId) { - updateUrlParam({ - [PageScope.default]: { - id: scopeDataViewId, - selectedPatterns, - }, - }); - } - } - }, - [dispatch, newDataViewPickerEnabled, scopeDataViewId, scopeId, selectedPatterns, updateUrlParam] - ); - - useInitializeUrlParam(URL_PARAM_KEY.sourcerer, onInitializeUrlParam); -}; - /** * Restores data view selection automatically if (and only if) the sourcerer url param is set during app init. (only during the initial render) * See `useInitializeUrlParam` for details. @@ -91,16 +25,8 @@ export const useRestoreDataViewManagerStateFromURL = ( | PageScope.attacks | PageScope.alerts = PageScope.default ) => { - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const onInitializeUrlParam = useCallback( (initialState: SourcererUrlState | null) => { - // TODO: This is due to a new feature https://github.com/elastic/security-team/issues/11959 - // dont do anything if new picker is not enabled - if (!newDataViewPickerEnabled) { - return; - } - if (initialState === null) { return initDataViewPickerWithSelection([]); } @@ -124,7 +50,7 @@ export const useRestoreDataViewManagerStateFromURL = ( initDataViewPickerWithSelection(urlBasedSelection); }, - [initDataViewPickerWithSelection, newDataViewPickerEnabled, scopeId] + [initDataViewPickerWithSelection, scopeId] ); useInitializeUrlParam(URL_PARAM_KEY.sourcerer, onInitializeUrlParam); diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/data_view_selected.test.ts b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/data_view_selected.test.ts index b5cb78508f947..39d3ece0054c0 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/data_view_selected.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/data_view_selected.test.ts @@ -8,7 +8,6 @@ import { createDataViewSelectedListener } from './data_view_selected'; import { selectDataViewAsync } from '../actions'; import type { DataViewsServicePublic, FieldSpec } from '@kbn/data-views-plugin/public'; -import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; import type { AnyAction, Dispatch, ListenerEffectAPI } from '@reduxjs/toolkit'; import type { RootState } from '../reducer'; import { DEFAULT_SECURITY_SOLUTION_DATA_VIEW_ID, PageScope } from '../../constants'; @@ -84,7 +83,6 @@ const mockedState: RootState = { }, }, }; -const mockLogger = loggingSystemMock.createLogger(); const mockDispatch = jest.fn(); const mockGetState = jest.fn(() => mockedState); @@ -118,7 +116,6 @@ describe('createDataViewSelectedListener', () => { addDanger: mockToastsDanger, }, } as unknown as CoreStart['notifications'], - logger: mockLogger, scope: PageScope.default, spaces: mockSpaces, storage: mockStorage, @@ -204,7 +201,6 @@ describe('createDataViewSelectedListener', () => { } as unknown as CoreStart['notifications'], scope: PageScope.analyzer, spaces: mockSpaces, - logger: mockLogger, storage: mockStorage, }); @@ -238,7 +234,6 @@ describe('createDataViewSelectedListener', () => { } as unknown as CoreStart['notifications'], scope: PageScope.analyzer, spaces: mockSpaces, - logger: mockLogger, storage: mockStorage, }); @@ -285,7 +280,6 @@ describe('createDataViewSelectedListener', () => { } as unknown as CoreStart['notifications'], scope: PageScope.analyzer, spaces: mockSpaces, - logger: mockLogger, storage: mockStorage, }); jest.mocked(mockDataViewsService.getDataViewLazy).mockRejectedValue(new Error('conflict')); diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/data_view_selected.ts b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/data_view_selected.ts index 059b0c945fb0e..1e1c8e0c56ad2 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/data_view_selected.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/data_view_selected.ts @@ -5,14 +5,11 @@ * 2.0. */ -/* eslint-disable complexity */ - import type { DataView, DataViewLazy, DataViewsServicePublic } from '@kbn/data-views-plugin/public'; import type { AnyAction, Dispatch, ListenerEffectAPI } from '@reduxjs/toolkit'; import type { Storage } from '@kbn/kibana-utils-plugin/public'; import type { SpacesPluginStart } from '@kbn/spaces-plugin/public'; import { isEmpty } from 'lodash'; -import type { Logger } from '@kbn/logging'; import type { CoreStart } from '@kbn/core/public'; import type { RootState } from '../reducer'; import { scopes } from '../reducer'; @@ -43,7 +40,6 @@ export const createDataViewSelectedListener = (dependencies: { dataViews: DataViewsServicePublic; notifications: CoreStart['notifications']; storage: Storage; - logger: Logger; }) => { return { actionCreator: selectDataViewAsync, @@ -51,13 +47,7 @@ export const createDataViewSelectedListener = (dependencies: { action: ReturnType, listenerApi: ListenerEffectAPI> ) => { - const logger = dependencies.logger; const spaceId = (await dependencies.spaces.getActiveSpace()).id; - logger.debug( - `Data view selection requested for scope: ${ - dependencies.scope - } with payload: ${JSON.stringify(action.payload)}` - ); if (dependencies.scope !== action.payload.scope) { return; } @@ -65,8 +55,6 @@ export const createDataViewSelectedListener = (dependencies: { // Cancel effects running for the current scope to prevent race conditions listenerApi.cancelActiveListeners(); - logger.debug(`cancelActiveListeners called for scope: ${dependencies.scope}`); - let dataViewByIdError: unknown; let adhocDataViewCreationError: unknown; let dataViewById: DataViewLazy | null = null; @@ -103,21 +91,12 @@ export const createDataViewSelectedListener = (dependencies: { */ const cachedDataViewSpec = findCachedDataView(action.payload.id); - logger.debug( - `Cached data view lookup for id: ${action.payload.id} returned: ${ - cachedDataViewSpec?.title ?? 'null' - }` - ); - - // If the data view is not found in the cache, attempt to fetch it by ID from the DataViews service. - // We wrap the dataViews.getDataViewLazy within a try catch because we've seen errors happening with conflicting ids in the saved object api if (!cachedDataViewSpec) { try { if (action.payload.id) { dataViewById = await dependencies.dataViews.getDataViewLazy(action.payload.id); } } catch (error: unknown) { - logger.error(`Error fetching data view by id ${action.payload.id}: ${error}`); dependencies.notifications.toasts.addDanger({ title: 'Selected data view is unavailable', text: `Unable to load data view ${ @@ -137,7 +116,6 @@ export const createDataViewSelectedListener = (dependencies: { // We attempt to create an ad-hoc data view if the data view by id lookup fails, and fallback patterns are provided. if (!dataViewById && action.payload.fallbackPatterns?.length) { - logger.debug(`Data view by id lookup failed for id: ${action.payload.id}`); try { const title = action.payload.fallbackPatterns?.join(',') ?? ''; if (!title.length) { @@ -148,19 +126,14 @@ export const createDataViewSelectedListener = (dependencies: { id: `adhoc_${title}`, title, }); - logger.debug(`Ad-hoc data view created with title: ${title}`); if (adHocDataView) { listenerApi.dispatch(sharedDataViewManagerSlice.actions.addDataView(adHocDataView)); } } catch (error: unknown) { - logger.error(`Error creating ad-hoc data view: ${error}`); adhocDataViewCreationError = error; } } else if (!dataViewById && !action.payload.fallbackPatterns?.length) { // No need to create an ad-hoc data view if there are no fallback patterns - logger.debug( - `Skipping ad-hoc data view creation for scope ${dependencies.scope} because no fallback patterns were provided` - ); } const resolvedIdToUse = @@ -172,20 +145,14 @@ export const createDataViewSelectedListener = (dependencies: { // seem to depend on this, not sure if we want it. state.dataViewManager.shared.defaultDataViewId; - logger.debug( - `Data view resolved id to use for scope ${dependencies.scope}: ${resolvedIdToUse ?? 'null'}` - ); - const currentScopeActions = scopes[action.payload.scope].actions; if (resolvedIdToUse) { // NOTE: this skips data view selection if an override selection // has been dispatched if (listenerApi.signal.aborted) { - logger.debug(`Data view selection aborted for scope: ${dependencies.scope}`); return; } - logger.debug(`Setting selected data view for scope: ${dependencies.scope}`); listenerApi.dispatch(currentScopeActions.setSelectedDataView(resolvedIdToUse)); if (action.payload.scope === PageScope.analyzer) { dependencies.storage.set( @@ -194,11 +161,6 @@ export const createDataViewSelectedListener = (dependencies: { ); } } else if (dataViewByIdError || adhocDataViewCreationError) { - logger.error( - `Data view selection error for scope ${dependencies.scope}: ${ - dataViewByIdError || adhocDataViewCreationError - }` - ); const err = dataViewByIdError || adhocDataViewCreationError; listenerApi.dispatch( currentScopeActions.dataViewSelectionError( diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/init_listener.test.ts b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/init_listener.test.ts index 7feb00e91325d..fa4ad89c3f954 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/init_listener.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/init_listener.test.ts @@ -6,7 +6,6 @@ */ import type { AnyAction, Dispatch, ListenerEffectAPI } from '@reduxjs/toolkit'; -import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; import { mockDataViewManagerState } from '../mock'; import { createInitListener } from './init_listener'; import type { DataViewsServicePublic } from '@kbn/data-views-plugin/public'; @@ -62,7 +61,6 @@ const mockListenerApi = { getState: mockGetState, } as unknown as ListenerEffectAPI>; -const mockLogger = loggingSystemMock.createLogger(); describe('createInitListener', () => { let listener: ReturnType; @@ -79,7 +77,6 @@ describe('createInitListener', () => { listener = createInitListener( { dataViews: mockDataViewsService, - logger: mockLogger, http, application, uiSettings, diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/init_listener.ts b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/init_listener.ts index 0c68c7a6fcbd0..f57bef529dc7a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/init_listener.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/redux/listeners/init_listener.ts @@ -10,7 +10,6 @@ import type { DataViewsServicePublic } from '@kbn/data-views-plugin/public'; import type { CoreStart } from '@kbn/core/public'; import type { SpacesPluginStart } from '@kbn/spaces-plugin/public'; import type { Storage } from '@kbn/kibana-utils-plugin/public'; -import type { Logger } from '@kbn/logging'; import type { RootState } from '../reducer'; import { sharedDataViewManagerSlice } from '../slices'; import { PageScope } from '../../constants'; @@ -47,7 +46,6 @@ export const createInitListener = ( dataViews: DataViewsServicePublic; spaces: SpacesPluginStart; storage: Storage; - logger: Logger; }, enableAlertsAndAttacksAlignment: boolean ) => { @@ -58,7 +56,6 @@ export const createInitListener = ( listenerApi: ListenerEffectAPI> ) => { try { - const logger = dependencies.logger; const spaceId = (await dependencies.spaces.getActiveSpace()).id; // Initialize default data views first @@ -67,15 +64,6 @@ export const createInitListener = ( http: dependencies.http, }); - logger.debug(`Default data views created: - - Default Data View: ${defaultDataView.title} (ID: ${defaultDataView.id}) - - Alert Data View: ${alertDataView.title} (ID: ${alertDataView.id}) - ${ - enableAlertsAndAttacksAlignment - ? `- Attack Data View: ${attackDataView.title} (ID: ${attackDataView.id})` - : '' - }`); - const exploreDataView = await createExploreDataView( { dataViews: dependencies.dataViews, @@ -85,9 +73,6 @@ export const createInitListener = ( alertDataView.title ); - logger.debug(`Explore Data View created: - - Explore Data View: ${exploreDataView.title} (ID: ${exploreDataView.id})`); - // Store the created data views in the Redux state listenerApi.dispatch(sharedDataViewManagerSlice.actions.addDataView(exploreDataView)); @@ -95,12 +80,6 @@ export const createInitListener = ( // We're using getIdsWithTitle instead of getAllDataViewLazy because to avoid a bug that happens in the savedObject api where id conflicts can happen between documents const dataViews = await dependencies.dataViews.getIdsWithTitle(); - logger.debug( - `Fetched ${dataViews.length} data views from getIdsWithTitle. Data View Names: ${dataViews - .map((dv) => dv.name ?? dv.title) - .join(', ')}` - ); - const dataViewSpecs: DataViewSpec[] = dataViews.map((dataView) => ({ id: dataView.id, title: dataView.title, @@ -113,12 +92,6 @@ export const createInitListener = ( listenerApi.dispatch(sharedDataViewManagerSlice.actions.setDataViews(dataViewSpecs)); - logger.debug( - `Set ${dataViewSpecs.length} data views in the Redux state with names: ${dataViewSpecs - .map((dv) => dv.title) - .join(', ')}` - ); - // NOTE: save default dataview id for the given space in the store. // this is used to identify the default selection in pickers across Kibana Space listenerApi.dispatch( @@ -128,8 +101,6 @@ export const createInitListener = ( }) ); - logger.debug(`Set default and alert data view IDs in the Redux state.`); - // Preload the default data view for all the scopes // Immediate calls that would dispatch this call from other places will cancel this action, // preventing race conditions @@ -145,7 +116,6 @@ export const createInitListener = ( // NOTE: only init default data view for slices that are not initialized yet .filter((scope) => !listenerApi.getState().dataViewManager[scope].dataViewId) .forEach((scope) => { - logger.debug(`Preloading data view for scope: ${scope}`); if (scope === PageScope.explore) { return listenerApi.dispatch( selectDataViewAsync({ @@ -190,11 +160,9 @@ export const createInitListener = ( // NOTE: if there is a list of data views to preload other than default one (eg. coming in from the url storage) action.payload.forEach((defaultSelection) => { - logger.debug(`Preloading additional data view for scope: ${defaultSelection.scope}`); listenerApi.dispatch(selectDataViewAsync(defaultSelection)); }); } catch (error: unknown) { - dependencies.logger.error(`Error initializing Data View Manager: ${error}`); dependencies.notifications.toasts.addDanger({ title: 'Error initializing data views', text: `Error: ${error instanceof Error ? error.message : 'unknown'}`, diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/rule_preview/preview_histogram.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/rule_preview/preview_histogram.tsx index 562ba4d8b60aa..14e1d0b658bf7 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/rule_preview/preview_histogram.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/rule_preview/preview_histogram.tsx @@ -193,7 +193,7 @@ const PreviewHistogramComponent = ({ renderCellValue={PreviewRenderCellValue} rowRenderers={defaultRowRenderers} start={startDate} - sourcererScope={PageScope.alerts} + pageScope={PageScope.alerts} indexNames={[`${DEFAULT_PREVIEW_INDEX}-${spaceId}`]} bulkActions={false} /> diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/__integration_tests__/step_define_rule.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/__integration_tests__/step_define_rule.test.tsx index 3a996d67202a6..63c93c34570c1 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/__integration_tests__/step_define_rule.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/__integration_tests__/step_define_rule.test.tsx @@ -185,15 +185,6 @@ jest.mock('../../../../../common/components/link_to', () => { }), }; }); -jest.mock('../../../../../sourcerer/containers', () => { - const actual = jest.requireActual('../../../../../sourcerer/containers'); - return { - ...actual, - useSourcererDataView: jest - .fn() - .mockReturnValue({ indexPattern: ['fakeindex'], loading: false }), - }; -}); jest.mock('react-router-dom', () => { const actual = jest.requireActual('react-router-dom'); return { ...actual, useLocation: jest.fn().mockReturnValue({ pathname: '/alerts' }) }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/execution_results/use_filter_by_execution_id.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/execution_results/use_filter_by_execution_id.tsx index c9509c28da14b..e2c92931656cc 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/execution_results/use_filter_by_execution_id.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/execution_results/use_filter_by_execution_id.tsx @@ -14,10 +14,7 @@ import { buildFilter, FILTERS } from '@kbn/es-query'; import { toMountPoint } from '@kbn/react-kibana-mount'; import { PageScope } from '../../../../../data_view_manager/constants'; -import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; -import { dataViewSpecToViewBase } from '../../../../../common/lib/kuery'; import { InputsModelId } from '../../../../../common/store/inputs/constants'; -import { useSourcererDataView } from '../../../../../sourcerer/containers'; import { useAppToasts } from '../../../../../common/hooks/use_app_toasts'; import { useDeepEqualSelector } from '../../../../../common/hooks/use_selector'; import { useKibana } from '../../../../../common/lib/kibana'; @@ -53,9 +50,7 @@ export const useFilterByExecutionId = (selectAlertsTab: () => void) => { } = startServices; const dispatch = useDispatch(); - const { sourcererDataView: oldSourcererDataView } = useSourcererDataView(PageScope.alerts); - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const { dataView: experimentalDataView } = useDataView(PageScope.alerts); + const { dataView } = useDataView(PageScope.alerts); const { addError, addSuccess, remove } = useAppToasts(); const getGlobalFiltersQuerySelector = useMemo( @@ -71,11 +66,8 @@ export const useFilterByExecutionId = (selectAlertsTab: () => void) => { const successToastId = useRef(''); const uuidDataViewField = useMemo( - () => - newDataViewPickerEnabled - ? experimentalDataView.fields?.getByName(EXECUTION_UUID_FIELD_NAME) - : oldSourcererDataView.fields?.[EXECUTION_UUID_FIELD_NAME], - [experimentalDataView, newDataViewPickerEnabled, oldSourcererDataView.fields] + () => dataView.fields?.getByName(EXECUTION_UUID_FIELD_NAME), + [dataView] ); const resetGlobalQueryState = useCallback(() => { @@ -113,11 +105,7 @@ export const useFilterByExecutionId = (selectAlertsTab: () => void) => { return useCallback( (executionId: string, executionStart: string) => { - const dataViewAsViewBase = newDataViewPickerEnabled - ? experimentalDataView - : dataViewSpecToViewBase(oldSourcererDataView); - - if (uuidDataViewField == null || !dataViewAsViewBase) { + if (uuidDataViewField == null || !dataView) { addError(i18n.ACTIONS_FIELD_NOT_FOUND_ERROR, { title: i18n.ACTIONS_FIELD_NOT_FOUND_ERROR_TITLE, }); @@ -126,7 +114,7 @@ export const useFilterByExecutionId = (selectAlertsTab: () => void) => { cachedGlobalQueryState.current = { filters, query, timerange }; const filter = buildFilter( - dataViewAsViewBase, + dataView, uuidDataViewField, FILTERS.PHRASE, false, @@ -169,9 +157,7 @@ export const useFilterByExecutionId = (selectAlertsTab: () => void) => { ).id; }, [ - newDataViewPickerEnabled, - experimentalDataView, - oldSourcererDataView, + dataView, uuidDataViewField, filters, query, diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx index 2a462da004a9f..571e03e2a37c5 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx @@ -99,13 +99,11 @@ import { SecurityPageName } from '../../../../app/types'; import { APP_UI_ID } from '../../../../../common/constants'; import { useGlobalFullScreen } from '../../../../common/containers/use_full_screen'; import { Display } from '../../../../explore/hosts/pages/display'; - import { focusUtilityBarAction, onTimelineTabKeyPressed, resetKeyboardFocus, } from '../../../../timelines/components/timeline/helpers'; -import { useSourcererDataView } from '../../../../sourcerer/containers'; import { canEditRuleWithActions, explainLackOfPermission, @@ -119,9 +117,7 @@ import { import { ExecutionResultsTable } from './execution_results/execution_results_table'; import { RuleBackfillsInfo } from '../../../rule_gaps/components/rule_backfills_info'; import { RuleGaps } from '../../../rule_gaps/components/rule_gaps'; - import * as ruleI18n from '../../../common/translations'; - // eslint-disable-next-line no-restricted-imports import { LegacyUrlConflictCallOut } from './legacy_url_conflict_callout'; import * as i18n from './translations'; @@ -152,7 +148,6 @@ import { useManualRuleRunConfirmation } from '../../../rule_gaps/components/manu // eslint-disable-next-line no-restricted-imports import { useLegacyUrlRedirect } from './use_redirect_legacy_url'; import { RuleDetailTabs, useRuleDetailsTabs } from './use_rule_details_tabs'; -import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import { useRuleUpdateCallout } from '../../../rule_management/hooks/use_rule_update_callout'; import { useDeprecatedRuleDetailsCallout } from '../../../rule_management/components/rule_deprecation'; import { useUserPrivileges } from '../../../../common/components/user_privileges'; @@ -284,13 +279,7 @@ export const RuleDetailsPage = connector( const { loading: listsConfigLoading, needsConfiguration: needsListsConfiguration } = useListsConfig(); - const { sourcererDataView: oldSourcererDataViewSpec, loading: oldIsLoadingIndexPattern } = - useSourcererDataView(PageScope.alerts); - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const { dataView: experimentalDataView, status } = useDataView(PageScope.alerts); - const isLoadingIndexPattern = newDataViewPickerEnabled - ? status !== 'ready' - : oldIsLoadingIndexPattern; + const { dataView, status } = useDataView(PageScope.alerts); const loading = userInfoLoading || listsConfigLoading; const { detailName: ruleId } = useParams<{ @@ -370,8 +359,8 @@ export const RuleDetailsPage = connector( useLegacyUrlRedirect({ rule, spacesApi }); const showUpdating = useMemo( - () => isLoadingIndexPattern || isAlertsLoading || loading, - [isLoadingIndexPattern, isAlertsLoading, loading] + () => status !== 'ready' || isAlertsLoading || loading, + [status, isAlertsLoading, loading] ); const title = useMemo( @@ -857,10 +846,9 @@ export const RuleDetailsPage = connector( <> @@ -887,8 +875,7 @@ export const RuleDetailsPage = connector( dataView.toSpec(), [dataView]); - - const browserFields = useBrowserFields(PageScope.alerts, dataView); + const browserFields = useBrowserFields(PageScope.alerts); const getGlobalQuerySelector = useMemo(() => inputsSelectors.globalQuerySelector(), []); const globalQuery = useDeepEqualSelector(getGlobalQuerySelector); @@ -184,7 +182,6 @@ export const Table = memo(({ dataView, groupingFilters, packages }: TableProps) const combinedQuery = combineQueries({ config: getEsQueryConfig(uiSettings), dataProviders: [], - dataViewSpec, dataView, browserFields, filters, @@ -202,7 +199,7 @@ export const Table = memo(({ dataView, groupingFilters, packages }: TableProps) } catch { return { bool: {} }; } - }, [browserFields, dataView, dataViewSpec, filters, globalQuery, uiSettings]); + }, [browserFields, dataView, filters, globalQuery, uiSettings]); const renderAdditionalToolbarControls = useCallback( () => , diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alert_summary/table/table_section.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alert_summary/table/table_section.tsx index 65d09b8f16507..bb12e78764e14 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alert_summary/table/table_section.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alert_summary/table/table_section.tsx @@ -39,7 +39,6 @@ export interface TableSectionProps { * This component leverages the GroupedAlertsTable and the ResponseOps AlertsTable also used in the alerts page. */ export const TableSection = memo(({ dataView, packages }: TableSectionProps) => { - const dataViewSpec = useMemo(() => dataView.toSpec(), [dataView]); const { to, from } = useGlobalTime(); const getGlobalQuerySelector = useMemo(() => inputsSelectors.globalQuerySelector(), []); @@ -70,7 +69,6 @@ export const TableSection = memo(({ dataView, packages }: TableSectionProps) => accordionButtonContent={groupTitleRenderers} accordionExtraActionGroupStats={accordionExtraActionGroupStats} dataView={dataView} - dataViewSpec={dataViewSpec} // TODO: newDataViewPickerEnabled - can be removed when old sourcerer is removed defaultGroupingOptions={groupingOptions} from={from} globalFilters={filters} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/content.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/content.test.tsx index ae3e9007145da..52370193e2762 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/content.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/content.test.tsx @@ -9,11 +9,10 @@ import React from 'react'; import { render, screen, waitFor } from '@testing-library/react'; import { TestProviders } from '../../../common/mock'; import { AlertsPageContent, SECURITY_SOLUTION_PAGE_WRAPPER_TEST_ID } from './content'; -import type { DataView, DataViewSpec } from '@kbn/data-views-plugin/common'; +import type { DataView } from '@kbn/data-views-plugin/common'; import { createStubDataView } from '@kbn/data-views-plugin/common/data_views/data_view.stub'; import { GO_TO_RULES_BUTTON_TEST_ID } from './header/header_section'; import { FILTER_BY_ASSIGNEES_BUTTON } from '../../../common/components/filter_by_assignees_popover/test_ids'; -import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy'; import { useUserPrivileges } from '../../../common/components/user_privileges'; import { getUserPrivilegesMockDefaultValue } from '../../../common/components/user_privileges/__mocks__'; @@ -22,10 +21,6 @@ jest.mock('../../../common/components/user_privileges'); const mockUseUserPrivileges = useUserPrivileges as jest.Mock; const dataView: DataView = createStubDataView({ spec: {} }); -const dataViewSpec: DataViewSpec = createStubDataView({ spec: {} }).toSpec(); -const runtimeMappings: RunTimeMappings = createStubDataView({ - spec: {}, -}).getRuntimeMappings() as RunTimeMappings; describe('AlertsPageContent', () => { beforeEach(() => { @@ -50,11 +45,7 @@ describe('AlertsPageContent', () => { it('should render correctly', async () => { render( - + ); @@ -89,11 +80,7 @@ describe('AlertsPageContent', () => { it('renders the page content without the Go to Rules button', async () => { render( - + ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/content.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/content.tsx index 42b0abc0c5a0c..1e9832850e33f 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/content.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/content.tsx @@ -13,9 +13,7 @@ import { isTab } from '@kbn/timelines-plugin/public'; import type { Filter } from '@kbn/es-query'; import { dataTableSelectors, tableDefaults, TableId } from '@kbn/securitysolution-data-table'; import type { FilterGroupHandler } from '@kbn/alerts-ui-shared'; -import type { DataView, DataViewSpec } from '@kbn/data-views-plugin/common'; -import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; +import type { DataView } from '@kbn/data-views-plugin/common'; import { PAGE_TITLE } from '../../pages/alerts/translations'; import { useShallowEqualSelector } from '../../../common/hooks/use_selector'; import { HeaderPage } from '../../../common/components/header_page'; @@ -52,112 +50,94 @@ export interface AlertsPageContentProps { * DataView for the alerts page */ dataView: DataView; - // TODO remove when we remove the newDataViewPickerEnabled feature flag - /** - * DataViewSpec used to fetch the alerts data when the newDataViewPickerEnabled feature flag is false - */ - oldSourcererDataViewSpec: DataViewSpec; - // TODO remove when we remove the newDataViewPickerEnabled feature flag - /** - * runTimeMappings used in the KPIsSection, when the newDataViewPickerEnabled feature flag is false - */ - runtimeMappings: RunTimeMappings; } /** * Renders the content of the alerts page: search bar, header, filters, KPIs, and table sections. */ -export const AlertsPageContent = memo( - ({ dataView, oldSourcererDataViewSpec, runtimeMappings }: AlertsPageContentProps) => { - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const containerElement = useRef(null); +export const AlertsPageContent = memo(({ dataView }: AlertsPageContentProps) => { + const containerElement = useRef(null); - const { globalFullScreen } = useGlobalFullScreen(); + const { globalFullScreen } = useGlobalFullScreen(); - const [assignees, setAssignees] = useState([]); - const [statusFilter, setStatusFilter] = useState([]); - const [pageFilters, setPageFilters] = useState(); - const [pageFilterHandler, setPageFilterHandler] = useState(); + const [assignees, setAssignees] = useState([]); + const [statusFilter, setStatusFilter] = useState([]); + const [pageFilters, setPageFilters] = useState(); + const [pageFilterHandler, setPageFilterHandler] = useState(); - const getTable = useMemo(() => dataTableSelectors.getTableByIdSelector(), []); - const isTableLoading = useShallowEqualSelector( - (state) => (getTable(state, TableId.alertsOnAlertsPage) ?? tableDefaults).isLoading - ); + const getTable = useMemo(() => dataTableSelectors.getTableByIdSelector(), []); + const isTableLoading = useShallowEqualSelector( + (state) => (getTable(state, TableId.alertsOnAlertsPage) ?? tableDefaults).isLoading + ); - const onSkipFocusBeforeEventsTable = useCallback(() => { - focusUtilityBarAction(containerElement.current); - }, [containerElement]); + const onSkipFocusBeforeEventsTable = useCallback(() => { + focusUtilityBarAction(containerElement.current); + }, [containerElement]); - const onSkipFocusAfterEventsTable = useCallback(() => { - resetKeyboardFocus(); - }, []); + const onSkipFocusAfterEventsTable = useCallback(() => { + resetKeyboardFocus(); + }, []); - const onKeyDown = useCallback( - (keyboardEvent: React.KeyboardEvent) => { - if (isTab(keyboardEvent)) { - onTimelineTabKeyPressed({ - containerElement: containerElement.current, - keyboardEvent, - onSkipFocusBeforeEventsTable, - onSkipFocusAfterEventsTable, - }); - } - }, - [containerElement, onSkipFocusBeforeEventsTable, onSkipFocusAfterEventsTable] - ); + const onKeyDown = useCallback( + (keyboardEvent: React.KeyboardEvent) => { + if (isTab(keyboardEvent)) { + onTimelineTabKeyPressed({ + containerElement: containerElement.current, + keyboardEvent, + onSkipFocusBeforeEventsTable, + onSkipFocusAfterEventsTable, + }); + } + }, + [containerElement, onSkipFocusBeforeEventsTable, onSkipFocusAfterEventsTable] + ); - useEffect(() => { - if (!pageFilterHandler) return; - // if Alert is reloaded because of action by the user. - // We want reload the values in the detection Page filters - if (!isTableLoading) pageFilterHandler.reload(); - }, [isTableLoading, pageFilterHandler]); + useEffect(() => { + if (!pageFilterHandler) return; + // if Alert is reloaded because of action by the user. + // We want reload the values in the detection Page filters + if (!isTableLoading) pageFilterHandler.reload(); + }, [isTableLoading, pageFilterHandler]); - return ( - + + + - - - - - - - - - - - - - - - + + + + + + - - - ); - } -); + + + + + + + + ); +}); AlertsPageContent.displayName = 'AlertsPageContent'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/filters/filters_section.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/filters/filters_section.tsx index e684ceb290f2d..8392795ee4284 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/filters/filters_section.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/filters/filters_section.tsx @@ -9,7 +9,7 @@ import React, { type Dispatch, memo, type SetStateAction, useCallback, useMemo } import type { Filter, TimeRange } from '@kbn/es-query'; import { TableId } from '@kbn/securitysolution-data-table'; import type { FilterGroupHandler } from '@kbn/alerts-ui-shared'; -import type { DataView, DataViewSpec } from '@kbn/data-views-plugin/common'; +import type { DataView } from '@kbn/data-views-plugin/common'; import { PageFilters } from './page_filters'; import type { AssigneesIdsSelection } from '../../../../common/components/assignees/types'; import { useDataTableFilters } from '../../../../common/hooks/use_data_table_filters'; @@ -31,7 +31,7 @@ export interface FiltersSectionProps { /** * Data view used for the alerts page */ - dataView: DataView | DataViewSpec; + dataView: DataView; /** * Page filters for the alerts page */ diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/filters/page_filters.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/filters/page_filters.tsx index 7de2e8ce58812..e959a19fd9698 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/filters/page_filters.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/filters/page_filters.tsx @@ -12,9 +12,8 @@ import type { AlertFilterControlsProps } from '@kbn/alerts-ui-shared/src/alert_f import { AlertFilterControls } from '@kbn/alerts-ui-shared/src/alert_filter_controls'; import { useHistory } from 'react-router-dom'; import { SECURITY_SOLUTION_RULE_TYPE_IDS } from '@kbn/securitysolution-rules'; -import type { DataView, DataViewSpec } from '@kbn/data-plugin/common'; +import type { DataView } from '@kbn/data-plugin/common'; import { convertCamelCasedKeysToSnakeCase } from '@kbn/presentation-publishing'; -import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import { useKibana } from '../../../../common/lib/kibana'; import { DEFAULT_ALERTS_INDEX } from '../../../../../common/constants'; import { URL_PARAM_KEY } from '../../../../common/hooks/use_url_state'; @@ -55,12 +54,10 @@ export type PageFiltersProps = Pick< AlertFilterControlsProps, 'filters' | 'onFiltersChange' | 'query' | 'timeRange' | 'onInit' > & { - dataView: DataView | DataViewSpec; + dataView: DataView; }; export const PageFilters = memo(({ dataView, ...props }: PageFiltersProps) => { - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const { http, notifications, dataViews } = useKibana().services; const services = useMemo( () => ({ @@ -94,10 +91,10 @@ export const PageFilters = memo(({ dataView, ...props }: PageFiltersProps) => { [urlStorage] ); - // TODO change to .getIndexPattern() once we remove the newDataViewPickerEnabled feature flag and we have a DataView object const alertsIndicesTitle = useMemo( () => - dataView.title + dataView + .getIndexPattern() ?.split(',') .filter((index) => index.includes(DEFAULT_ALERTS_INDEX)) .join(','), @@ -126,7 +123,7 @@ export const PageFilters = memo(({ dataView, ...props }: PageFiltersProps) => { dataViewSpec={customDataViewSpec} defaultControls={DEFAULT_DETECTION_PAGE_FILTERS} maxControls={4} - preventCacheClearOnUnmount={newDataViewPickerEnabled} + preventCacheClearOnUnmount={true} ruleTypeIds={SECURITY_SOLUTION_RULE_TYPE_IDS} services={services} setControlsUrlState={setFilterControlsUrlState} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/kpis/kpis_section.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/kpis/kpis_section.test.tsx index e6a7983d6f717..6c4a3a79d6393 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/kpis/kpis_section.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/kpis/kpis_section.test.tsx @@ -7,17 +7,15 @@ import React from 'react'; import { render } from '@testing-library/react'; -import { createStubDataView } from '@kbn/data-views-plugin/common/data_views/data_view.stub'; import { KPIsSection } from './kpis_section'; import { useDataTableFilters } from '../../../../common/hooks/use_data_table_filters'; -import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy'; import { TestProviders } from '../../../../common/mock'; +import type { DataView } from '@kbn/data-views-plugin/common'; +import { createStubDataView } from '@kbn/data-views-plugin/common/data_views/data_view.stub'; jest.mock('../../../../common/hooks/use_data_table_filters'); -const runtimeMappings: RunTimeMappings = createStubDataView({ - spec: {}, -}).getRuntimeMappings() as RunTimeMappings; +const dataView: DataView = createStubDataView({ spec: {} }); describe('', () => { it('should render correctly', () => { @@ -28,7 +26,7 @@ describe('', () => { const { getByTestId } = render( - + ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/kpis/kpis_section.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/kpis/kpis_section.tsx index e1719a61294d2..3c24227274e13 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/kpis/kpis_section.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/kpis/kpis_section.tsx @@ -10,6 +10,7 @@ import { useDispatch } from 'react-redux'; import type { Filter } from '@kbn/es-query'; import { TableId } from '@kbn/securitysolution-data-table'; import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy'; +import type { DataView } from '@kbn/data-views-plugin/common'; import type { AssigneesIdsSelection } from '../../../../common/components/assignees/types'; import { useDataTableFilters } from '../../../../common/hooks/use_data_table_filters'; import { InputsModelId } from '../../../../common/store/inputs/constants'; @@ -32,12 +33,10 @@ export interface ChartsSectionProps { * The list of assignees to add to the others filters */ assignees: AssigneesIdsSelection[]; - // TODO change this do dataView: DataView when we remove the newDataViewPickerEnabled feature flag - // as we can extract the runtimeMappings directly here using experimentalDataView.getRuntimeMappings() /** - * The runtime mappings to correctly query the charts data + * The dataView used to fetch the alerts data */ - runtimeMappings: RunTimeMappings; + dataView: DataView; /** * The page filters retrieved from the FiltersSection component to filter the charts */ @@ -47,87 +46,89 @@ export interface ChartsSectionProps { /** * UI section of the alerts page that renders a series of charts. */ -export const KPIsSection = memo( - ({ assignees, runtimeMappings, pageFilters }: ChartsSectionProps) => { - const dispatch = useDispatch(); +export const KPIsSection = memo(({ assignees, dataView, pageFilters }: ChartsSectionProps) => { + const dispatch = useDispatch(); + const runtimeMappings = useMemo( + () => (dataView.getRuntimeMappings() as RunTimeMappings) ?? {}, + [dataView] + ); - const { data } = useKibana().services; - const { filterManager } = data.query; - const addFilter = useCallback( - ({ field, value, negate }: AddFilterProps) => { - filterManager.addFilters([ - { - meta: { - alias: null, - disabled: false, - negate: negate ?? false, - }, - ...(value != null - ? { query: { match_phrase: { [field]: value } } } - : { exists: { field } }), + const { data } = useKibana().services; + const { filterManager } = data.query; + const addFilter = useCallback( + ({ field, value, negate }: AddFilterProps) => { + filterManager.addFilters([ + { + meta: { + alias: null, + disabled: false, + negate: negate ?? false, }, - ]); - }, - [filterManager] - ); + ...(value != null + ? { query: { match_phrase: { [field]: value } } } + : { exists: { field } }), + }, + ]); + }, + [filterManager] + ); - const getGlobalFiltersQuerySelector = useMemo( - () => inputsSelectors.globalFiltersQuerySelector(), - [] - ); - const filters = useDeepEqualSelector(getGlobalFiltersQuerySelector); - const { showBuildingBlockAlerts, showOnlyThreatIndicatorAlerts } = useDataTableFilters( - TableId.alertsOnAlertsPage - ); - const topLevelFilters = useMemo(() => { - return [ - ...filters, - ...buildShowBuildingBlockFilter(showBuildingBlockAlerts), - ...buildThreatMatchFilter(showOnlyThreatIndicatorAlerts), - ...buildAlertAssigneesFilter(assignees), - ]; - }, [assignees, showBuildingBlockAlerts, showOnlyThreatIndicatorAlerts, filters]); - const alertsDefaultFilters = useMemo( - () => [...topLevelFilters, ...(pageFilters ?? [])], - [topLevelFilters, pageFilters] - ); + const getGlobalFiltersQuerySelector = useMemo( + () => inputsSelectors.globalFiltersQuerySelector(), + [] + ); + const filters = useDeepEqualSelector(getGlobalFiltersQuerySelector); + const { showBuildingBlockAlerts, showOnlyThreatIndicatorAlerts } = useDataTableFilters( + TableId.alertsOnAlertsPage + ); + const topLevelFilters = useMemo(() => { + return [ + ...filters, + ...buildShowBuildingBlockFilter(showBuildingBlockAlerts), + ...buildThreatMatchFilter(showOnlyThreatIndicatorAlerts), + ...buildAlertAssigneesFilter(assignees), + ]; + }, [assignees, showBuildingBlockAlerts, showOnlyThreatIndicatorAlerts, filters]); + const alertsDefaultFilters = useMemo( + () => [...topLevelFilters, ...(pageFilters ?? [])], + [topLevelFilters, pageFilters] + ); - const pageFiltersIsLoading = useMemo(() => !Array.isArray(pageFilters), [pageFilters]); + const pageFiltersIsLoading = useMemo(() => !Array.isArray(pageFilters), [pageFilters]); - const getGlobalQuerySelector = useMemo(() => inputsSelectors.globalQuerySelector(), []); - const query = useDeepEqualSelector(getGlobalQuerySelector); + const getGlobalQuerySelector = useMemo(() => inputsSelectors.globalQuerySelector(), []); + const query = useDeepEqualSelector(getGlobalQuerySelector); - const [{ signalIndexName }] = useUserData(); + const [{ signalIndexName }] = useUserData(); - const updateDateRangeCallback = useCallback( - ({ x }) => { - if (!x) { - return; - } - const [min, max] = x; - dispatch( - setAbsoluteRangeDatePicker({ - id: InputsModelId.global, - from: new Date(min).toISOString(), - to: new Date(max).toISOString(), - }) - ); - }, - [dispatch] - ); + const updateDateRangeCallback = useCallback( + ({ x }) => { + if (!x) { + return; + } + const [min, max] = x; + dispatch( + setAbsoluteRangeDatePicker({ + id: InputsModelId.global, + from: new Date(min).toISOString(), + to: new Date(max).toISOString(), + }) + ); + }, + [dispatch] + ); - return ( - - ); - } -); + return ( + + ); +}); KPIsSection.displayName = 'KPIsSection'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/search_bar/search_bar_section.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/search_bar/search_bar_section.test.tsx index 6a2477b883d75..b6b185dcbc866 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/search_bar/search_bar_section.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/search_bar/search_bar_section.test.tsx @@ -7,10 +7,10 @@ import React from 'react'; import { render } from '@testing-library/react'; -import { createStubDataView } from '@kbn/data-views-plugin/common/data_views/data_view.stub'; import { TestProviders } from '../../../../common/mock'; import { SEARCH_BAR_TEST_ID, SearchBarSection } from './search_bar_section'; -import type { DataView, DataViewSpec } from '@kbn/data-views-plugin/common'; +import type { DataView } from '@kbn/data-views-plugin/common'; +import { createStubDataView } from '@kbn/data-views-plugin/common/data_views/data_view.stub'; jest.mock('../../../../common/components/filters_global', () => ({ FiltersGlobal: ({ children }: { children: React.ReactNode }) =>
{children}
, @@ -21,13 +21,12 @@ jest.mock('../../../../common/components/search_bar', () => ({ })); const dataView: DataView = createStubDataView({ spec: {} }); -const dataViewSpec: DataViewSpec = dataView.toSpec(); describe('', () => { it('should render correctly', () => { const { getByTestId } = render( - + ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/search_bar/search_bar_section.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/search_bar/search_bar_section.tsx index c0cfec5256c3d..779b1778a21d7 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/search_bar/search_bar_section.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/search_bar/search_bar_section.tsx @@ -6,7 +6,7 @@ */ import React, { memo } from 'react'; -import type { DataView, DataViewSpec } from '@kbn/data-views-plugin/common'; +import type { DataView } from '@kbn/data-views-plugin/common'; import { InputsModelId } from '../../../../common/store/inputs/constants'; import { FiltersGlobal } from '../../../../common/components/filters_global'; import { SiemSearchBar } from '../../../../common/components/search_bar'; @@ -19,31 +19,24 @@ export interface SearchBarSectionProps { * DataView object to pass to the SiemSearchBar component. */ dataView: DataView; - /** - * Old sourcerer dataView object to pass to the SiemSearchBar component. - */ - sourcererDataViewSpec: DataViewSpec; // TODO remove when we remove the newDataViewPickerEnabled feature flag } /** * UI section of the alerts page that renders the global search bar. */ -export const SearchBarSection = memo( - ({ dataView, sourcererDataViewSpec }: SearchBarSectionProps) => { - const { pollForSignalIndex } = useSignalHelpers(); +export const SearchBarSection = memo(({ dataView }: SearchBarSectionProps) => { + const { pollForSignalIndex } = useSignalHelpers(); - return ( - - - - ); - } -); + return ( + + + + ); +}); SearchBarSection.displayName = 'SearchBarSection'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/table/table_section.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/table/table_section.test.tsx index ec37b75d7bd50..782aa28a09005 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/table/table_section.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/table/table_section.test.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { render } from '@testing-library/react'; import { createStubDataView } from '@kbn/data-views-plugin/common/data_views/data_view.stub'; import { TestProviders } from '../../../../common/mock'; -import type { DataView, DataViewSpec } from '@kbn/data-views-plugin/common'; +import type { DataView } from '@kbn/data-views-plugin/common'; import { TABLE_SECTION_TEST_ID, TableSection } from './table_section'; import { useUserData } from '../../user_info'; import { useListsConfig } from '../../../containers/detection_engine/lists/use_lists_config'; @@ -17,8 +17,9 @@ import { useListsConfig } from '../../../containers/detection_engine/lists/use_l jest.mock('../../user_info'); jest.mock('../../../containers/detection_engine/lists/use_lists_config'); -const dataViewSpec: DataViewSpec = { title: '.alerts-security.alerts-default' }; -const dataView: DataView = createStubDataView({ spec: dataViewSpec }); +const dataView: DataView = createStubDataView({ + spec: { title: '.alerts-security.alerts-default' }, +}); describe('', () => { it('should render correctly', () => { @@ -33,13 +34,7 @@ describe('', () => { const { getByTestId } = render( - + ); @@ -59,13 +54,7 @@ describe('', () => { const { queryByTestId } = render( - + ); @@ -84,13 +73,7 @@ describe('', () => { const { queryByTestId } = render( - + ); @@ -112,7 +95,6 @@ describe('', () => { diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/table/table_section.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/table/table_section.tsx index 9895428030ff5..dfcf9f02d18b3 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/table/table_section.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/table/table_section.tsx @@ -8,7 +8,7 @@ import React, { memo, useCallback, useMemo } from 'react'; import type { Filter } from '@kbn/es-query'; import { TableId } from '@kbn/securitysolution-data-table'; -import type { DataView, DataViewSpec } from '@kbn/data-views-plugin/common'; +import type { DataView } from '@kbn/data-views-plugin/common'; import { useGroupTakeActionsItems } from '../../../hooks/alerts_table/use_group_take_action_items'; import { defaultGroupingOptions, @@ -43,11 +43,6 @@ export interface TableSectionProps { * DataView used to fetch the alerts data */ dataView: DataView; - // TODO remove when we remove the newDataViewPickerEnabled feature flag - /** - * DataViewSpec used to fetch the alerts data when newDataViewPickerEnabled is false - */ - dataViewSpec: DataViewSpec; /** * The page filters retrieved from the FiltersSection component to filter the table */ @@ -63,7 +58,7 @@ export interface TableSectionProps { * Renders the alerts table with grouping functionality in the alerts page. */ export const TableSection = memo( - ({ assignees, dataView, dataViewSpec, pageFilters, statusFilter }: TableSectionProps) => { + ({ assignees, dataView, pageFilters, statusFilter }: TableSectionProps) => { const getGlobalFiltersQuerySelector = useMemo( () => inputsSelectors.globalFiltersQuerySelector(), [] @@ -130,7 +125,6 @@ export const TableSection = memo( accordionButtonContent={defaultGroupTitleRenderers} accordionExtraActionGroupStats={accordionExtraActionGroupStats} dataView={dataView} - dataViewSpec={dataViewSpec} defaultFilters={defaultFilters} defaultGroupingOptions={defaultGroupingOptions} from={from} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/wrapper.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/wrapper.test.tsx index 7f177fadd6464..3abc3ec1e0935 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/wrapper.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/wrapper.test.tsx @@ -14,13 +14,10 @@ import { Wrapper, } from './wrapper'; import { TestProviders } from '../../../common/mock'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import { useDataView } from '../../../data_view_manager/hooks/use_data_view'; -import type { DataView, DataViewSpec } from '@kbn/data-views-plugin/common'; +import type { DataView } from '@kbn/data-views-plugin/common'; import { createStubDataView } from '@kbn/data-views-plugin/common/data_views/data_view.stub'; -jest.mock('../../../sourcerer/containers'); jest.mock('../../../common/hooks/use_experimental_features'); jest.mock('../../../data_view_manager/hooks/use_data_view'); jest.mock('./content', () => ({ @@ -28,202 +25,101 @@ jest.mock('./content', () => ({ })); const dataView: DataView = createStubDataView({ spec: {} }); -const dataViewSpec: DataViewSpec = createStubDataView({ spec: {} }).toSpec(); describe('', () => { - describe('newDataViewPickerEnabled false', () => { - beforeEach(() => { - jest.clearAllMocks(); - (useIsExperimentalFeatureEnabled as jest.Mock).mockReturnValue(false); - (useDataView as jest.Mock).mockReturnValue({}); - }); + beforeEach(() => { + jest.clearAllMocks(); + }); - it('should render a loading skeleton while retrieving the dataViewSpec', async () => { - (useSourcererDataView as jest.Mock).mockReturnValue({ - loading: true, - sourcererDataView: dataViewSpec, - }); - - render( - - - - ); - - await waitFor(() => { - expect(screen.getByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); - expect(screen.getByTestId(SKELETON_TEST_ID)).toBeInTheDocument(); - }); - }); + it('should render a loading skeleton if the dataView status is pristine', async () => { + (useDataView as jest.Mock).mockReturnValue({ dataView, status: 'pristine' }); - it('should render an error if the dataViewSpec is undefined', async () => { - (useSourcererDataView as jest.Mock).mockReturnValue({ - loading: false, - sourcererDataView: undefined, - }); - - render( - - - - ); - - expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); - expect(await screen.findByTestId(DATA_VIEW_ERROR_TEST_ID)).toHaveTextContent( - 'Unable to retrieve the data view' - ); - }); + render( + + + + ); - it('should render an error if the dataViewSpec is invalid because id is undefined', async () => { - (useSourcererDataView as jest.Mock).mockReturnValue({ - loading: false, - sourcererDataView: { ...dataViewSpec, id: undefined, title: 'title' }, - }); - - render( - - - - ); - - expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); - expect(await screen.findByTestId(DATA_VIEW_ERROR_TEST_ID)).toHaveTextContent( - 'Unable to retrieve the data view' - ); - }); - - it('should render an error if the dataViewSpec is invalid because title is empty', async () => { - (useSourcererDataView as jest.Mock).mockReturnValue({ - loading: false, - sourcererDataView: { ...dataViewSpec, id: 'id', title: '' }, - }); - - render( - - - - ); - - expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); - expect(await screen.findByTestId(DATA_VIEW_ERROR_TEST_ID)).toHaveTextContent( - 'Unable to retrieve the data view' - ); + await waitFor(() => { + expect(screen.getByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); + expect(screen.getByTestId(SKELETON_TEST_ID)).toBeInTheDocument(); }); + }); - it('should render the content', async () => { - (useSourcererDataView as jest.Mock).mockReturnValue({ - loading: false, - sourcererDataView: { ...dataViewSpec, id: 'id', title: 'title' }, - }); + it('should render a loading skeleton if the dataView status is loading', async () => { + (useDataView as jest.Mock).mockReturnValue({ dataView, status: 'loading' }); - render( - - - - ); + render( + + + + ); - expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); - expect(await screen.findByTestId('alerts-page-content')).toBeInTheDocument(); + await waitFor(() => { + expect(screen.getByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); + expect(screen.getByTestId(SKELETON_TEST_ID)).toBeInTheDocument(); }); }); - describe('newDataViewPickerEnabled true', () => { - beforeEach(() => { - jest.clearAllMocks(); - (useIsExperimentalFeatureEnabled as jest.Mock).mockReturnValue(true); - (useSourcererDataView as jest.Mock).mockReturnValue({}); + it('should render an error if the dataView status is error', async () => { + (useDataView as jest.Mock).mockReturnValue({ + dataView: undefined, + status: 'error', }); - it('should render a loading skeleton if the dataView status is pristine', async () => { - (useDataView as jest.Mock).mockReturnValue({ dataView, status: 'pristine' }); + render( + + + + ); - render( - - - - ); + expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); + expect(await screen.findByTestId(DATA_VIEW_ERROR_TEST_ID)).toHaveTextContent( + 'Unable to retrieve the data view' + ); + }); - await waitFor(() => { - expect(screen.getByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); - expect(screen.getByTestId(SKELETON_TEST_ID)).toBeInTheDocument(); - }); + it('should render an error if the dataView status is ready but it has no indices', async () => { + (useDataView as jest.Mock).mockReturnValue({ + dataView: { + ...dataView, + getRuntimeMappings: jest.fn(), + hasMatchedIndices: jest.fn().mockReturnValue(false), + }, + status: 'ready', }); - it('should render a loading skeleton if the dataView status is loading', async () => { - (useDataView as jest.Mock).mockReturnValue({ dataView, status: 'loading' }); - - render( - - - - ); + render( + + + + ); - await waitFor(() => { - expect(screen.getByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); - expect(screen.getByTestId(SKELETON_TEST_ID)).toBeInTheDocument(); - }); - }); + expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); + expect(await screen.findByTestId(DATA_VIEW_ERROR_TEST_ID)).toHaveTextContent( + 'Unable to retrieve the data view' + ); + }); - it('should render an error if the dataView status is error', async () => { - (useDataView as jest.Mock).mockReturnValue({ - dataView: undefined, - status: 'error', - }); - - render( - - - - ); - - expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); - expect(await screen.findByTestId(DATA_VIEW_ERROR_TEST_ID)).toHaveTextContent( - 'Unable to retrieve the data view' - ); + it('should render the content', async () => { + (useDataView as jest.Mock).mockReturnValue({ + dataView: { + ...dataView, + id: 'id', + getIndexPattern: jest.fn().mockReturnValue('title'), + getRuntimeMappings: jest.fn(), + hasMatchedIndices: jest.fn().mockReturnValue(true), + }, + status: 'ready', }); - it('should render an error if the dataView status is ready but it has no indices', async () => { - (useDataView as jest.Mock).mockReturnValue({ - dataView: { - ...dataView, - getRuntimeMappings: jest.fn(), - hasMatchedIndices: jest.fn().mockReturnValue(false), - }, - status: 'ready', - }); - - render( - - - - ); - - expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); - expect(await screen.findByTestId(DATA_VIEW_ERROR_TEST_ID)).toHaveTextContent( - 'Unable to retrieve the data view' - ); - }); + render( + + + + ); - it('should render the content', async () => { - (useDataView as jest.Mock).mockReturnValue({ - dataView: { - ...dataView, - id: 'id', - getIndexPattern: jest.fn().mockReturnValue('title'), - getRuntimeMappings: jest.fn(), - hasMatchedIndices: jest.fn().mockReturnValue(true), - }, - status: 'ready', - }); - - render( - - - - ); - - expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); - expect(await screen.findByTestId('alerts-page-content')).toBeInTheDocument(); - }); + expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); + expect(await screen.findByTestId('alerts-page-content')).toBeInTheDocument(); }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/wrapper.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/wrapper.tsx index 2c39b1fb088fd..b268cecc0c36c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/wrapper.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts/wrapper.tsx @@ -16,11 +16,8 @@ import { EuiSpacer, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy'; import { PageScope } from '../../../data_view_manager/constants'; import { HeaderPage } from '../../../common/components/header_page'; -import { useSourcererDataView } from '../../../sourcerer/containers'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import { useDataView } from '../../../data_view_manager/hooks/use_data_view'; import { AlertsPageContent } from './content'; import { PAGE_TITLE } from '../../pages/alerts/translations'; @@ -39,48 +36,13 @@ const DATAVIEW_ERROR = i18n.translate('xpack.securitySolution.alertsPage.dataVie * Shows an error message if the dataView is invalid. */ export const Wrapper = memo(() => { - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); + const { dataView, status } = useDataView(PageScope.alerts); - const { sourcererDataView: oldSourcererDataViewSpec, loading: oldSourcererDataViewIsLoading } = - useSourcererDataView(PageScope.alerts); - // TODO rename to just dataView and status once we remove the newDataViewPickerEnabled feature flag - const { dataView: experimentalDataView, status: experimentalDataViewStatus } = useDataView( - PageScope.alerts - ); - - const isLoading: boolean = useMemo( - () => - newDataViewPickerEnabled - ? experimentalDataViewStatus === 'loading' || experimentalDataViewStatus === 'pristine' - : oldSourcererDataViewIsLoading, - [experimentalDataViewStatus, newDataViewPickerEnabled, oldSourcererDataViewIsLoading] - ); - - // TODO this will not be needed anymore once we remove the newDataViewPickerEnabled feature flag. - // We currently only need the runtimeMappings in the KPIsSection, so we can just pass down the dataView - // and extract the runtimeMappings from it there using experimentalDataView.getRuntimeMappings() - const runtimeMappings: RunTimeMappings = useMemo( - () => - newDataViewPickerEnabled - ? (experimentalDataView?.getRuntimeMappings() as RunTimeMappings) ?? {} // TODO remove the ? as the dataView should never be undefined - : (oldSourcererDataViewSpec?.runtimeFieldMap as RunTimeMappings) ?? {}, - [newDataViewPickerEnabled, experimentalDataView, oldSourcererDataViewSpec?.runtimeFieldMap] - ); + const isLoading: boolean = useMemo(() => status === 'loading' || status === 'pristine', [status]); const isDataViewInvalid: boolean = useMemo( - () => - newDataViewPickerEnabled - ? experimentalDataViewStatus === 'error' || - (experimentalDataViewStatus === 'ready' && !experimentalDataView.hasMatchedIndices()) - : !oldSourcererDataViewSpec || - !oldSourcererDataViewSpec.id || - !oldSourcererDataViewSpec.title, - [ - experimentalDataView, - experimentalDataViewStatus, - newDataViewPickerEnabled, - oldSourcererDataViewSpec, - ] + () => status === 'error' || (status === 'ready' && !dataView.hasMatchedIndices()), + [dataView, status] ); return ( @@ -120,11 +82,7 @@ export const Wrapper = memo(() => { title={

{DATAVIEW_ERROR}

} /> ) : ( - + )} } diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/index.test.tsx index 5d812b647ac40..a3644181a6830 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_kpis/chart_panels/index.test.tsx @@ -12,8 +12,6 @@ import { useAlertsLocalStorage } from './alerts_local_storage'; import type { Status } from '../../../../../common/api/detection_engine'; import { RESET_GROUP_BY_FIELDS } from './chart_settings_popover/configurations/default/translations'; import { CHART_SETTINGS_POPOVER_ARIA_LABEL } from './chart_settings_popover/translations'; -import { mockBrowserFields } from '../../../../common/containers/source/mock'; -import { useSourcererDataView } from '../../../../sourcerer/containers'; import { TestProviders } from '../../../../common/mock'; import { ChartPanels } from '.'; import { useQueryToggle } from '../../../../common/containers/query_toggle'; @@ -21,7 +19,6 @@ import { LensEmbeddable } from '../../../../common/components/visualization_acti import { createResetGroupByFieldAction } from '../alerts_histogram_panel/helpers'; jest.mock('./alerts_local_storage'); -jest.mock('../../../../sourcerer/containers'); jest.mock('../../../../common/components/visualization_actions/lens_embeddable'); jest.mock('../../../../common/components/page/use_refetch_by_session', () => ({ @@ -152,13 +149,6 @@ describe('ChartPanels', () => { jest.clearAllMocks(); mockUseQueryToggle.mockReturnValue({ toggleStatus: true, setToggleStatus: mockSetToggle }); - (useSourcererDataView as jest.Mock).mockReturnValue({ - indicesExist: true, - indexPattern: {}, - browserFields: mockBrowserFields, - sourcererDataView: {}, - }); - (useAlertsLocalStorage as jest.Mock).mockReturnValue({ ...defaultAlertSettings, }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_kpis/common/hooks.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_kpis/common/hooks.test.tsx index 7bf170dedc4ab..132f7429b3c65 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_kpis/common/hooks.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_kpis/common/hooks.test.tsx @@ -13,17 +13,12 @@ import type { GetAggregatableFields, UseInspectButtonParams } from './hooks'; import { getAggregatableFields, useInspectButton, useStackByFields } from './hooks'; import { mockBrowserFields } from '../../../../common/containers/source/mock'; import { TestProviders } from '../../../../common/mock'; -import { useSourcererDataView } from '../../../../sourcerer/containers'; import { useBrowserFields } from '../../../../data_view_manager/hooks/use_browser_fields'; jest.mock('react-router-dom', () => { const actual = jest.requireActual('react-router-dom'); return { ...actual, useLocation: jest.fn().mockReturnValue({ pathname: '' }) }; }); -jest.mock('../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn(), - getScopeFromPath: jest.fn(), -})); jest.mock('../../../../data_view_manager/hooks/use_browser_fields'); describe('getAggregatableFields', () => { @@ -68,15 +63,10 @@ describe('getAggregatableFields', () => { }); describe('hooks', () => { - const mockUseSourcererDataView = useSourcererDataView as jest.Mock; const mockUseBrowserFields = useBrowserFields as jest.Mock; describe('useInspectButton', () => { beforeEach(() => { - mockUseSourcererDataView.mockReturnValue({ - browserFields: mockBrowserFields, - }); - jest.clearAllMocks(); }); @@ -120,9 +110,6 @@ describe('hooks', () => { }); it('returns only aggregateable fields', () => { - mockUseSourcererDataView.mockReturnValue({ - browserFields: mockBrowserFields, - }); mockUseBrowserFields.mockReturnValue(mockBrowserFields); const wrapper = ({ children }: React.PropsWithChildren) => ( @@ -138,9 +125,6 @@ describe('hooks', () => { }); it('returns only Lens compatible fields (check if one of esTypes is keyword)', () => { - mockUseSourcererDataView.mockReturnValue({ - browserFields: { base: mockBrowserFields.base }, - }); mockUseBrowserFields.mockReturnValue({ base: mockBrowserFields.base }); const wrapper = ({ children }: React.PropsWithChildren) => ( @@ -157,9 +141,6 @@ describe('hooks', () => { }); it('returns only Lens compatible fields (check if it is a nested field)', () => { - mockUseSourcererDataView.mockReturnValue({ - browserFields: { nestedField: mockBrowserFields.nestedField }, - }); mockUseBrowserFields.mockReturnValue({ nestedField: mockBrowserFields.nestedField }); const wrapper = ({ children }: React.PropsWithChildren) => ( diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_kpis/common/hooks.ts b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_kpis/common/hooks.ts index bcf8596cbde5a..f75117cf13fca 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_kpis/common/hooks.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_kpis/common/hooks.ts @@ -12,10 +12,8 @@ import type { IFieldSubTypeNested } from '@kbn/es-query'; import type { FieldSpec } from '@kbn/data-plugin/common'; import { i18n } from '@kbn/i18n'; -import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; import type { GlobalTimeArgs } from '../../../../common/containers/use_global_time'; -import { useSourcererDataView } from '../../../../sourcerer/containers'; import { getScopeFromPath } from '../../../../sourcerer/containers/sourcerer_paths'; import { getAllFieldsByName } from '../../../../common/containers/source'; import { isLensSupportedType } from '../../../../common/utils/lens'; @@ -103,12 +101,7 @@ export const useStackByFields = (useLensCompatibleFields?: boolean) => { const { addError } = useAppToasts(); const sourcererScope = getScopeFromPath(pathname); - const { browserFields: oldBrowserFields } = useSourcererDataView(sourcererScope); - - const experimentalBrowserFields = useBrowserFields(sourcererScope); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const browserFields = newDataViewPickerEnabled ? experimentalBrowserFields : oldBrowserFields; + const browserFields = useBrowserFields(sourcererScope); return useCallback(() => { try { diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/additional_toolbar_controls.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/additional_toolbar_controls.test.tsx index 719f516ffbcc4..e609b295923d9 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/additional_toolbar_controls.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/additional_toolbar_controls.test.tsx @@ -10,7 +10,6 @@ import { AdditionalToolbarControls } from './additional_toolbar_controls'; import { TableId } from '@kbn/securitysolution-data-table'; import { render, fireEvent, screen, waitFor } from '@testing-library/react'; import { createMockStore, mockGlobalState, TestProviders } from '../../../common/mock'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import { useDeepEqualSelector, useShallowEqualSelector } from '../../../common/hooks/use_selector'; import { useKibana as mockUseKibana } from '../../../common/lib/kibana/__mocks__'; import { createTelemetryServiceMock } from '../../../common/lib/telemetry/telemetry_service.mock'; @@ -27,7 +26,6 @@ jest.mock('react-redux', () => { useDispatch: () => mockDispatch, }; }); -jest.mock('../../../sourcerer/containers'); jest.mock('../../../common/hooks/use_selector'); jest.mock('../../../common/lib/kibana', () => { const original = jest.requireActual('../../../common/lib/kibana'); @@ -44,14 +42,6 @@ jest.mock('../../../common/lib/kibana', () => { }; }); -const sourcererDataView = { - indicesExist: true, - loading: false, - indexPattern: { - fields: [], - }, - browserFields: {}, -}; const mockOptions = [ { label: 'ruleName', key: 'kibana.alert.rule.name' }, { label: 'userName', key: 'user.name' }, @@ -72,11 +62,6 @@ describe('AdditionalToolbarControls', () => { showBuildBlockAlerts: false, }); jest.clearAllMocks(); - (useSourcererDataView as jest.Mock).mockReturnValue({ - ...sourcererDataView, - selectedPatterns: ['myFakebeat-*'], - sourcererDataView: {}, - }); }); afterEach(() => { diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/additional_toolbar_controls.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/additional_toolbar_controls.tsx index e4babf9657249..179b6bab625bc 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/additional_toolbar_controls.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/additional_toolbar_controls.tsx @@ -19,7 +19,6 @@ import { getTelemetryEvent } from '@kbn/grouping/src/telemetry/const'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import type { GetSecurityAlertsTableProp } from './types'; import { groupIdSelector } from '../../../common/store/grouping/selectors'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import { SummaryViewSelector } from '../../../common/components/events_viewer/summary_view_select'; import { updateGroups } from '../../../common/store/grouping/actions'; import { useKibana } from '../../../common/lib/kibana'; @@ -28,7 +27,6 @@ import { useDataTableFilters } from '../../../common/hooks/use_data_table_filter import { useDeepEqualSelector, useShallowEqualSelector } from '../../../common/hooks/use_selector'; import { AdditionalFiltersAction } from './additional_filters_action'; import { useDataView } from '../../../data_view_manager/hooks/use_data_view'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import { DETECTIONS_TABLE_IDS } from '../../constants'; const { changeViewMode } = dataTableActions; @@ -45,10 +43,7 @@ const AdditionalToolbarControlsComponent = ({ services: { telemetry }, } = useKibana(); - const { sourcererDataView: oldSourcererDataView } = useSourcererDataView(pageScope); - - const isNewDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const { dataView: experimentalDataView } = useDataView(pageScope); + const { dataView } = useDataView(pageScope); const groupId = useMemo(() => groupIdSelector(), []); const { options, settings } = useDeepEqualSelector((state) => groupId(state, tableType)) ?? { @@ -77,13 +72,7 @@ const AdditionalToolbarControlsComponent = ({ [dispatch, tableType, trackGroupChange] ); - const fields = useMemo( - () => - isNewDataViewPickerEnabled - ? experimentalDataView.fields.map((field) => field.spec) - : Object.values(oldSourcererDataView.fields || {}), - [experimentalDataView.fields, isNewDataViewPickerEnabled, oldSourcererDataView.fields] - ); + const fields = useMemo(() => dataView.fields.map((field) => field.spec), [dataView.fields]); const groupSelector = useGetGroupSelectorStateless({ groupingId: tableType, diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_grouping.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_grouping.test.tsx index 90046a57a0414..8a9b1960b4aa2 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_grouping.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_grouping.test.tsx @@ -14,7 +14,6 @@ import { createMockStore, mockGlobalState, TestProviders } from '../../../common import type { AlertsTableComponentProps } from './alerts_grouping'; import { GroupedAlertsTable } from './alerts_grouping'; import { TableId } from '@kbn/securitysolution-data-table'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import type { UseFieldBrowserOptionsProps } from '../../../timelines/components/fields_browser'; import { useKibana as mockUseKibana } from '../../../common/lib/kibana/__mocks__'; import { createTelemetryServiceMock } from '../../../common/lib/telemetry/telemetry_service.mock'; @@ -30,7 +29,6 @@ import { parseGroupingQuery } from '@kbn/grouping/src'; import type { AlertsGroupingAggregation } from './grouping_settings/types'; jest.mock('../../containers/detection_engine/alerts/use_query'); -jest.mock('../../../sourcerer/containers'); jest.mock('../../../common/utils/normalize_time_range'); jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('test-uuid'), @@ -143,14 +141,7 @@ jest.mock('../../../common/lib/kuery', () => ({ jest.mock('../../../common/components/popover_items', () => ({ PopoverItems: () => null, })); -const sourcererDataView = { - indicesExist: true, - loading: false, - indexPattern: { - fields: [], - }, - browserFields: {}, -}; + const renderChildComponent = (groupingFilters: Filter[]) =>

; const dataView: DataView = getMockDataViewWithMatchedIndices(['test']); @@ -167,7 +158,6 @@ const testProps: AlertsTableComponentProps = { aggregations: defaultGroupStatsAggregations, renderer: simpleGroupStatsRenderer, }, - dataViewSpec: dataView.toSpec(), dataView, defaultFilters: [], defaultGroupingOptions, @@ -246,11 +236,6 @@ describe('GroupedAlertsTable', () => { [testProps.tableId]: { options: mockOptions, activeGroups: ['kibana.alert.rule.name'] }, }, }); - (useSourcererDataView as jest.Mock).mockReturnValue({ - ...sourcererDataView, - selectedPatterns: ['myFakebeat-*'], - sourcererDataView: {}, - }); jest.mocked(useDataView).mockReturnValue({ status: 'ready', diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_grouping.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_grouping.tsx index 166d49d2d9ad0..3b95fa9abe316 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_grouping.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_grouping.tsx @@ -8,7 +8,7 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { useDispatch } from 'react-redux'; import type { Filter, Query } from '@kbn/es-query'; -import type { DataView, DataViewSpec } from '@kbn/data-views-plugin/common'; +import type { DataView } from '@kbn/data-views-plugin/common'; import { type GroupOption, type GroupStatsItem, @@ -32,7 +32,6 @@ import type { ParsedGroupingAggregation, } from '@kbn/grouping/src'; import type { PageScope } from '../../../data_view_manager/constants'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import type { GroupTakeActionItems } from './types'; import type { AlertsGroupingAggregation } from './grouping_settings/types'; import { groupIdSelector } from '../../../common/store/grouping/selectors'; @@ -67,20 +66,10 @@ export interface AlertsTableComponentProps { */ renderer: GetGroupStats; }; - /** - * Data view scope - */ - pageScope?: PageScope; - // TODO remove when we remove the newDataViewPickerEnabled feature flag - /** - * DataViewSpec object to use internally to fetch the data - */ - dataViewSpec: DataViewSpec; - // TODO this should probably not be optional anymore once we remove the newDataViewPickerEnabled feature flag /** * DataView object to use internally to fetch the data. */ - dataView?: DataView; + dataView: DataView; defaultFilters?: Filter[]; /** * Default values to display in the group selection dropdown. @@ -96,6 +85,10 @@ export interface AlertsTableComponentProps { */ groupTakeActionItems?: GroupTakeActionItems; loading: boolean; + /** + * Data view scope + */ + pageScope?: PageScope; renderChildComponent: GroupChildComponentRenderer; tableId: TableIdLiteral; to: string; @@ -188,7 +181,6 @@ const useStorage = (storage: Storage, tableId: string) => const GroupedAlertsTableComponent: React.FC = (props) => { const dispatch = useDispatch(); - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); const { services: { storage, telemetry }, } = useKibana(); @@ -236,11 +228,8 @@ const GroupedAlertsTableComponent: React.FC = (props) }, [dispatch, props.tableId, props.settings]); const fields = useMemo( - () => - newDataViewPickerEnabled - ? props.dataView?.fields.map((field) => field.spec) || [] - : Object.values(props.dataViewSpec.fields || {}), - [newDataViewPickerEnabled, props.dataView?.fields, props.dataViewSpec.fields] + () => props.dataView.fields.map((field) => field.spec) || [], + [props.dataView?.fields] ); const multiValueFieldsToFlatten = useMemo( @@ -249,17 +238,11 @@ const GroupedAlertsTableComponent: React.FC = (props) ); const runtimeMappings = useMemo( - () => - newDataViewPickerEnabled - ? (props.dataView?.getRuntimeMappings() as RunTimeMappings) - : (props.dataViewSpec?.runtimeFieldMap as RunTimeMappings), - [newDataViewPickerEnabled, props.dataView, props.dataViewSpec?.runtimeFieldMap] + () => props.dataView?.getRuntimeMappings() as RunTimeMappings, + [props.dataView] ); - const dataViewTitle = useMemo( - () => (newDataViewPickerEnabled ? props.dataView?.title : props.dataViewSpec.title), - [newDataViewPickerEnabled, props.dataView?.title, props.dataViewSpec.title] - ); + const dataViewTitle = useMemo(() => props.dataView?.title, [props.dataView?.title]); const groupingOptions = useMemo( () => props.defaultGroupingOptions || DEFAULT_GROUPING_OPTIONS, diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_sub_grouping.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_sub_grouping.test.tsx index c0accb91ae88a..c706ca648de1a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_sub_grouping.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_sub_grouping.test.tsx @@ -11,7 +11,6 @@ import { TestProviders } from '../../../common/mock'; import type { AlertsTableComponentProps } from './alerts_sub_grouping'; import { GroupedSubLevelComponent } from './alerts_sub_grouping'; import { useQueryAlerts } from '../../containers/detection_engine/alerts/use_query'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import { groupingSearchResponse } from './grouping_settings/mock'; import { useKibana } from '../../../common/lib/kibana'; import { createTelemetryServiceMock } from '../../../common/lib/telemetry/telemetry_service.mock'; @@ -27,7 +26,6 @@ import { } from '../../containers/detection_engine/alerts/api'; jest.mock('../../containers/detection_engine/alerts/use_query'); -jest.mock('../../../sourcerer/containers'); jest.mock('../../../data_view_manager/hooks/use_data_view'); jest.mock('../../../common/lib/kibana'); jest.mock('../../containers/detection_engine/alerts/api', () => ({ @@ -89,16 +87,6 @@ const testProps: AlertsTableComponentProps = { tableId: TableId.test, }; -const sourcererDataView = { - indicesExist: true, - loading: false, - indexPattern: { - fields: [], - }, - browserFields: {}, - sourcererDataView: {}, -}; - describe('GroupedSubLevelComponent', () => { beforeEach(() => { jest.clearAllMocks(); @@ -106,7 +94,6 @@ describe('GroupedSubLevelComponent', () => { status: 'ready', dataView, }); - (useSourcererDataView as jest.Mock).mockReturnValue(sourcererDataView); mockUseQueryAlerts.mockImplementation((i) => { if (i.skip) { return mockQueryResponse; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_sub_grouping.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_sub_grouping.tsx index fb5bbd83c6f42..472f38e738027 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_sub_grouping.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/alerts_sub_grouping.tsx @@ -25,12 +25,10 @@ import type { TableIdLiteral } from '@kbn/securitysolution-data-table'; import { PageScope } from '../../../data_view_manager/constants'; import { useDataView } from '../../../data_view_manager/hooks/use_data_view'; import type { GroupTakeActionItems } from './types'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import type { RunTimeMappings } from '../../../sourcerer/store/model'; import { combineQueries } from '../../../common/lib/kuery'; import type { AlertsGroupingAggregation } from './grouping_settings/types'; import { InspectButton } from '../../../common/components/inspect'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import { useKibana } from '../../../common/lib/kibana'; import { useGlobalTime } from '../../../common/containers/use_global_time'; import { useInvalidFilterQuery } from '../../../common/hooks/use_invalid_filter_query'; @@ -158,25 +156,16 @@ export const GroupedSubLevelComponent: React.FC = ({ const { services: { uiSettings }, } = useKibana(); - const { browserFields: oldBrowserFields, sourcererDataView: oldSourcererDataView } = - useSourcererDataView(pageScope); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - - const { dataView: experimentalDataView } = useDataView(pageScope); - const experimentalBrowserFields = useBrowserFields(pageScope); - - const sourcererDataView = oldSourcererDataView; - const browserFields = newDataViewPickerEnabled ? experimentalBrowserFields : oldBrowserFields; + const { dataView } = useDataView(pageScope); + const browserFields = useBrowserFields(pageScope); const getGlobalQuery = useCallback( (customFilters: Filter[]) => { - if (browserFields != null && sourcererDataView) { + if (browserFields != null) { return combineQueries({ config: getEsQueryConfig(uiSettings), dataProviders: [], - dataViewSpec: sourcererDataView, - dataView: experimentalDataView, + dataView, browserFields, filters: [ ...defaultFilters, @@ -193,9 +182,8 @@ export const GroupedSubLevelComponent: React.FC = ({ }, [ browserFields, - sourcererDataView, uiSettings, - experimentalDataView, + dataView, defaultFilters, globalFilters, parentGroupingFilter, diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/index.tsx index 2609a2b487bfd..b5fa3ae205397 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/index.tsx @@ -27,7 +27,6 @@ import { PageScope } from '../../../data_view_manager/constants'; import { useDataView } from '../../../data_view_manager/hooks/use_data_view'; import { useAlertsContext } from './alerts_context'; import { useBulkActionsByTableType } from '../../hooks/trigger_actions_alert_table/use_bulk_actions'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import type { GetSecurityAlertsTableProp, SecurityAlertsTableContext, @@ -45,8 +44,6 @@ import { inputsSelectors } from '../../../common/store'; import { combineQueries } from '../../../common/lib/kuery'; import { useInvalidFilterQuery } from '../../../common/hooks/use_invalid_filter_query'; import { StatefulEventContext } from '../../../common/components/events_viewer/stateful_event_context'; -import { useSourcererDataView } from '../../../sourcerer/containers'; -import type { RunTimeMappings } from '../../../sourcerer/store/model'; import { useKibana } from '../../../common/lib/kibana'; import { useDeepEqualSelector } from '../../../common/hooks/use_selector'; import { CellValue, getColumns } from '../../configurations/security_solution_detections'; @@ -185,21 +182,9 @@ const AlertsTableComponent: FC - newDataViewPickerEnabled - ? experimentalDataView.getRuntimeMappings() - : (oldSourcererDataView.runtimeFieldMap as RunTimeMappings), - [newDataViewPickerEnabled, experimentalDataView, oldSourcererDataView] - ); - - const browserFields = newDataViewPickerEnabled ? experimentalBrowserFields : oldBrowserFields; + const { dataView } = useDataView(pageScope); + const browserFields = useBrowserFields(pageScope); + const runtimeMappings = useMemo(() => dataView.getRuntimeMappings(), [dataView]); const license = useLicense(); const isEnterprisePlus = license.isEnterprise(); @@ -228,12 +213,11 @@ const AlertsTableComponent: FC { - if (browserFields != null && (oldSourcererDataView || experimentalDataView)) { + if (browserFields != null) { return combineQueries({ config: getEsQueryConfig(uiSettings), dataProviders: [], - dataViewSpec: oldSourcererDataView, - dataView: experimentalDataView, + dataView, browserFields, filters: [...allFilters], kqlQuery: globalQuery, @@ -241,14 +225,7 @@ const AlertsTableComponent: FC ({ jest.mock('../../../../common/hooks/use_experimental_features', () => ({ useIsExperimentalFeatureEnabled: jest.fn().mockReturnValue(false), })); -jest.mock('../../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - browserFields: {}, - dataViewId: 'test-data-view-id', - sourcererDataView: { runtimeFieldMap: {} }, - selectedPatterns: [], - }), -})); jest.mock('../../../../timelines/containers', () => ({ useTimelineEventsHandler: jest.fn().mockReturnValue([null, null, jest.fn()]), })); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_add_bulk_to_timeline.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_add_bulk_to_timeline.tsx index 98c0b1618be25..45ea141d03767 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_add_bulk_to_timeline.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_add_bulk_to_timeline.tsx @@ -19,7 +19,6 @@ import { import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy'; import type { PageScope } from '../../../../data_view_manager/constants'; import { useDataView } from '../../../../data_view_manager/hooks/use_data_view'; -import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import { useSelectedPatterns } from '../../../../data_view_manager/hooks/use_selected_patterns'; import { useBrowserFields } from '../../../../data_view_manager/hooks/use_browser_fields'; import type { CustomBulkAction } from '../../../../../common/types'; @@ -31,7 +30,6 @@ import { useTimelineEventsHandler } from '../../../../timelines/containers'; import type { State } from '../../../../common/store/types'; import { INVESTIGATE_BULK_IN_TIMELINE } from '../translations'; import type { Direction } from '../../../../../common/search_strategy'; -import { useSourcererDataView } from '../../../../sourcerer/containers'; import { globalFiltersQuerySelector } from '../../../../common/store/inputs/selectors'; import { useUserPrivileges } from '../../../../common/components/user_privileges'; import { useSendBulkToTimeline } from './use_send_bulk_to_timeline'; @@ -67,43 +65,19 @@ export const useAddBulkToTimelineAction = ({ scopeId, }: UseAddBulkToTimelineActionProps) => { const [disableActionOnSelectAll, setDisabledActionOnSelectAll] = useState(false); - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - - const { dataView: experimentalDataView } = useDataView(scopeId); - const experimentalBrowserFields = useBrowserFields(scopeId); - const experimentalSelectedPatterns = useSelectedPatterns(scopeId); const { timelinePrivileges: { read: canReadTimelines }, } = useUserPrivileges(); - const { - browserFields: oldBrowserFields, - dataViewId: oldDataViewId, - sourcererDataView: oldSourcererDataViewSpec, - // important to get selectedPatterns from useSourcererDataView - // in order to include the exclude filters in the search that are not stored in the timeline - selectedPatterns: oldSelectedPatterns, - } = useSourcererDataView(scopeId); - - const runtimeMappings = useMemo(() => { - return newDataViewPickerEnabled - ? (experimentalDataView.getRuntimeMappings() as RunTimeMappings) - : (oldSourcererDataViewSpec.runtimeFieldMap as RunTimeMappings); - }, [newDataViewPickerEnabled, experimentalDataView, oldSourcererDataViewSpec.runtimeFieldMap]); - - const dataViewId = useMemo( - () => (newDataViewPickerEnabled ? experimentalDataView.id ?? '' : oldDataViewId), - [experimentalDataView.id, newDataViewPickerEnabled, oldDataViewId] - ); - const browserFields = useMemo( - () => (newDataViewPickerEnabled ? experimentalBrowserFields : oldBrowserFields), - [experimentalBrowserFields, newDataViewPickerEnabled, oldBrowserFields] - ); - const selectedPatterns = useMemo( - () => (newDataViewPickerEnabled ? experimentalSelectedPatterns : oldSelectedPatterns), - [experimentalSelectedPatterns, newDataViewPickerEnabled, oldSelectedPatterns] + const { dataView } = useDataView(scopeId); + const browserFields = useBrowserFields(scopeId); + const selectedPatterns = useSelectedPatterns(scopeId); + const runtimeMappings = useMemo( + () => dataView.getRuntimeMappings() as RunTimeMappings, + [dataView] ); + const dataViewId = useMemo(() => dataView.id ?? '', [dataView.id]); const dispatch = useDispatch(); const { uiSettings } = useKibana().services; @@ -132,20 +106,13 @@ export const useAddBulkToTimelineAction = ({ return combineQueries({ config: esQueryConfig, dataProviders: [], - dataViewSpec: oldSourcererDataViewSpec, - dataView: experimentalDataView, + dataView, filters: combinedFilters, kqlQuery: { query: '', language: 'kuery' }, browserFields, kqlMode: 'filter', }); - }, [ - esQueryConfig, - oldSourcererDataViewSpec, - experimentalDataView, - combinedFilters, - browserFields, - ]); + }, [esQueryConfig, dataView, combinedFilters, browserFields]); const filterQuery = useMemo(() => { if (!combinedQuery) return ''; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/schedule_flyout/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/schedule_flyout/index.test.tsx index 9fde584aee7dc..f00c0be52b7dd 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/schedule_flyout/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/schedule_flyout/index.test.tsx @@ -11,7 +11,6 @@ import { fireEvent, render, screen } from '@testing-library/react'; import { SchedulesFlyout } from '.'; import { useKibana } from '../../../../common/lib/kibana'; import { TestProviders } from '../../../../common/mock'; -import { useSourcererDataView } from '../../../../sourcerer/containers'; import { ATTACK_DISCOVERY_SCHEDULE, ATTACK_DISCOVERY_SETTINGS, @@ -19,7 +18,6 @@ import { jest.mock('../../../../common/hooks/use_experimental_features'); jest.mock('../../../../common/lib/kibana'); -jest.mock('../../../../sourcerer/containers'); jest.mock('react-router-dom', () => ({ matchPath: jest.fn(), useLocation: jest.fn().mockReturnValue({ @@ -33,9 +31,6 @@ const defaultProps = { }; const mockUseKibana = useKibana as jest.MockedFunction; -const mockUseSourcererDataView = useSourcererDataView as jest.MockedFunction< - typeof useSourcererDataView ->; const setupMocks = () => { mockUseKibana.mockReturnValue({ @@ -53,11 +48,6 @@ const setupMocks = () => { }, }, } as unknown as jest.Mocked>); - - mockUseSourcererDataView.mockReturnValue({ - sourcererDataView: {}, - loading: false, - } as unknown as jest.Mocked>); }; const renderComponent = (props = defaultProps) => { diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/table/table_section.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/table/table_section.test.tsx index ce97458203d57..95a23a297ad2e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/table/table_section.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/table/table_section.test.tsx @@ -12,7 +12,7 @@ import type { GroupingBucket, ParsedGroupingAggregation } from '@kbn/grouping/sr import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; import { TestProviders } from '../../../../common/mock'; -import type { DataView, DataViewSpec } from '@kbn/data-views-plugin/common'; +import type { DataView } from '@kbn/data-views-plugin/common'; import { TABLE_SECTION_TEST_ID, ATTACKS_TABLE_SORT_STORAGE_KEY, @@ -76,8 +76,9 @@ jest.mock('./attacks_view_options_popover', () => ({ })); jest.mock('./grouping_settings/use_group_stats'); -const dataViewSpec: DataViewSpec = { title: '.alerts-security.alerts-default' }; -const dataView: DataView = createStubDataView({ spec: dataViewSpec }); +const dataView: DataView = createStubDataView({ + spec: { title: '.alerts-security.alerts-default' }, +}); const mockUseGetDefaultGroupTitleRenderers = useGetDefaultGroupTitleRenderers as jest.Mock; const mockUseAttackGroupHandler = useAttackGroupHandler as jest.Mock; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/table/table_section.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/table/table_section.tsx index c45da4d2a321b..e3ed3956bd6e1 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/table/table_section.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/table/table_section.tsx @@ -10,10 +10,9 @@ import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; import type { Filter } from '@kbn/es-query'; import { TableId } from '@kbn/securitysolution-data-table'; import type { DataView } from '@kbn/data-views-plugin/common'; -import { isGroupingBucket } from '@kbn/grouping/src'; import type { GroupingSort, ParsedGroupingAggregation, RawBucket } from '@kbn/grouping/src'; +import { isGroupingBucket } from '@kbn/grouping/src'; import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; - import { AttackDetailsRightPanelKey } from '../../../../flyout/attack_details/constants/panel_keys'; import { ALERT_ATTACK_IDS } from '../../../../../common/field_maps/field_names'; import { PageScope } from '../../../../data_view_manager/constants'; @@ -36,7 +35,6 @@ import type { AlertsGroupingAggregation } from '../../alerts_table/grouping_sett import { useGetDefaultGroupTitleRenderers } from '../../../hooks/attacks/use_get_default_group_title_renderers'; import { useAttackGroupHandler } from '../../../hooks/attacks/use_attack_group_handler'; import type { AssigneesIdsSelection } from '../../../../common/components/assignees/types'; - import { AttackDetailsContainer } from './attack_details/attack_details_container'; import { AlertsTab } from './attack_details/alerts_tab'; import { EmptyResultsPrompt } from './empty_results_prompt'; @@ -267,10 +265,6 @@ export const TableSection = React.memo( const accordionExtraActionGroupStats = useGroupStats(); - const dataViewSpec = useMemo(() => { - return dataView.toSpec(true); - }, [dataView]); - const emptyGroupingComponent = useMemo( () => , [openSchedulesFlyout] @@ -309,7 +303,6 @@ export const TableSection = React.memo( accordionButtonContent={defaultGroupTitleRenderers} accordionExtraActionGroupStats={accordionExtraActionGroupStats} dataView={dataView} - dataViewSpec={dataViewSpec} defaultFilters={defaultFilters} defaultGroupingOptions={groupingOptions} from={from} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/wrapper.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/wrapper.test.tsx index f6b55d8b193aa..98792c57480e6 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/wrapper.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/wrapper.test.tsx @@ -15,12 +15,10 @@ import { } from './wrapper'; import { UNINITIALIZED_DATA_VIEW_EMPTY_STATE_TEST_ID } from './uninitialized_empty_state/uninitialized_data_view_empty_state'; import { TestProviders } from '../../../common/mock'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import { useDataView } from '../../../data_view_manager/hooks/use_data_view'; import type { DataView } from '@kbn/data-views-plugin/common'; import { createStubDataView } from '@kbn/data-views-plugin/common/data_views/data_view.stub'; -jest.mock('../../../common/hooks/use_experimental_features'); jest.mock('../../../data_view_manager/hooks/use_data_view'); jest.mock('./content', () => ({ AttacksPageContent: () =>

, @@ -29,127 +27,104 @@ jest.mock('./content', () => ({ const dataView: DataView = createStubDataView({ spec: {} }); describe('', () => { - describe('newDataViewPickerEnabled false', () => { - beforeEach(() => { - jest.clearAllMocks(); - (useIsExperimentalFeatureEnabled as jest.Mock).mockReturnValue(false); - (useDataView as jest.Mock).mockReturnValue({}); - }); + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should render a loading skeleton if the dataView status is pristine', async () => { + (useDataView as jest.Mock).mockReturnValue({ dataView, status: 'pristine' }); - it('should render an error', async () => { - render( - - - - ); + render( + + + + ); - expect(await screen.findByTestId(DATA_VIEW_ERROR_TEST_ID)).toHaveTextContent( - 'Unable to retrieve the data view' - ); + await waitFor(() => { + expect(screen.getByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); + expect(screen.getByTestId(SKELETON_TEST_ID)).toBeInTheDocument(); }); }); - describe('newDataViewPickerEnabled true', () => { - beforeEach(() => { - jest.clearAllMocks(); - (useIsExperimentalFeatureEnabled as jest.Mock).mockReturnValue(true); - }); + it('should render a loading skeleton if the dataView status is loading', async () => { + (useDataView as jest.Mock).mockReturnValue({ dataView, status: 'loading' }); - it('should render a loading skeleton if the dataView status is pristine', async () => { - (useDataView as jest.Mock).mockReturnValue({ dataView, status: 'pristine' }); + render( + + + + ); - render( - - - - ); + await waitFor(() => { + expect(screen.getByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); + expect(screen.getByTestId(SKELETON_TEST_ID)).toBeInTheDocument(); + }); + }); - await waitFor(() => { - expect(screen.getByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); - expect(screen.getByTestId(SKELETON_TEST_ID)).toBeInTheDocument(); - }); + it('should render an error if the dataView status is error', async () => { + (useDataView as jest.Mock).mockReturnValue({ + dataView: undefined, + status: 'error', }); - it('should render a loading skeleton if the dataView status is loading', async () => { - (useDataView as jest.Mock).mockReturnValue({ dataView, status: 'loading' }); + render( + + + + ); - render( - - - - ); + expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); + expect(await screen.findByTestId(DATA_VIEW_ERROR_TEST_ID)).toHaveTextContent( + 'Unable to retrieve the data view' + ); + }); - await waitFor(() => { - expect(screen.getByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); - expect(screen.getByTestId(SKELETON_TEST_ID)).toBeInTheDocument(); - }); + it('should render the uninitialized empty state if the dataView status is ready but it has no indices', async () => { + const mockDataView = { + ...dataView, + getName: jest.fn().mockReturnValue('My Data View'), + getIndexPattern: jest.fn().mockReturnValue('my-pattern-*'), + getRuntimeMappings: jest.fn(), + hasMatchedIndices: jest.fn().mockReturnValue(false), + }; + + (useDataView as jest.Mock).mockReturnValue({ + dataView: mockDataView, + status: 'ready', }); - it('should render an error if the dataView status is error', async () => { - (useDataView as jest.Mock).mockReturnValue({ - dataView: undefined, - status: 'error', - }); - - render( - - - - ); - - expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); - expect(await screen.findByTestId(DATA_VIEW_ERROR_TEST_ID)).toHaveTextContent( - 'Unable to retrieve the data view' - ); - }); + render( + + + + ); + + expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); + expect(screen.queryByTestId(DATA_VIEW_ERROR_TEST_ID)).not.toBeInTheDocument(); + expect( + await screen.findByTestId(UNINITIALIZED_DATA_VIEW_EMPTY_STATE_TEST_ID) + ).toBeInTheDocument(); + }); - it('should render the uninitialized empty state if the dataView status is ready but it has no indices', async () => { - const mockDataView = { + it('should render the content', async () => { + (useDataView as jest.Mock).mockReturnValue({ + dataView: { ...dataView, - getName: jest.fn().mockReturnValue('My Data View'), - getIndexPattern: jest.fn().mockReturnValue('my-pattern-*'), + id: 'id', + getIndexPattern: jest.fn().mockReturnValue('title'), getRuntimeMappings: jest.fn(), - hasMatchedIndices: jest.fn().mockReturnValue(false), - }; - - (useDataView as jest.Mock).mockReturnValue({ - dataView: mockDataView, - status: 'ready', - }); - - render( - - - - ); - - expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); - expect(screen.queryByTestId(DATA_VIEW_ERROR_TEST_ID)).not.toBeInTheDocument(); - expect( - await screen.findByTestId(UNINITIALIZED_DATA_VIEW_EMPTY_STATE_TEST_ID) - ).toBeInTheDocument(); + hasMatchedIndices: jest.fn().mockReturnValue(true), + }, + status: 'ready', }); - it('should render the content', async () => { - (useDataView as jest.Mock).mockReturnValue({ - dataView: { - ...dataView, - id: 'id', - getIndexPattern: jest.fn().mockReturnValue('title'), - getRuntimeMappings: jest.fn(), - hasMatchedIndices: jest.fn().mockReturnValue(true), - }, - status: 'ready', - }); - - render( - - - - ); - - expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); - expect(await screen.findByTestId('attacks-page-content')).toBeInTheDocument(); - }); + render( + + + + ); + + expect(await screen.findByTestId(DATA_VIEW_LOADING_PROMPT_TEST_ID)).toBeInTheDocument(); + expect(await screen.findByTestId('attacks-page-content')).toBeInTheDocument(); }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/wrapper.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/wrapper.tsx index 61bf8f268adaf..449bc0ac27609 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/wrapper.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/attacks/wrapper.tsx @@ -19,7 +19,6 @@ import { i18n } from '@kbn/i18n'; import { PageScope } from '../../../data_view_manager/constants'; import { HeaderPage } from '../../../common/components/header_page'; import { useDataView } from '../../../data_view_manager/hooks/use_data_view'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import { AttacksPageContent } from './content'; import { UninitializedDataViewEmptyState } from './uninitialized_empty_state/uninitialized_data_view_empty_state'; import { PAGE_TITLE } from '../../pages/attacks/translations'; @@ -33,27 +32,17 @@ const DATAVIEW_ERROR = i18n.translate('xpack.securitySolution.attacksPage.dataVi }); export const Wrapper = React.memo(() => { - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const { dataView, status } = useDataView(PageScope.attacks); - const isLoading: boolean = useMemo( - () => (newDataViewPickerEnabled && status === 'loading') || status === 'pristine', - [status, newDataViewPickerEnabled] - ); - - const isDataViewError: boolean = useMemo( - () => !newDataViewPickerEnabled || status === 'error', - [status, newDataViewPickerEnabled] - ); + const isLoading: boolean = useMemo(() => status === 'loading' || status === 'pristine', [status]); const isDataViewUninitialized: boolean = useMemo( - () => newDataViewPickerEnabled && status === 'ready' && !dataView.hasMatchedIndices(), - [dataView, status, newDataViewPickerEnabled] + () => status === 'ready' && !dataView.hasMatchedIndices(), + [dataView, status] ); const loadedContent = useMemo(() => { - if (isDataViewError) { + if (status === 'error') { return ( { } return ; - }, [isDataViewError, isDataViewUninitialized, dataView]); + }, [dataView, isDataViewUninitialized, status]); return ( { }); jest.spyOn(sourcererSelectors, 'signalIndexName').mockReturnValue(null); - jest.spyOn(sourcererSelectors, 'signalIndexMappingOutdated').mockReturnValue(null); }); it('returns default state', async () => { const { result } = renderHook(() => useUserInfo(), { diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/configurations/security_solution_detections/cell_value_context.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/configurations/security_solution_detections/cell_value_context.tsx index 8e9201a64f6bd..828aa188330a6 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/configurations/security_solution_detections/cell_value_context.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/configurations/security_solution_detections/cell_value_context.tsx @@ -10,10 +10,8 @@ import type { FieldSpec } from '@kbn/data-views-plugin/common'; import { dataTableSelectors, tableDefaults } from '@kbn/securitysolution-data-table'; import type { BrowserFields } from '@kbn/timelines-plugin/common'; import type { PageScope } from '../../../data_view_manager/constants'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import { useLicense } from '../../../common/hooks/use_license'; import { useDeepEqualSelector } from '../../../common/hooks/use_selector'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import { VIEW_SELECTION } from '../../../../common/constants'; import { getAllFieldsByName } from '../../../common/containers/source'; import type { AlertColumnHeaders } from './columns'; @@ -37,12 +35,7 @@ export const AlertTableCellContextProvider = ({ sourcererScope: PageScope; children: React.ReactNode; }) => { - const { browserFields: oldBrowserFields } = useSourcererDataView(sourcererScope); - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const experimentalBrowserFields = useBrowserFields(sourcererScope); - - const browserFields = newDataViewPickerEnabled ? experimentalBrowserFields : oldBrowserFields; - + const browserFields = useBrowserFields(sourcererScope); const browserFieldsByName = useMemo(() => getAllFieldsByName(browserFields), [browserFields]); const license = useLicense(); const gridColumns = useMemo(() => { diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/configurations/security_solution_detections/render_cell_value.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/configurations/security_solution_detections/render_cell_value.test.tsx index 18b623310d3ef..34d55de3168bd 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/configurations/security_solution_detections/render_cell_value.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/configurations/security_solution_detections/render_cell_value.test.tsx @@ -22,15 +22,6 @@ import { AlertTableCellContextProvider } from './cell_value_context'; import { PageScope } from '../../../data_view_manager/constants'; jest.mock('../../../common/lib/kibana'); -jest.mock('../../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - browserFields: {}, - defaultIndex: 'defaultIndex', - loading: false, - indicesExist: true, - sourcererDataView: {}, - }), -})); describe('RenderCellValue', () => { const columnId = '@timestamp'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_signal_index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_signal_index.test.tsx index 1ce302b978a21..b4dde4633fa63 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_signal_index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_signal_index.test.tsx @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { waitFor, act, renderHook } from '@testing-library/react'; +import { act, renderHook, waitFor } from '@testing-library/react'; import { TestProvidersWithPrivileges } from '../../../../common/mock'; import { useSignalIndex } from './use_signal_index'; import * as api from './api'; @@ -30,7 +30,6 @@ describe('useSignalIndex', () => { appToastsMock = useAppToastsMock.create(); (useAppToasts as jest.Mock).mockReturnValue(appToastsMock); jest.spyOn(sourcererSelectors, 'signalIndexName').mockReturnValue(null); - jest.spyOn(sourcererSelectors, 'signalIndexMappingOutdated').mockReturnValue(null); }); test('init', async () => { @@ -157,8 +156,6 @@ describe('useSignalIndex', () => { jest .spyOn(sourcererSelectors, 'signalIndexName') .mockReturnValue('mock-signal-index-from-sourcerer'); - jest.spyOn(sourcererSelectors, 'signalIndexMappingOutdated').mockReturnValue(false); - jest.spyOn(sourcererSelectors, 'signalIndexMappingOutdated').mockReturnValue(false); jest.mocked(signalIndexOutdatedSelector).mockReturnValue(false); jest.mocked(signalIndexNameSelector).mockReturnValue('mock-signal-index-from-sourcerer'); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_signal_index.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_signal_index.tsx index ed7544f14d9c1..76c0221d739ac 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_signal_index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/containers/detection_engine/alerts/use_signal_index.tsx @@ -11,13 +11,10 @@ import { useSelector } from 'react-redux'; import { signalIndexOutdatedSelector } from '../../../../data_view_manager/redux/selectors'; import { useSignalIndexName } from '../../../../data_view_manager/hooks/use_signal_index_name'; -import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; import { createSignalIndex, getSignalIndex } from './api'; import * as i18n from './translations'; import { useAlertsPrivileges } from './use_alerts_privileges'; -import { sourcererSelectors } from '../../../../common/store'; -import type { State } from '../../../../common/store'; type Func = () => Promise; @@ -43,25 +40,8 @@ export const useSignalIndex = (): ReturnSignalIndex => { const { addError } = useAppToasts(); const { hasIndexRead } = useAlertsPrivileges(); - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - - const oldSignalIndexMappingOutdated = useSelector((state: State) => { - return sourcererSelectors.signalIndexMappingOutdated(state); - }); - const experimentalSignalIndexMappingOutdated = useSelector(signalIndexOutdatedSelector); - - const signalIndexMappingOutdated = newDataViewPickerEnabled - ? experimentalSignalIndexMappingOutdated - : oldSignalIndexMappingOutdated; - - const oldSignalIndexName = useSelector((state: State) => { - return sourcererSelectors.signalIndexName(state); - }); - const experimentalSignalIndexName = useSignalIndexName(); - - const signalIndexName = newDataViewPickerEnabled - ? experimentalSignalIndexName - : oldSignalIndexName; + const signalIndexMappingOutdated = useSelector(signalIndexOutdatedSelector); + const signalIndexName = useSignalIndexName(); useEffect(() => { let isSubscribed = true; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/hooks/trigger_actions_alert_table/use_cell_actions.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/hooks/trigger_actions_alert_table/use_cell_actions.tsx index 2d49ee1c27e56..2da1a811401e9 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/hooks/trigger_actions_alert_table/use_cell_actions.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/hooks/trigger_actions_alert_table/use_cell_actions.tsx @@ -11,12 +11,9 @@ import { TableId } from '@kbn/securitysolution-data-table'; import type { RenderContext } from '@kbn/response-ops-alerts-table/types'; import { SECURITY_CELL_ACTIONS_DEFAULT } from '@kbn/ui-actions-plugin/common/trigger_ids'; import { PageScope } from '../../../data_view_manager/constants'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import type { UseDataGridColumnsSecurityCellActionsProps } from '../../../common/components/cell_actions'; import { useDataGridColumnsSecurityCellActions } from '../../../common/components/cell_actions'; import { SecurityCellActionType } from '../../../app/actions/constants'; -import { useGetFieldSpec } from '../../../common/hooks/use_get_field_spec'; -import { useDataViewId } from '../../../common/hooks/use_data_view_id'; import type { GetSecurityAlertsTableProp, SecurityAlertsTableContext, @@ -30,8 +27,7 @@ export const useCellActionsOptions = ( 'columns' | 'oldAlertsData' | 'pageIndex' | 'pageSize' | 'dataGridRef' > ) => { - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const { dataView: experimentalDataView } = useDataView(PageScope.alerts); + const { dataView } = useDataView(PageScope.alerts); const { columns = [], @@ -40,9 +36,7 @@ export const useCellActionsOptions = ( pageSize = 0, dataGridRef, } = context ?? {}; - const oldGetFieldSpec = useGetFieldSpec(PageScope.alerts); - const oldDataViewId = useDataViewId(PageScope.alerts); - const dataViewId = newDataViewPickerEnabled ? experimentalDataView.id : oldDataViewId; + const dataViewId = dataView.id; const cellActionsMetadata = useMemo( () => ({ scopeId: tableId, dataViewId }), @@ -52,16 +46,14 @@ export const useCellActionsOptions = ( () => columns.map( (column) => - (newDataViewPickerEnabled - ? experimentalDataView.fields?.getByName(column.id)?.toSpec() - : oldGetFieldSpec(column.id)) ?? { + dataView.fields?.getByName(column.id)?.toSpec() ?? { name: '', - type: '', // When type is an empty string all cell actions are incompatible + type: '', aggregatable: false, searchable: false, } ), - [columns, experimentalDataView.fields, oldGetFieldSpec, newDataViewPickerEnabled] + [columns, dataView.fields] ); /** diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/hooks/use_rule_from_timeline.test.ts b/x-pack/solutions/security/plugins/security_solution/public/detections/hooks/use_rule_from_timeline.test.ts index a851ef760be33..d2f1dee41b0ac 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/hooks/use_rule_from_timeline.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/hooks/use_rule_from_timeline.test.ts @@ -9,8 +9,6 @@ import { act, renderHook, waitFor } from '@testing-library/react'; import { useRuleFromTimeline } from './use_rule_from_timeline'; import { useGetInitialUrlParamValue } from '../../common/utils/global_query_string/helpers'; import { resolveTimeline } from '../../timelines/containers/api'; -import { useSourcererDataView } from '../../sourcerer/containers'; -import { mockSourcererScope } from '../../sourcerer/containers/mocks'; import { useAppToasts } from '../../common/hooks/use_app_toasts'; import { useAppToastsMock } from '../../common/hooks/use_app_toasts.mock'; import { mockTimeline } from '../../../server/lib/timeline/__mocks__/create_timelines'; @@ -27,7 +25,6 @@ jest.mock('../../common/hooks/use_experimental_features'); jest.mock('../../common/utils/global_query_string/helpers'); jest.mock('../../timelines/containers/api'); jest.mock('../../common/hooks/use_app_toasts'); -jest.mock('../../sourcerer/containers'); jest.mock('../../common/components/discover_in_timeline/use_discover_in_timeline_context'); jest.mock('../../common/components/link_to', () => { const originalModule = jest.requireActual('../../common/components/link_to'); @@ -117,13 +114,6 @@ describe('useRuleFromTimeline', () => { describe('initial data view === rule from timeline data view', () => { beforeEach(() => { - (useSourcererDataView as jest.Mock).mockReturnValue({ - ...mockSourcererScope, - dataViewId: 'custom-data-view-id', - selectedPatterns: ['awesome-*'], - sourcererDataView: {}, - }); - jest.mocked(useDataView).mockReturnValue(withIndices(['awesome-*'], 'custom-data-view-id')); }); @@ -138,18 +128,6 @@ describe('useRuleFromTimeline', () => { describe('initial data view !== rule from timeline data view', () => { beforeEach(() => { - (useSourcererDataView as jest.Mock) - .mockReturnValueOnce({ - ...mockSourcererScope, - dataViewId: 'security-solution', - selectedPatterns: ['auditbeat-*'], - }) - .mockReturnValue({ - ...mockSourcererScope, - dataViewId: 'custom-data-view-id', - selectedPatterns: ['awesome-*'], - }); - const initialDataView = getMockDataView(); initialDataView.id = 'security-solution'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/hooks/use_rule_from_timeline.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/hooks/use_rule_from_timeline.tsx index dbe8edadddf43..8b6002c08f43c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/hooks/use_rule_from_timeline.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/hooks/use_rule_from_timeline.tsx @@ -15,7 +15,6 @@ import { useSelectDataView } from '../../data_view_manager/hooks/use_select_data import { useSelectedPatterns } from '../../data_view_manager/hooks/use_selected_patterns'; import { convertKueryToElasticSearchQuery } from '../../common/lib/kuery'; import { useAppToasts } from '../../common/hooks/use_app_toasts'; -import { useSourcererDataView } from '../../sourcerer/containers'; import type { TimelineModel } from '../..'; import type { FieldValueQueryBar } from '../../detection_engine/rule_creation_ui/components/query_bar_field'; import { sourcererActions } from '../../sourcerer/store'; @@ -24,7 +23,6 @@ import { useGetInitialUrlParamValue } from '../../common/utils/global_query_stri import { buildGlobalQuery } from '../../timelines/components/timeline/helpers'; import { getDataProviderFilter } from '../../timelines/components/timeline/query_bar'; import { useBrowserFields } from '../../data_view_manager/hooks/use_browser_fields'; -import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; import { useDataView } from '../../data_view_manager/hooks/use_data_view'; export const RULE_FROM_TIMELINE_URL_PARAM = 'createRuleFromTimeline'; @@ -57,24 +55,12 @@ export const useRuleFromTimeline = (setRuleQuery: SetRuleQuery): RuleFromTimelin const queryTimelineById = useQueryTimelineById(); const [urlStateInitialized, setUrlStateInitialized] = useState(false); - const { - browserFields: oldBrowserFields, - dataViewId: oldDataViewId, - selectedPatterns: oldSelectedPatterns, - } = useSourcererDataView(PageScope.timeline); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - - const experimentalSelectedPatterns = useSelectedPatterns(PageScope.timeline); - const experimentalBrowserFields = useBrowserFields(PageScope.timeline); - const { dataView: experimentalDataView } = useDataView(PageScope.timeline); + const selectedPatterns = useSelectedPatterns(PageScope.timeline); + const browserFields = useBrowserFields(PageScope.timeline); + const { dataView } = useDataView(PageScope.timeline); const selectDataView = useSelectDataView(); - const selectedPatterns = newDataViewPickerEnabled - ? experimentalSelectedPatterns - : oldSelectedPatterns; - const browserFields = newDataViewPickerEnabled ? experimentalBrowserFields : oldBrowserFields; - const dataViewId = newDataViewPickerEnabled ? experimentalDataView?.id ?? '' : oldDataViewId; + const dataViewId = dataView?.id ?? ''; const isEql = useRef(false); const [selectedTimeline, setSelectedTimeline] = useState(null); @@ -110,16 +96,14 @@ export const useRuleFromTimeline = (setRuleQuery: SetRuleQuery): RuleFromTimelin }) ); - if (newDataViewPickerEnabled) { - selectDataView({ - scope: PageScope.timeline, - id: timeline.dataViewId, - fallbackPatterns: timeline.indexNames, - }); - } + selectDataView({ + scope: PageScope.timeline, + id: timeline.dataViewId, + fallbackPatterns: timeline.indexNames, + }); } }, - [dataViewId, dispatch, newDataViewPickerEnabled, selectDataView] + [dataViewId, dispatch, selectDataView] ); const getTimelineById = useCallback( @@ -205,19 +189,16 @@ export const useRuleFromTimeline = (setRuleQuery: SetRuleQuery): RuleFromTimelin }) ); - if (newDataViewPickerEnabled) { - selectDataView({ - scope: PageScope.timeline, - id: originalDataView.dataViewId, - fallbackPatterns: originalDataView.selectedPatterns, - }); - } + selectDataView({ + scope: PageScope.timeline, + id: originalDataView.dataViewId, + fallbackPatterns: originalDataView.selectedPatterns, + }); } }, [ addError, dataViewId, dispatch, - newDataViewPickerEnabled, originalDataView.dataViewId, originalDataView.selectedPatterns, selectDataView, diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/account_switches_tile/account_switches_tile.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/account_switches_tile/account_switches_tile.tsx index 09e5f6b1a65ed..40cabcb3f4291 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/account_switches_tile/account_switches_tile.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/account_switches_tile/account_switches_tile.tsx @@ -12,9 +12,9 @@ import { i18n } from '@kbn/i18n'; import { getAccountSwitchesEsqlCount } from './esql_query'; import { KeyInsightsTile } from '../common/key_insights_tile'; -export const AccountSwitchesTile: React.FC<{ spaceId: string; sourcerDataView: DataViewSpec }> = ({ +export const AccountSwitchesTile: React.FC<{ spaceId: string; dataViewSpec: DataViewSpec }> = ({ spaceId, - sourcerDataView, + dataViewSpec, }) => { return ( getAccountSwitchesEsqlCount(namespace, sourcerDataView)} + getEsqlQuery={(namespace) => getAccountSwitchesEsqlCount(namespace, dataViewSpec)} id="privileged-user-monitoring-account-switches" spaceId={spaceId} inspectTitle={ diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/authentications_tile/authentications_tile.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/authentications_tile/authentications_tile.tsx index 403d02c520198..e019ab2e7c592 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/authentications_tile/authentications_tile.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/authentications_tile/authentications_tile.tsx @@ -12,9 +12,9 @@ import { i18n } from '@kbn/i18n'; import { getAuthenticationsEsqlCount } from './esql_query'; import { KeyInsightsTile } from '../common/key_insights_tile'; -export const AuthenticationsTile: React.FC<{ spaceId: string; sourcerDataView: DataViewSpec }> = ({ +export const AuthenticationsTile: React.FC<{ spaceId: string; dataViewSpec: DataViewSpec }> = ({ spaceId, - sourcerDataView, + dataViewSpec, }) => { return ( getAuthenticationsEsqlCount(namespace, sourcerDataView)} + getEsqlQuery={(namespace) => getAuthenticationsEsqlCount(namespace, dataViewSpec)} id="privileged-user-monitoring-authentications" spaceId={spaceId} inspectTitle={ diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/granted_rights_tile/granted_rights_tile.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/granted_rights_tile/granted_rights_tile.tsx index eb7da64221f88..1a197dd126588 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/granted_rights_tile/granted_rights_tile.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/granted_rights_tile/granted_rights_tile.tsx @@ -12,9 +12,9 @@ import { i18n } from '@kbn/i18n'; import { getGrantedRightsEsqlCount } from './esql_query'; import { KeyInsightsTile } from '../common/key_insights_tile'; -export const GrantedRightsTile: React.FC<{ spaceId: string; sourcerDataView: DataViewSpec }> = ({ +export const GrantedRightsTile: React.FC<{ spaceId: string; dataViewSpec: DataViewSpec }> = ({ spaceId, - sourcerDataView, + dataViewSpec, }) => { return ( getGrantedRightsEsqlCount(namespace, sourcerDataView)} + getEsqlQuery={(namespace) => getGrantedRightsEsqlCount(namespace, dataViewSpec)} id="privileged-user-monitoring-granted-rights" spaceId={spaceId} inspectTitle={ diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/index.tsx index 3f3e557fe9a69..afd876d60af02 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/key_insights_panel/index.tsx @@ -6,7 +6,7 @@ */ import React from 'react'; -import { EuiPanel, EuiFlexGrid } from '@elastic/eui'; +import { EuiFlexGrid, EuiPanel } from '@elastic/eui'; import type { DataViewSpec } from '@kbn/data-views-plugin/public'; import { PrivilegedUsersTile } from './privileged_users_tile'; @@ -16,9 +16,9 @@ import { GrantedRightsTile } from './granted_rights_tile'; import { AccountSwitchesTile } from './account_switches_tile'; import { AuthenticationsTile } from './authentications_tile'; -export const KeyInsightsPanel: React.FC<{ spaceId: string; sourcerDataView: DataViewSpec }> = ({ +export const KeyInsightsPanel: React.FC<{ spaceId: string; dataViewSpec: DataViewSpec }> = ({ spaceId, - sourcerDataView, + dataViewSpec, }) => { return ( @@ -32,13 +32,13 @@ export const KeyInsightsPanel: React.FC<{ spaceId: string; sourcerDataView: Data - + - + - + ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/privileged_user_activity/index.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/privileged_user_activity/index.test.tsx index 3355e40155c3a..c100ede0223ea 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/privileged_user_activity/index.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/privileged_user_activity/index.test.tsx @@ -37,14 +37,14 @@ jest.mock('../../queries/helpers', () => { }; }); -const mockedSourcererDataView = { +const mockedDataViewSpec = { title: 'test-*', fields: {}, }; describe('UserActivityPrivilegedUsersPanel', () => { it('renders panel title', () => { - render(, { + render(, { wrapper: TestProviders, }); @@ -52,7 +52,7 @@ describe('UserActivityPrivilegedUsersPanel', () => { }); it('renders the toggle button group', () => { - render(, { + render(, { wrapper: TestProviders, }); expect( @@ -61,7 +61,7 @@ describe('UserActivityPrivilegedUsersPanel', () => { }); it('renders the stack by select with options', () => { - render(, { + render(, { wrapper: TestProviders, }); @@ -78,7 +78,7 @@ describe('UserActivityPrivilegedUsersPanel', () => { }); it('renders the EsqlDashboardPanel', () => { - render(, { + render(, { wrapper: TestProviders, }); @@ -86,7 +86,7 @@ describe('UserActivityPrivilegedUsersPanel', () => { }); it('changes stack by option when select changes', () => { - render(, { + render(, { wrapper: TestProviders, }); expect(screen.getByDisplayValue('privileged_user')).toBeInTheDocument(); // Assert that input value before change @@ -103,7 +103,7 @@ describe('UserActivityPrivilegedUsersPanel', () => { }); it('renders the "View all events by privileged users" link', () => { - render(, { + render(, { wrapper: TestProviders, }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/privileged_user_activity/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/privileged_user_activity/index.tsx index abb56ea07a01c..4ff43830859da 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/privileged_user_activity/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/components/privileged_user_activity/index.tsx @@ -25,10 +25,10 @@ import { HeaderSection } from '../../../../../common/components/header_section'; import { PAGE_SIZE, PRIVILEGED_USER_ACTIVITY_QUERY_ID } from './constants'; import { EsqlDashboardPanel } from '../../../privileged_user_monitoring_onboarding/components/esql_dashboard_panel/esql_dashboard_panel'; import { + useDiscoverPath, usePrivilegedUserActivityParams, useStackByOptions, useToggleOptions, - useDiscoverPath, } from './hooks'; import type { TableItemType } from './types'; import { VisualizationToggleOptions } from './types'; @@ -45,8 +45,8 @@ const TITLE = i18n.translate( ); export const UserActivityPrivilegedUsersPanel: React.FC<{ - sourcererDataView: DataViewSpec; -}> = ({ sourcererDataView }) => { + dataViewSpec: DataViewSpec; +}> = ({ dataViewSpec }) => { const { toggleStatus, setToggleStatus } = useQueryToggle(PRIVILEGED_USER_ACTIVITY_QUERY_ID); const { from, to } = useGlobalTime(); const [selectedToggleOption, setToggleOption] = useState( @@ -55,7 +55,7 @@ export const UserActivityPrivilegedUsersPanel: React.FC<{ const { getAppUrl } = useNavigation(); const { getLensAttributes, columns, generateVisualizationQuery, generateTableQuery } = - usePrivilegedUserActivityParams(selectedToggleOption, sourcererDataView); + usePrivilegedUserActivityParams(selectedToggleOption, dataViewSpec); const stackByOptions = useStackByOptions(selectedToggleOption); const stackByLabel = i18n.translate('xpack.securitySolution.genericDashboard.stackBy.label', { defaultMessage: 'Stack by', diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/index.tsx index 0207f89c96b18..d3781ab3c7f31 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/privileged_user_monitoring/index.tsx @@ -27,12 +27,12 @@ export const PrivilegedUserMonitoring = ({ callout, error, onManageUserClicked, - sourcererDataView, + dataViewSpec, }: { callout?: OnboardingCallout; error?: string; onManageUserClicked: () => void; - sourcererDataView: DataViewSpec; + dataViewSpec: DataViewSpec; }) => { const spaceId = useSpaceId(); @@ -120,14 +120,14 @@ export const PrivilegedUserMonitoring = ({ {spaceId && } - {spaceId && } + {spaceId && } {spaceId && } {spaceId && } - + ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/risk_score_management/alert_filters_kql_bar.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/risk_score_management/alert_filters_kql_bar.test.tsx index ad471a63d4eaa..21c8182910581 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/risk_score_management/alert_filters_kql_bar.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/risk_score_management/alert_filters_kql_bar.test.tsx @@ -5,24 +5,19 @@ * 2.0. */ -import { render, screen, fireEvent, waitFor } from '@testing-library/react'; +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; import React from 'react'; import { QueryClient, QueryClientProvider } from '@kbn/react-query'; -import type { DataView, DataViewSpec } from '@kbn/data-views-plugin/public'; -import type { BrowserFields } from '@kbn/timelines-plugin/common'; +import type { DataView } from '@kbn/data-views-plugin/public'; import { AlertFiltersKqlBar } from './alert_filters_kql_bar'; import type { UIAlertFilter } from './common'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import { useKibana } from '../../../common/lib/kibana'; import { TestProviders } from '../../../common/mock'; -import type { SelectedDataView } from '../../../sourcerer/store/model'; +import { useDataView } from '../../../data_view_manager/hooks/use_data_view'; -jest.mock('../../../sourcerer/containers'); jest.mock('../../../common/lib/kibana'); +jest.mock('../../../data_view_manager/hooks/use_data_view'); -const mockUseSourcererDataView = useSourcererDataView as jest.MockedFunction< - typeof useSourcererDataView ->; const mockUseKibana = useKibana as jest.MockedFunction; const mockDataView: Partial = { @@ -31,23 +26,9 @@ const mockDataView: Partial = { fields: [] as unknown as DataView['fields'], }; -const mockSourcererDataViewSpec: DataViewSpec = { - id: 'test-data-view-id', - title: 'test-index', - fields: {} as DataViewSpec['fields'], -}; - -const createMockSelectedDataView = (): SelectedDataView => ({ - browserFields: {} as BrowserFields, - dataViewId: mockSourcererDataViewSpec.id ?? null, - indicesExist: true, - loading: false, - selectedPatterns: [mockSourcererDataViewSpec.title ?? 'test-index'], - sourcererDataView: mockSourcererDataViewSpec, -}); - -const mockCreateDataView = jest.fn().mockResolvedValue(mockDataView); -const mockClearInstanceCache = jest.fn(); +jest.mock('../../../common/components/page_loader', () => ({ + PageLoader: (props: Record) =>
, +})); describe('AlertFiltersKqlBar', () => { let queryClient: QueryClient; @@ -64,8 +45,6 @@ describe('AlertFiltersKqlBar', () => { }, }); - mockUseSourcererDataView.mockReturnValue(createMockSelectedDataView()); - const submitButtonText = 'Submit'; mockUseKibana.mockReturnValue({ services: { @@ -97,14 +76,13 @@ describe('AlertFiltersKqlBar', () => { )), }, }, - data: { - dataViews: { - create: mockCreateDataView, - clearInstanceCache: mockClearInstanceCache, - }, - }, }, } as unknown as ReturnType); + + (useDataView as jest.Mock).mockReturnValue({ + dataView: mockDataView, + status: 'ready', + }); }); afterEach(() => { @@ -143,10 +121,13 @@ describe('AlertFiltersKqlBar', () => { }); }); - it('does not render when dataView is not available', () => { - mockCreateDataView.mockResolvedValueOnce(null); - const { container } = renderComponent(); - expect(container.firstChild).toBeNull(); + it('does render page loaded if dataView is pristine', () => { + (useDataView as jest.Mock).mockReturnValue({ + dataView: mockDataView, + status: 'pristine', + }); + const { getByTestId } = renderComponent(); + expect(getByTestId('page-loader')).toBeInTheDocument(); }); it('renders filters when provided', async () => { @@ -473,28 +454,6 @@ describe('AlertFiltersKqlBar', () => { }); }); - describe('DataView Lifecycle', () => { - it('creates DataView on mount', async () => { - renderComponent(); - await waitFor(() => { - expect(mockCreateDataView).toHaveBeenCalled(); - }); - }); - - it('clears DataView cache on unmount', async () => { - const { unmount } = renderComponent(); - await waitFor(() => { - expect(mockCreateDataView).toHaveBeenCalled(); - }); - - unmount(); - - await waitFor(() => { - expect(mockClearInstanceCache).toHaveBeenCalledWith('test-data-view-id'); - }); - }); - }); - describe('Callbacks', () => { it('does not call callbacks when they are not provided', async () => { renderComponent({ onQueryChange: undefined, onFiltersChange: undefined }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/risk_score_management/alert_filters_kql_bar.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/risk_score_management/alert_filters_kql_bar.tsx index 5360d4320f2a2..ab2ef5e5b5669 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/risk_score_management/alert_filters_kql_bar.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/risk_score_management/alert_filters_kql_bar.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useCallback, useEffect, useState } from 'react'; +import React, { useCallback, useState } from 'react'; import styled from '@emotion/styled'; import type { EuiComboBoxOptionOption } from '@elastic/eui'; import { @@ -22,12 +22,12 @@ import { } from '@elastic/eui'; import type { Query } from '@kbn/es-query'; import { fromKueryExpression } from '@kbn/es-query'; -import type { DataView } from '@kbn/data-views-plugin/public'; -import { PageScope } from '../../../data_view_manager/constants'; -import { useSourcererDataView } from '../../../sourcerer/containers'; +import { PageLoader } from '../../../common/components/page_loader'; +import { useDataView } from '../../../data_view_manager/hooks/use_data_view'; import { useKibana } from '../../../common/lib/kibana'; import * as i18n from '../../translations'; import type { UIAlertFilter } from './common'; +import { PageScope } from '../../../data_view_manager/constants'; const COMBOBOX_LABEL_MAPPING = { user: 'Users', @@ -215,15 +215,14 @@ export const AlertFiltersKqlBar: React.FC = ({ onFiltersChange, filters = [], placeholder = i18n.ALERT_FILTERS_PLACEHOLDER, - compressed = true, 'data-test-subj': dataTestSubj = 'alertFiltersKqlBar', }) => { - const { sourcererDataView } = useSourcererDataView(PageScope.explore); + const { dataView, status } = useDataView(PageScope.explore); + const { unifiedSearch: { ui: { SearchBar }, }, - data, } = useKibana().services; const [query, setQuery] = useState({ @@ -231,27 +230,8 @@ export const AlertFiltersKqlBar: React.FC = ({ language: 'kuery', }); - const [dataView, setDataView] = useState(null); const [validationError, setValidationError] = useState(); - // Create DataView asynchronously to ensure fields are properly populated - useEffect(() => { - let dv: DataView; - const createDataView = async () => { - if (sourcererDataView) { - dv = await data.dataViews.create(sourcererDataView); - setDataView(dv); - } - }; - createDataView(); - - return () => { - if (dv?.id) { - data.dataViews.clearInstanceCache(dv.id); - } - }; - }, [data.dataViews, sourcererDataView]); - const handleQueryChange = useCallback((payload: { query?: Query }) => { if (payload.query) { setQuery(payload.query); @@ -324,8 +304,8 @@ export const AlertFiltersKqlBar: React.FC = ({ [filters, onFiltersChange] ); - if (!dataView) { - return null; + if (status === 'pristine') { + return ; } return ( diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/risk_score_management/risk_score_preview_section.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/risk_score_management/risk_score_preview_section.tsx index 04d64bb2709cd..59dd301466cc4 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/risk_score_management/risk_score_preview_section.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/risk_score_management/risk_score_preview_section.tsx @@ -30,9 +30,7 @@ import { RISK_SCORE_INDEX_PATTERN } from '../../../../common/entity_analytics/ri import { RiskScorePreviewTable } from './risk_score_preview_table'; import * as i18n from '../../translations'; import { useRiskScorePreview } from '../../api/hooks/use_preview_risk_scores'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import { EntityIconByType } from '../entity_store/helpers'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import { useDataView } from '../../../data_view_manager/hooks/use_data_view'; import { useEntityAnalyticsTypes } from '../../hooks/use_enabled_entity_types'; import type { AlertFilter } from './common'; @@ -171,15 +169,10 @@ const RiskEnginePreview: React.FC<{ bool: { must: [], filter: [], should: [], must_not: [] }, }); - const { sourcererDataView: oldSourcererDataView } = useSourcererDataView(PageScope.alerts); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const { dataView: experimentalDataView } = useDataView(PageScope.alerts); - - const sourcererDataView = newDataViewPickerEnabled ? experimentalDataView : oldSourcererDataView; + const { dataView } = useDataView(PageScope.alerts); const { data, isLoading, refetch, isError } = useRiskScorePreview({ - data_view_id: sourcererDataView?.title, + data_view_id: dataView?.title, filter: filters, range: { start: from, diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/top_risk_score_contributors_alerts/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/top_risk_score_contributors_alerts/index.tsx index 53c4593c9d336..e173b2fe4d9fa 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/top_risk_score_contributors_alerts/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/components/top_risk_score_contributors_alerts/index.tsx @@ -32,7 +32,6 @@ import { useGlobalTime } from '../../../common/containers/use_global_time'; import { useDeepEqualSelector } from '../../../common/hooks/use_selector'; import { inputsSelectors } from '../../../common/store/inputs'; import { useUserData } from '../../../detections/components/user_info'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import { RiskInformationButtonEmpty } from '../risk_information'; import { useDataView } from '../../../data_view_manager/hooks/use_data_view'; @@ -54,9 +53,7 @@ export const TopRiskScoreContributorsAlerts = ({ const { to, from } = useGlobalTime(); const [{ loading: userInfoLoading, hasIndexWrite, hasIndexMaintenance }] = useUserData(); - const { sourcererDataView: oldSourcererDataViewSpec } = useSourcererDataView(PageScope.alerts); - - const { dataView: experimentalDataView } = useDataView(PageScope.alerts); + const { dataView } = useDataView(PageScope.alerts); const getGlobalFiltersQuerySelector = useMemo( () => inputsSelectors.globalFiltersQuerySelector(), @@ -141,8 +138,7 @@ export const TopRiskScoreContributorsAlerts = ({ ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../common/utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/lens_attributes/risk_score_over_time_area.test.ts b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/lens_attributes/risk_score_over_time_area.test.ts index 4d8bbb7cfe259..14f0070dc91f7 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/lens_attributes/risk_score_over_time_area.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/lens_attributes/risk_score_over_time_area.test.ts @@ -12,15 +12,6 @@ import { getRiskScoreOverTimeAreaAttributes } from './risk_score_over_time_area' import { useLensAttributes } from '../../common/components/visualization_actions/use_lens_attributes'; import { wrapper } from '../../common/components/visualization_actions/mocks'; -jest.mock('../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('../../common/utils/route/use_route_spy', () => ({ useRouteSpy: jest.fn().mockReturnValue([ { diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/lens_attributes/risk_score_summary.test.ts b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/lens_attributes/risk_score_summary.test.ts index 516ad4bef5695..34e001a5d2983 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/lens_attributes/risk_score_summary.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/lens_attributes/risk_score_summary.test.ts @@ -14,15 +14,6 @@ import { useLensAttributes } from '../../common/components/visualization_actions import type { Query } from '@kbn/es-query'; import { EntityType } from '../../../common/entity_analytics/types'; -jest.mock('../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn().mockReturnValue({ - selectedPatterns: ['auditbeat-mytest-*'], - dataViewId: 'security-solution-my-test', - indicesExist: true, - sourcererDataView: {}, - }), -})); - jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('generated-uuid'), })); diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_dashboard.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_dashboard.test.tsx index ad45aedd7c598..c9f0b2073e48a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_dashboard.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_dashboard.test.tsx @@ -6,27 +6,18 @@ */ import React from 'react'; -import { render, screen, waitFor, fireEvent } from '@testing-library/react'; +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { MemoryRouter } from 'react-router-dom'; import { EntityAnalyticsPage } from './entity_analytics_dashboard'; import { TestProviders } from '../../common/mock'; -import { useSourcererDataView } from '../../sourcerer/containers'; import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; import { useEntityAnalyticsTypes } from '../hooks/use_enabled_entity_types'; - -jest.mock('../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn(() => ({ - indicesExist: true, - loading: false, - sourcererDataView: { id: 'test', matchedIndices: ['index-1'] }, - })), -})); +import { useDataView } from '../../data_view_manager/hooks/use_data_view'; jest.mock('../../common/hooks/use_experimental_features', () => ({ useIsExperimentalFeatureEnabled: jest.fn((flag: string) => { - if (flag === 'newDataViewPickerEnabled') return false; if (flag === 'entityStoreDisabled') return false; return false; }), @@ -38,12 +29,7 @@ jest.mock('../../data_view_manager/hooks/use_data_view_spec', () => ({ })), })); -jest.mock('../../data_view_manager/hooks/use_data_view', () => ({ - useDataView: jest.fn(() => ({ - dataView: { matchedIndices: ['index-2'] }, - status: 'ready', - })), -})); +jest.mock('../../data_view_manager/hooks/use_data_view'); jest.mock('../hooks/use_enabled_entity_types', () => ({ useEntityAnalyticsTypes: jest.fn(() => ['host', 'user']), @@ -79,14 +65,11 @@ describe('EntityAnalyticsPage', () => { beforeEach(() => { jest.clearAllMocks(); - (useSourcererDataView as jest.Mock).mockReturnValue({ - indicesExist: true, - loading: false, - sourcererDataView: { id: 'test', matchedIndices: ['index-1'] }, + (useDataView as jest.Mock).mockReturnValue({ + dataView: { matchedIndices: ['index-2'] }, + status: 'ready', }); - (useIsExperimentalFeatureEnabled as jest.Mock).mockImplementation((flag: string) => { - if (flag === 'newDataViewPickerEnabled') return false; if (flag === 'entityStoreDisabled') return false; return false; }); @@ -130,11 +113,10 @@ describe('EntityAnalyticsPage', () => { expect(screen.getByText('Entity analytics')).toBeInTheDocument(); }); - it('renders loading spinner when sourcerer is loading', () => { - (useSourcererDataView as jest.Mock).mockReturnValue({ - indicesExist: true, - loading: true, - sourcererDataView: { id: 'test', matchedIndices: ['index-1'] }, + it('renders loading spinner when data view is loading', () => { + (useDataView as jest.Mock).mockReturnValue({ + dataView: { matchedIndices: ['index-2'] }, + status: 'loading', }); render( @@ -166,10 +148,9 @@ describe('EntityAnalyticsPage', () => { }); it('renders EmptyPrompt when indices do not exist', () => { - (useSourcererDataView as jest.Mock).mockReturnValue({ - indicesExist: false, - loading: false, - sourcererDataView: { id: 'test', matchedIndices: [] }, + (useDataView as jest.Mock).mockReturnValue({ + dataView: { matchedIndices: [] }, + status: 'loading', }); render( @@ -184,10 +165,9 @@ describe('EntityAnalyticsPage', () => { }); it('skips EmptyPrompt and renders main content when onSkip is called', async () => { - (useSourcererDataView as jest.Mock).mockReturnValue({ - indicesExist: false, - loading: false, - sourcererDataView: { id: 'test', matchedIndices: [] }, + (useDataView as jest.Mock).mockReturnValue({ + dataView: { matchedIndices: [] }, + status: 'ready', }); render( diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_dashboard.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_dashboard.tsx index fe775f76a0893..b67c80af5679e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_dashboard.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_dashboard.tsx @@ -9,7 +9,6 @@ import { EuiFlexGroup, EuiFlexItem, EuiLoadingSpinner } from '@elastic/eui'; import { ENTITY_ANALYTICS } from '../../app/translations'; import { SpyRoute } from '../../common/utils/route/spy_routes'; import { SecurityPageName } from '../../app/types'; -import { useSourcererDataView } from '../../sourcerer/containers'; import { SecuritySolutionPageWrapper } from '../../common/components/page_wrapper'; import { HeaderPage } from '../../common/components/header_page'; import { EmptyPrompt } from '../../common/components/empty_prompt'; @@ -30,30 +29,19 @@ import { EaMlJobCallout } from '../components/ea_ml_job_callout'; const EntityAnalyticsComponent = () => { const [skipEmptyPrompt, setSkipEmptyPrompt] = React.useState(false); const onSkip = React.useCallback(() => setSkipEmptyPrompt(true), [setSkipEmptyPrompt]); - const { - indicesExist: oldIndicesExist, - loading: oldIsSourcererLoading, - sourcererDataView: oldSourcererDataViewSpec, - } = useSourcererDataView(); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); const { dataView, status } = useDataView(); - const indicesExist = useMemo( - () => (newDataViewPickerEnabled ? !!dataView?.matchedIndices?.length : oldIndicesExist), - [dataView?.matchedIndices?.length, newDataViewPickerEnabled, oldIndicesExist] - ); - const isSourcererLoading = useMemo( - () => (newDataViewPickerEnabled ? status !== 'ready' : oldIsSourcererLoading), - [newDataViewPickerEnabled, oldIsSourcererLoading, status] + () => !!dataView?.matchedIndices?.length, + [dataView?.matchedIndices?.length] ); + const isDataViewLoading = useMemo(() => status !== 'ready', [status]); const isEntityStoreFeatureFlagDisabled = useIsExperimentalFeatureEnabled('entityStoreDisabled'); const showEmptyPrompt = !indicesExist && !skipEmptyPrompt; - const entityTypes = useEntityAnalyticsTypes(); - if (newDataViewPickerEnabled && status === 'pristine') { + const entityTypes = useEntityAnalyticsTypes(); + if (status === 'pristine') { return ; } @@ -64,11 +52,7 @@ const EntityAnalyticsComponent = () => { ) : ( <> - + @@ -76,7 +60,7 @@ const EntityAnalyticsComponent = () => { - {isSourcererLoading ? ( + {isDataViewLoading ? ( ) : ( diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_home_page.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_home_page.test.tsx index 5fbe5b650de52..f337da0605708 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_home_page.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_home_page.test.tsx @@ -10,18 +10,8 @@ import { render, screen } from '@testing-library/react'; import { MemoryRouter } from 'react-router-dom'; import { EntityAnalyticsHomePage } from './entity_analytics_home_page'; import { TestProviders } from '../../common/mock'; -import { useSourcererDataView } from '../../sourcerer/containers'; -import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; import { useDataView } from '../../data_view_manager/hooks/use_data_view'; -jest.mock('../../sourcerer/containers', () => ({ - useSourcererDataView: jest.fn(() => ({ - indicesExist: true, - loading: false, - sourcererDataView: { id: 'test', matchedIndices: ['index-1'] }, - })), -})); - jest.mock('../components/home/dynamic_risk_level_panel', () => ({ DynamicRiskLevelPanel: () => (
{'Dynamic Risk Level Panel'}
@@ -102,25 +92,12 @@ jest.mock('@kbn/expandable-flyout', () => ({ })), })); -const mockUseSourcererDataView = useSourcererDataView as jest.Mock; -const mockUseIsExperimentalFeatureEnabled = useIsExperimentalFeatureEnabled as jest.Mock; const mockUseDataView = useDataView as jest.Mock; describe('EntityAnalyticsHomePage', () => { beforeEach(() => { jest.clearAllMocks(); - mockUseSourcererDataView.mockReturnValue({ - indicesExist: true, - loading: false, - sourcererDataView: { id: 'test', matchedIndices: ['index-1'] }, - }); - - mockUseIsExperimentalFeatureEnabled.mockImplementation((flag: string) => { - if (flag === 'newDataViewPickerEnabled') return false; - return false; - }); - mockUseDataView.mockReturnValue({ dataView: { id: 'test', matchedIndices: ['index-1'] }, status: 'ready', @@ -184,10 +161,9 @@ describe('EntityAnalyticsHomePage', () => { }); it('renders loading spinner when sourcerer is loading', () => { - mockUseSourcererDataView.mockReturnValue({ - indicesExist: true, - loading: true, - sourcererDataView: { id: 'test', matchedIndices: ['index-1'] }, + mockUseDataView.mockReturnValue({ + dataView: { id: 'test', matchedIndices: ['index-1'] }, + status: 'loading', }); render( @@ -201,12 +177,6 @@ describe('EntityAnalyticsHomePage', () => { }); it('renders empty prompt when indices do not exist', () => { - mockUseSourcererDataView.mockReturnValue({ - indicesExist: false, - loading: false, - sourcererDataView: { id: 'test', matchedIndices: [] }, - }); - mockUseDataView.mockReturnValue({ dataView: { id: 'test', matchedIndices: [] }, status: 'ready', diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_home_page.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_home_page.tsx index ce0a2b5351d60..a8560db0efa1b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_home_page.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_home_page.tsx @@ -6,7 +6,7 @@ */ import React, { useCallback, useMemo, useState } from 'react'; -import { useLocation, useHistory } from 'react-router-dom'; +import { useHistory, useLocation } from 'react-router-dom'; import { EuiFlexGroup, EuiFlexItem, @@ -24,7 +24,6 @@ import { SiemSearchBar } from '../../common/components/search_bar'; import { InputsModelId } from '../../common/store/inputs/constants'; import { FiltersGlobal } from '../../common/components/filters_global'; import { SpyRoute } from '../../common/utils/route/spy_routes'; -import { useSourcererDataView } from '../../sourcerer/containers'; import { useDataView } from '../../data_view_manager/hooks/use_data_view'; import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; import { PageLoader } from '../../common/components/page_loader'; @@ -38,11 +37,11 @@ import { ENTITY_ANALYTICS_LOCAL_STORAGE_PAGE_SIZE_KEY, } from '../components/home/constants'; import { - EntitiesTableSection, DataViewContext, - useEntityURLState, type EntitiesBaseURLQuery, + EntitiesTableSection, type URLQuery, + useEntityURLState, } from '../components/home/entities_table'; import { DynamicRiskLevelPanel } from '../components/home/dynamic_risk_level_panel'; import { TopThreatHuntingLeads } from '../components/threat_hunting/top_threat_hunting_leads'; @@ -60,12 +59,6 @@ const getDefaultQuery = ({ query, filters }: EntitiesBaseURLQuery): URLQuery => }); export const EntityAnalyticsHomePage = () => { - const { - indicesExist: oldIndicesExist, - loading: oldIsSourcererLoading, - sourcererDataView: oldSourcererDataViewSpec, - } = useSourcererDataView(); - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); const leadGenerationEnabled = useIsExperimentalFeatureEnabled('leadGenerationEnabled'); const leadDetailsEnabled = useIsExperimentalFeatureEnabled('leadGenerationDetailsEnabled'); const { dataView, status } = useDataView(PageScope.explore); @@ -85,11 +78,6 @@ export const EntityAnalyticsHomePage = () => { const [isFlyoutOpen, setIsFlyoutOpen] = useState(false); const [provenanceLead, setProvenanceLead] = useState(null); - const isSourcererLoading = useMemo( - () => (newDataViewPickerEnabled ? status !== 'ready' : oldIsSourcererLoading), - [newDataViewPickerEnabled, oldIsSourcererLoading, status] - ); - const location = useLocation(); const history = useHistory(); @@ -122,8 +110,8 @@ export const EntityAnalyticsHomePage = () => { ); const indicesExist = useMemo( - () => (newDataViewPickerEnabled ? !!dataView?.matchedIndices?.length : oldIndicesExist), - [dataView?.matchedIndices?.length, newDataViewPickerEnabled, oldIndicesExist] + () => !!dataView?.matchedIndices?.length, + [dataView?.matchedIndices?.length] ); const isXlScreen = useIsWithinBreakpoints(['l', 'xl']); @@ -148,7 +136,7 @@ export const EntityAnalyticsHomePage = () => { } }, [leads, openAgentBuilderWithLead]); - if (newDataViewPickerEnabled && status === 'pristine') { + if (status === 'pristine') { return ; } @@ -159,11 +147,7 @@ export const EntityAnalyticsHomePage = () => { return ( <> - + @@ -182,7 +166,7 @@ export const EntityAnalyticsHomePage = () => { ]} /> - {isSourcererLoading ? ( + {status !== 'ready' ? ( ) : ( diff --git a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_privileged_user_monitoring_page.tsx b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_privileged_user_monitoring_page.tsx index 2821e49da9c1d..86f772e49fc58 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_privileged_user_monitoring_page.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/entity_analytics/pages/entity_analytics_privileged_user_monitoring_page.tsx @@ -32,8 +32,6 @@ import { FiltersGlobal } from '../../common/components/filters_global'; import { SiemSearchBar } from '../../common/components/search_bar'; import { InputsModelId } from '../../common/store/inputs/constants'; import { useDataViewSpec } from '../../data_view_manager/hooks/use_data_view_spec'; -import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features'; -import { useSourcererDataView } from '../../sourcerer/containers'; import { HeaderPage } from '../../common/components/header_page'; import { useEntityAnalyticsRoutes } from '../api/api'; import { usePrivilegedMonitoringEngineStatus } from '../hooks/use_privileged_monitoring_health'; @@ -107,26 +105,14 @@ export const EntityAnalyticsPrivilegedUserMonitoringPage = () => { const { initPrivilegedMonitoringEngine } = useEntityAnalyticsRoutes(); const [state, dispatch] = useReducer(reducer, initialState); - const { - indicesExist: oldIndicesExist, - loading: oldIsSourcererLoading, - sourcererDataView: oldSourcererDataViewSpec, - } = useSourcererDataView(); - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); const { dataView, status } = useDataView(PageScope.explore); const { dataViewSpec } = useDataViewSpec(PageScope.explore); // TODO: newDataViewPicker - this could be left, as the fieldMap spec is actually being used - const isSourcererLoading = useMemo( - () => (newDataViewPickerEnabled ? status !== 'ready' : oldIsSourcererLoading), - [newDataViewPickerEnabled, oldIsSourcererLoading, status] - ); - const indicesExist = useMemo( - () => (newDataViewPickerEnabled ? !!dataView?.matchedIndices?.length : oldIndicesExist), - [dataView?.matchedIndices?.length, newDataViewPickerEnabled, oldIndicesExist] + () => !!dataView?.matchedIndices?.length, + [dataView?.matchedIndices?.length] ); - const sourcererDataView = newDataViewPickerEnabled ? dataViewSpec : oldSourcererDataViewSpec; const engineStatus = usePrivilegedMonitoringEngineStatus(); const initEngineCallBack = useCallback( @@ -193,7 +179,7 @@ export const EntityAnalyticsPrivilegedUserMonitoringPage = () => { min-height: calc(100vh - 240px); `; - if (newDataViewPickerEnabled && status === 'pristine') { + if (status === 'pristine') { return ; } @@ -205,33 +191,28 @@ export const EntityAnalyticsPrivilegedUserMonitoringPage = () => { <> {state.type === 'dashboard' && ( - + )} - {state.type === 'fetchingEngineStatus' || - (isSourcererLoading && ( - <> - - } - /> - - - - - - - ))} + {(state.type === 'fetchingEngineStatus' || status !== 'ready') && ( + <> + + } + /> + + + + + + + )} {state.type === 'onboarding' && ( <> @@ -335,7 +316,7 @@ export const EntityAnalyticsPrivilegedUserMonitoringPage = () => { callout={state.onboardingCallout} error={state.error} onManageUserClicked={onManageUserClicked} - sourcererDataView={sourcererDataView} + dataViewSpec={dataViewSpec} /> )} diff --git a/x-pack/solutions/security/plugins/security_solution/public/explore/components/stat_items/metric_embeddable.tsx b/x-pack/solutions/security/plugins/security_solution/public/explore/components/stat_items/metric_embeddable.tsx index 38721ea8d8d4d..a3c9f42019940 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/explore/components/stat_items/metric_embeddable.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/explore/components/stat_items/metric_embeddable.tsx @@ -11,7 +11,6 @@ import { FlexItem, StatValue } from './utils'; import { VisualizationEmbeddable } from '../../../common/components/visualization_actions/visualization_embeddable'; import type { ExtraOptions } from '../../../common/components/visualization_actions/types'; import type { FieldConfigs } from './types'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; export interface MetricEmbeddableProps { extraOptions?: ExtraOptions; @@ -29,53 +28,50 @@ const MetricEmbeddableComponent = ({ id, inspectTitle, timerange, -}: MetricEmbeddableProps) => { - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); +}: MetricEmbeddableProps) => ( + + {fields.map((field) => ( + + + {field.icon && ( + + + + )} - return ( - - {fields.map((field) => ( - - - {field.icon && ( - - + {field.lensAttributes && ( +
+ - +
)} - - - {field.lensAttributes && ( -
- -
- )} -
- {field.description != null && ( - - -

{field.description}

-
-
- )} -
-
- ))} -
- ); -}; + + {field.description != null && ( + + +

{field.description}

+
+
+ )} +
+
+ ))} +
+); export const MetricEmbeddable = React.memo(MetricEmbeddableComponent); diff --git a/x-pack/solutions/security/plugins/security_solution/public/explore/components/stat_items/stat_items.tsx b/x-pack/solutions/security/plugins/security_solution/public/explore/components/stat_items/stat_items.tsx index d5d2e6dd4b1c7..4f309a0fec7ca 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/explore/components/stat_items/stat_items.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/explore/components/stat_items/stat_items.tsx @@ -8,16 +8,13 @@ import { EuiFlexGroup, EuiHorizontalRule, EuiPanel } from '@elastic/eui'; import { useUiSetting } from '@kbn/kibana-react-plugin/public'; import React, { useMemo } from 'react'; - import { FF_ENABLE_ENTITY_STORE_V2 } from '@kbn/entity-store/public'; - import { StatItemHeader } from './stat_item_header'; import { useToggleStatus } from './use_toggle_status'; import type { StatItemsProps } from './types'; import { ChartHeight, FlexItem } from './utils'; import { MetricEmbeddable } from './metric_embeddable'; import { VisualizationEmbeddable } from '../../../common/components/visualization_actions/visualization_embeddable'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import { useSpaceId } from '../../../common/hooks/use_space_id'; import { PageScope } from '../../../data_view_manager/constants'; @@ -40,7 +37,6 @@ export const StatItemsComponent = React.memo(({ statItems, from, } = statItems; const { isToggleExpanded, onToggle } = useToggleStatus({ id }); - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); const spaceId = useSpaceId(); const entityStoreV2Enabled = useUiSetting(FF_ENABLE_ENTITY_STORE_V2, false) === true; @@ -79,7 +75,7 @@ export const StatItemsComponent = React.memo(({ statItems, from, id={`${id}-bar-embeddable`} height={ChartHeight} inspectTitle={description} - scopeId={newDataViewPickerEnabled ? PageScope.explore : PageScope.default} + scopeId={PageScope.explore} /> )} @@ -95,7 +91,7 @@ export const StatItemsComponent = React.memo(({ statItems, from, id={`${id}-area-embeddable`} height={ChartHeight} inspectTitle={description} - scopeId={newDataViewPickerEnabled ? PageScope.explore : PageScope.default} + scopeId={PageScope.explore} /> diff --git a/x-pack/solutions/security/plugins/security_solution/public/explore/hosts/pages/details/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/explore/hosts/pages/details/index.tsx index 710e03163f6bf..5ee61c2249e01 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/explore/hosts/pages/details/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/explore/hosts/pages/details/index.tsx @@ -22,15 +22,13 @@ import { import { useQueryClient } from '@kbn/react-query'; import { noop } from 'lodash/fp'; import React, { useCallback, useEffect, useMemo } from 'react'; -import { useDispatch, useSelector } from 'react-redux'; +import { useDispatch } from 'react-redux'; import { useLocation } from 'react-router-dom'; import type { Filter } from '@kbn/es-query'; import { buildEsQuery } from '@kbn/es-query'; import { getEsQueryConfig } from '@kbn/data-plugin/common'; import { PageScope } from '../../../../data_view_manager/constants'; -import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import type { NarrowDateRange } from '../../../../common/components/ml/types'; -import { dataViewSpecToViewBase } from '../../../../common/lib/kuery'; import { useCalculateEntityRiskScore } from '../../../../entity_analytics/api/hooks/use_calculate_entity_risk_score'; import { useAssetCriticalityPrivileges } from '../../../../entity_analytics/components/asset_criticality/use_asset_criticality'; import { AssetCriticalityAccordion } from '../../../../entity_analytics/components/asset_criticality/asset_criticality_selector'; @@ -79,7 +77,6 @@ import { useDeepEqualSelector } from '../../../../common/hooks/use_selector'; import { ID, useHostDetails } from '../../containers/hosts/details'; import { manageQuery } from '../../../../common/components/page/manage_query'; import { useInvalidFilterQuery } from '../../../../common/hooks/use_invalid_filter_query'; -import { useSourcererDataView } from '../../../../sourcerer/containers'; import { EmptyPrompt } from '../../../../common/components/empty_prompt'; import { AlertCountByRuleByStatus } from '../../../../common/components/alert_count_by_status'; import { useLicense } from '../../../../common/hooks/use_license'; @@ -90,8 +87,8 @@ import { useSelectedPatterns } from '../../../../data_view_manager/hooks/use_sel import { PageLoader } from '../../../../common/components/page_loader'; import { applyEntityStoreSearchCachePatch, - useEntityFromStore, type EntityStoreRecord, + useEntityFromStore, } from '../../../../flyout/entity_details/shared/hooks/use_entity_from_store'; import { ObservedDataSection as HostObservedDataSection } from '../../../../flyout/entity_details/host_right/components/observed_data_section'; import { HOST_PANEL_OBSERVED_HOST_QUERY_ID } from '../../../../flyout/entity_details/host_right'; @@ -99,7 +96,6 @@ import { useObservedHost } from '../../../../flyout/entity_details/host_right/ho import { buildRiskScoreStateFromEntityRecord } from '../../../../flyout/entity_details/shared/entity_store_risk_utils'; import { NO_CORRESPONDING_ENTITY_EXISTS } from '../../../../flyout/entity_details/shared/translations'; import { useSecurityDefaultPatterns } from '../../../../data_view_manager/hooks/use_security_default_patterns'; -import { sourcererSelectors } from '../../../../sourcerer/store'; import type { Entity } from '../../../../../common/api/entity_analytics'; const ES_HOST_FIELD = 'host.name'; @@ -213,23 +209,9 @@ const HostDetailsComponent: React.FC = ({ [dispatch] ); - const { - indicesExist: oldIndicesExist, - selectedPatterns: oldSelectedPatterns, - sourcererDataView: oldSourcererDataView, - } = useSourcererDataView(); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - - const { dataView: experimentalDataView, status } = useDataView(PageScope.explore); - const experimentalSelectedPatterns = useSelectedPatterns(PageScope.explore); - - const indicesExist = newDataViewPickerEnabled - ? !!experimentalDataView.matchedIndices?.length - : oldIndicesExist; - const selectedPatterns = newDataViewPickerEnabled - ? experimentalSelectedPatterns - : oldSelectedPatterns; + const { dataView, status } = useDataView(PageScope.explore); + const selectedPatterns = useSelectedPatterns(PageScope.explore); + const indicesExist = !!dataView.matchedIndices?.length; const entityStoreV2Enabled = useUiSetting(FF_ENABLE_ENTITY_STORE_V2, false); @@ -273,12 +255,7 @@ const HostDetailsComponent: React.FC = ({ resolvedIdentityFields, ]); - const oldSecurityDefaultPatterns = - useSelector(sourcererSelectors.defaultDataView)?.patternList ?? []; - const { indexPatterns: experimentalSecurityDefaultIndexPatterns } = useSecurityDefaultPatterns(); - const securityDefaultPatterns = newDataViewPickerEnabled - ? experimentalSecurityDefaultIndexPatterns - : oldSecurityDefaultPatterns; + const { indexPatterns: securityDefaultPatterns } = useSecurityDefaultPatterns(); const observedHost = useObservedHost( detailName, @@ -325,9 +302,7 @@ const HostDetailsComponent: React.FC = ({ try { return [ buildEsQuery( - newDataViewPickerEnabled - ? experimentalDataView - : dataViewSpecToViewBase(oldSourcererDataView), + dataView, [query], [...hostDetailsPageFilters, ...globalFilters], getEsQueryConfig(uiSettings) @@ -336,23 +311,13 @@ const HostDetailsComponent: React.FC = ({ } catch (e) { return [undefined, e]; } - }, [ - newDataViewPickerEnabled, - experimentalDataView, - oldSourcererDataView, - query, - hostDetailsPageFilters, - globalFilters, - uiSettings, - ]); + }, [dataView, query, hostDetailsPageFilters, globalFilters, uiSettings]); const [rawFilteredQueryForHostDetailsIdentity] = useMemo(() => { try { return [ buildEsQuery( - newDataViewPickerEnabled - ? experimentalDataView - : dataViewSpecToViewBase(oldSourcererDataView), + dataView, [query], [...hostDetailsEventsPageFilters, ...globalFilters], getEsQueryConfig(uiSettings) @@ -361,15 +326,7 @@ const HostDetailsComponent: React.FC = ({ } catch { return [undefined]; } - }, [ - newDataViewPickerEnabled, - experimentalDataView, - oldSourcererDataView, - query, - hostDetailsEventsPageFilters, - globalFilters, - uiSettings, - ]); + }, [dataView, query, hostDetailsEventsPageFilters, globalFilters, uiSettings]); const stringifiedHostDetailsIdentityFilterQuery = useMemo( () => @@ -439,7 +396,7 @@ const HostDetailsComponent: React.FC = ({ const canReadAssetCriticality = !!privileges.data?.has_read_permissions; - if (newDataViewPickerEnabled && status === 'pristine') { + if (status === 'pristine') { return ; } @@ -449,11 +406,7 @@ const HostDetailsComponent: React.FC = ({ <> - + ({ ...jest.requireActual('react-router-dom'), useParams: jest.fn().mockReturnValue({ tabName: 'allHosts' }), })); -jest.mock('../../../sourcerer/containers'); jest.mock('../../../common/components/empty_prompt'); // Test will fail because we will to need to mock some core services to make the test work // For now let's forget about SiemSearchBar and QueryBar @@ -87,7 +84,6 @@ const mockHistory = { createHref: jest.fn(), listen: jest.fn(), }; -const mockUseSourcererDataView = useSourcererDataView as jest.Mock; const myStore = createMockStore(); describe('Hosts - rendering', () => { @@ -96,10 +92,6 @@ describe('Hosts - rendering', () => { }); test('it renders the Setup Instructions text when no index is available', async () => { - mockUseSourcererDataView.mockReturnValue({ - indicesExist: false, - }); - render( @@ -114,10 +106,6 @@ describe('Hosts - rendering', () => { test('it DOES NOT render the Setup Instructions text when an index is available', async () => { jest.mocked(useDataView).mockReturnValue(withIndices(['test'])); - mockUseSourcererDataView.mockReturnValue({ - indicesExist: true, - indexPattern: {}, - }); render( @@ -129,11 +117,6 @@ describe('Hosts - rendering', () => { }); test('it should render tab navigation', async () => { - mockUseSourcererDataView.mockReturnValue({ - indicesExist: true, - indexPattern: {}, - }); - render( @@ -177,10 +160,6 @@ describe('Hosts - rendering', () => { }, }, ]; - mockUseSourcererDataView.mockReturnValue({ - indicesExist: true, - indexPattern: { fields: [], title: 'title' }, - }); render( diff --git a/x-pack/solutions/security/plugins/security_solution/public/explore/hosts/pages/hosts.tsx b/x-pack/solutions/security/plugins/security_solution/public/explore/hosts/pages/hosts.tsx index 596909fef7ed4..78d70778b0920 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/explore/hosts/pages/hosts.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/explore/hosts/pages/hosts.tsx @@ -15,7 +15,6 @@ import { isTab } from '@kbn/timelines-plugin/public'; import { getEsQueryConfig } from '@kbn/data-plugin/common'; import { LastEventIndexKey } from '@kbn/timelines-plugin/common'; import { PageScope } from '../../../data_view_manager/constants'; -import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import { InputsModelId } from '../../../common/store/inputs/constants'; import { SecurityPageName } from '../../../app/types'; import { FiltersGlobal } from '../../../common/components/filters_global'; @@ -46,7 +45,6 @@ import { onTimelineTabKeyPressed, resetKeyboardFocus, } from '../../../timelines/components/timeline/helpers'; -import { useSourcererDataView } from '../../../sourcerer/containers'; import { useDeepEqualSelector } from '../../../common/hooks/use_selector'; import { useInvalidFilterQuery } from '../../../common/hooks/use_invalid_filter_query'; import { ID } from '../containers/hosts'; @@ -101,45 +99,29 @@ const HostsComponent = () => { return globalFilters; }, [globalFilters, severitySelection, tabName]); - const { - indicesExist: oldIndicesExist, - selectedPatterns: oldSelectedPatterns, - sourcererDataView: oldSourcererDataViewSpec, - } = useSourcererDataView(); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - - const { dataView: experimentalDataView, status } = useDataView(PageScope.explore); - const experimentalSelectedPatterns = useSelectedPatterns(PageScope.explore); - - const indicesExist = newDataViewPickerEnabled - ? experimentalDataView.hasMatchedIndices() - : oldIndicesExist; - const selectedPatterns = newDataViewPickerEnabled - ? experimentalSelectedPatterns - : oldSelectedPatterns; + const { dataView, status } = useDataView(PageScope.explore); + const selectedPatterns = useSelectedPatterns(PageScope.explore); + const indicesExist = dataView.hasMatchedIndices(); const [globalFilterQuery, kqlError] = useMemo( () => convertToBuildEsQuery({ config: getEsQueryConfig(uiSettings), - dataViewSpec: oldSourcererDataViewSpec, - dataView: experimentalDataView, + dataView, queries: [query], filters: globalFilters, }), - [uiSettings, oldSourcererDataViewSpec, experimentalDataView, query, globalFilters] + [uiSettings, dataView, query, globalFilters] ); const [tabsFilterQuery] = useMemo( () => convertToBuildEsQuery({ config: getEsQueryConfig(uiSettings), - dataViewSpec: oldSourcererDataViewSpec, - dataView: experimentalDataView, + dataView, queries: [query], filters: tabsFilters, }), - [uiSettings, oldSourcererDataViewSpec, experimentalDataView, query, tabsFilters] + [uiSettings, dataView, query, tabsFilters] ); useInvalidFilterQuery({ @@ -177,7 +159,7 @@ const HostsComponent = () => { [containerElement, onSkipFocusBeforeEventsTable, onSkipFocusAfterEventsTable] ); - if (newDataViewPickerEnabled && status === 'pristine') { + if (status === 'pristine') { return ; } @@ -187,11 +169,7 @@ const HostsComponent = () => { - + diff --git a/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/embeddables/embedded_map.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/embeddables/embedded_map.test.tsx index cd91a4c361f76..19e257efba7db 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/embeddables/embedded_map.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/embeddables/embedded_map.test.tsx @@ -10,14 +10,11 @@ import React from 'react'; import { createMockStore, mockGlobalState, TestProviders } from '../../../../common/mock'; import { EmbeddedMapComponent } from './embedded_map'; -import { getLayerList } from './map_config'; import { useIsFieldInIndexPattern } from '../../../containers/fields'; import { setStubKibanaServices } from '@kbn/embeddable-plugin/public/mocks'; -import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; jest.mock('./map_config'); -jest.mock('../../../../sourcerer/containers'); jest.mock('../../../containers/fields'); jest.mock('../../../../common/hooks/use_experimental_features'); jest.mock('./index_patterns_missing_prompt', () => ({ @@ -111,200 +108,60 @@ describe('EmbeddedMapComponent', () => { jest.clearAllMocks(); }); - describe('newDataViewPickerEnabled disabled', () => { - beforeEach(() => { - (useIsExperimentalFeatureEnabled as jest.Mock).mockReturnValue(false); - }); - - test('renders', async () => { - const { getByTestId } = render( - - - - ); - await waitFor(() => { - expect(getByTestId('EmbeddedMapComponent')).toBeInTheDocument(); - }); - }); - - test('renders Map', async () => { - const { getByTestId, queryByTestId } = render( - - - - ); - - await waitFor(() => { - expect(getByTestId('MapPanel')).toBeInTheDocument(); - expect(queryByTestId('IndexPatternsMissingPrompt')).not.toBeInTheDocument(); - }); + test('renders', async () => { + const { getByTestId } = render( + + + + ); + await waitFor(() => { + expect(getByTestId('EmbeddedMapComponent')).toBeInTheDocument(); }); + }); - test('renders IndexPatternsMissingPrompt', async () => { - const state = { - ...mockGlobalState, - sourcerer: { - ...mockGlobalState.sourcerer, - kibanaDataViews: [], - }, - }; - const store = createMockStore(state); + test('renders Map', async () => { + const { getByTestId, queryByTestId } = render( + + + + ); - const { getByTestId, queryByTestId } = render( - - - - ); - await waitFor(() => { - expect(queryByTestId('MapPanel')).not.toBeInTheDocument(); - expect(getByTestId('IndexPatternsMissingPrompt')).toBeInTheDocument(); - }); + await waitFor(() => { + expect(getByTestId('MapPanel')).toBeInTheDocument(); + expect(queryByTestId('IndexPatternsMissingPrompt')).not.toBeInTheDocument(); }); + }); - test('map hidden on close', async () => { - mockGetStorage.mockReturnValue(false); - const { getByTestId, queryByTestId } = render( - - - - ); - - expect(queryByTestId('siemEmbeddable')).not.toBeInTheDocument(); - getByTestId('false-toggle-network-map').click(); - - await waitFor(() => { - expect(mockSetStorage).toHaveBeenNthCalledWith(1, 'network_map_visbile', true); - expect(getByTestId('siemEmbeddable')).toBeInTheDocument(); - }); - }); + test('map hidden on close', async () => { + mockGetStorage.mockReturnValue(false); + const { getByTestId, queryByTestId } = render( + + + + ); - test('map visible on open', async () => { - const { getByTestId, queryByTestId } = render( - - - - ); + expect(queryByTestId('siemEmbeddable')).not.toBeInTheDocument(); + getByTestId('false-toggle-network-map').click(); + await waitFor(() => { + expect(mockSetStorage).toHaveBeenNthCalledWith(1, 'network_map_visbile', true); expect(getByTestId('siemEmbeddable')).toBeInTheDocument(); - getByTestId('true-toggle-network-map').click(); - - await waitFor(() => { - expect(mockSetStorage).toHaveBeenNthCalledWith(1, 'network_map_visbile', false); - expect(queryByTestId('siemEmbeddable')).not.toBeInTheDocument(); - }); - }); - - test('On mount, selects existing Kibana data views that match any selected index pattern', async () => { - const state = { - ...mockGlobalState, - sourcerer: { - ...mockGlobalState.sourcerer, - kibanaDataViews: [filebeatDataView], - }, - }; - const store = createMockStore(state); - render( - - - - ); - await waitFor(() => { - const dataViewArg = (getLayerList as jest.Mock).mock.calls[0][1]; - expect(dataViewArg).toEqual([filebeatDataView]); - }); - }); - - test('On rerender with new selected patterns, selects existing Kibana data views that match any selected index pattern', async () => { - const state = { - ...mockGlobalState, - sourcerer: { - ...mockGlobalState.sourcerer, - kibanaDataViews: [filebeatDataView], - }, - }; - const store = createMockStore(state); - const { rerender } = render( - - - - ); - await waitFor(() => { - const dataViewArg = (getLayerList as jest.Mock).mock.calls[0][1]; - expect(dataViewArg).toEqual([filebeatDataView]); - }); - rerender( - - - - ); - await waitFor(() => { - // data view is updated with the returned embeddable.setLayerList callback, which is passesd getLayerList(dataViews) - const dataViewArg = (getLayerList as jest.Mock).mock.calls[1][1]; - expect(dataViewArg).toEqual([filebeatDataView, packetbeatDataView]); - }); }); }); - describe('newDataViewPickerEnabled enabled', () => { - beforeEach(() => { - (useIsExperimentalFeatureEnabled as jest.Mock).mockReturnValue(true); - }); - - test('renders', async () => { - const { getByTestId } = render( - - - - ); - await waitFor(() => { - expect(getByTestId('EmbeddedMapComponent')).toBeInTheDocument(); - }); - }); - - test('renders Map', async () => { - const { getByTestId, queryByTestId } = render( - - - - ); + test('map visible on open', async () => { + const { getByTestId, queryByTestId } = render( + + + + ); - await waitFor(() => { - expect(getByTestId('MapPanel')).toBeInTheDocument(); - expect(queryByTestId('IndexPatternsMissingPrompt')).not.toBeInTheDocument(); - }); - }); - - test('map hidden on close', async () => { - mockGetStorage.mockReturnValue(false); - const { getByTestId, queryByTestId } = render( - - - - ); + expect(getByTestId('siemEmbeddable')).toBeInTheDocument(); + getByTestId('true-toggle-network-map').click(); + await waitFor(() => { + expect(mockSetStorage).toHaveBeenNthCalledWith(1, 'network_map_visbile', false); expect(queryByTestId('siemEmbeddable')).not.toBeInTheDocument(); - getByTestId('false-toggle-network-map').click(); - - await waitFor(() => { - expect(mockSetStorage).toHaveBeenNthCalledWith(1, 'network_map_visbile', true); - expect(getByTestId('siemEmbeddable')).toBeInTheDocument(); - }); - }); - - test('map visible on open', async () => { - const { getByTestId, queryByTestId } = render( - - - - ); - - expect(getByTestId('siemEmbeddable')).toBeInTheDocument(); - getByTestId('true-toggle-network-map').click(); - - await waitFor(() => { - expect(mockSetStorage).toHaveBeenNthCalledWith(1, 'network_map_visbile', false); - expect(queryByTestId('siemEmbeddable')).not.toBeInTheDocument(); - }); }); }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/embeddables/embedded_map.tsx b/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/embeddables/embedded_map.tsx index fb6f5c0454397..adc118d8d6d25 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/embeddables/embedded_map.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/embeddables/embedded_map.tsx @@ -8,30 +8,20 @@ // embedded map v2 import { EuiAccordion, EuiLink, EuiText, useEuiTheme } from '@elastic/eui'; -import React, { useCallback, useEffect, useMemo, useState } from 'react'; -import { useSelector } from 'react-redux'; +import React, { useCallback, useMemo, useState } from 'react'; import { createHtmlPortalNode, InPortal, OutPortal } from 'react-reverse-portal'; import styled from '@emotion/styled'; import { css } from '@emotion/react'; import type { Filter, Query } from '@kbn/es-query'; -import { isEqual } from 'lodash/fp'; import type { MapApi, RenderTooltipContentParams } from '@kbn/maps-plugin/public'; -import type { LayerDescriptor } from '@kbn/maps-plugin/common'; import { PageScope } from '../../../../data_view_manager/constants'; import { buildTimeRangeFilter } from '../../../../detections/components/alerts_table/helpers'; -import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; -import { useIsFieldInIndexPattern } from '../../../containers/fields'; import type { GlobalTimeArgs } from '../../../../common/containers/use_global_time'; import { Embeddable } from './embeddable'; -import { IndexPatternsMissingPrompt } from './index_patterns_missing_prompt'; import { MapToolTip } from './map_tool_tip/map_tool_tip'; import * as i18n from './translations'; import { useKibana } from '../../../../common/lib/kibana'; import { getLayerList } from './map_config'; -import { sourcererSelectors } from '../../../../sourcerer/store'; -import type { State } from '../../../../common/store'; -import type { SourcererDataView } from '../../../../sourcerer/store/model'; -import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import { useDataView } from '../../../../data_view_manager/hooks/use_data_view'; export const NETWORK_MAP_VISIBLE = 'network_map_visbile'; @@ -109,83 +99,22 @@ export const EmbeddedMapComponent = ({ const { services } = useKibana(); const { storage } = services; - const [isError, setIsError] = useState(false); - const [isIndexError, setIsIndexError] = useState(false); const [storageValue, setStorageValue] = useState(storage.get(NETWORK_MAP_VISIBLE) ?? true); - const { addError } = useAppToasts(); - - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const { dataView: experimentalDataView } = useDataView(PageScope.explore); - // TODO This can be completely removed once we switch the newDataViewPickerEnabled on - const kibanaDataViews = useSelector(sourcererSelectors.kibanaDataViews); - const selectedPatterns = useSelector((state: State) => { - return sourcererSelectors.sourcererScopeSelectedPatterns(state, PageScope.default); - }); - - const isFieldInIndexPattern = useIsFieldInIndexPattern(); - - const [layerList, setLayerList] = useState([]); - const [availableDataViews, setAvailableDataViews] = useState([]); - - const experimentalDataViewLayerList = useMemo( + const { dataView } = useDataView(PageScope.explore); + const dataViewLayerList = useMemo( () => - experimentalDataView.id && experimentalDataView.getIndexPattern() + dataView.id && dataView.getIndexPattern() ? getLayerList({ euiTheme }, [ { - id: experimentalDataView.id, - title: experimentalDataView.getIndexPattern(), + id: dataView.id, + title: dataView.getIndexPattern(), }, ]) : [], - [euiTheme, experimentalDataView] + [euiTheme, dataView] ); - // TODO This can be completely removed once we switch the newDataViewPickerEnabled on - useEffect(() => { - if (newDataViewPickerEnabled) return; - - let canceled = false; - - const fetchData = async () => { - try { - const apiResponse = await Promise.all( - availableDataViews.map(async ({ title }) => isFieldInIndexPattern(title)) - ); - // ensures only index patterns with maps fields are passed - const goodDataViews = availableDataViews.filter((_, i) => apiResponse[i] ?? false); - if (!canceled) { - setLayerList(getLayerList({ euiTheme }, goodDataViews)); - } - } catch (e) { - if (!canceled) { - setLayerList([]); - addError(e, { title: i18n.ERROR_CREATING_EMBEDDABLE }); - setIsError(true); - } - } - }; - if (availableDataViews.length) { - fetchData(); - } - return () => { - canceled = true; - }; - }, [addError, availableDataViews, euiTheme, isFieldInIndexPattern, newDataViewPickerEnabled]); - - // TODO This can be completely removed once we switch the newDataViewPickerEnabled on - useEffect(() => { - if (newDataViewPickerEnabled) return; - - const dataViews = kibanaDataViews.filter((dataView) => - selectedPatterns.includes(dataView.title) - ); - if (selectedPatterns.length > 0 && dataViews.length === 0) { - setIsIndexError(true); - } - setAvailableDataViews((prevViews) => (isEqual(prevViews, dataViews) ? prevViews : dataViews)); - }, [kibanaDataViews, selectedPatterns, newDataViewPickerEnabled]); - // This portalNode provided by react-reverse-portal allows us re-parent the MapToolTip within our // own component tree instead of the embeddables (default). This is necessary to have access to // the Redux store, theme provider, etc, which is required to register and un-register the draggable @@ -210,36 +139,32 @@ export const EmbeddedMapComponent = ({ - - {isIndexError ? ( - - ) : ( - - (tooltipProps: RenderTooltipContentParams) => - } - mapCenter={{ lon: -1.05469, lat: 15.96133, zoom: 1 }} - layerList={newDataViewPickerEnabled ? experimentalDataViewLayerList : layerList} - filters={appliedFilters} - query={query} - onApiAvailable={(api: MapApi) => { - // Wire up to app refresh action - setQuery({ - id: 'embeddedMap', // Scope to page type if using map elsewhere - inspect: null, - loading: false, - refetch: () => api.reload(), - }); - }} - /> - - )} + + + (tooltipProps: RenderTooltipContentParams) => + } + mapCenter={{ lon: -1.05469, lat: 15.96133, zoom: 1 }} + layerList={dataViewLayerList} + filters={appliedFilters} + query={query} + onApiAvailable={(api: MapApi) => { + // Wire up to app refresh action + setQuery({ + id: 'embeddedMap', // Scope to page type if using map elsewhere + inspect: null, + loading: false, + refetch: () => api.reload(), + }); + }} + /> + ); - return isError ? null : ( + return ( { - const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled'); - const featureDescriptionListItems = useMemo( () => featureProps.map((featureProp) => { @@ -46,7 +43,7 @@ export const PointToolTipContentComponent = ({ attrName={key} idPrefix={`map-point-tooltip-${contextId}-${key}-${value}`} render={(item) => getRenderedFieldValue(key, item)} - scopeId={newDataViewPickerEnabled ? PageScope.explore : PageScope.default} + scopeId={PageScope.explore} /> ) : ( getEmptyTagValue() @@ -55,7 +52,7 @@ export const PointToolTipContentComponent = ({ ), }; }), - [contextId, featureProps, newDataViewPickerEnabled] + [contextId, featureProps] ); return ; diff --git a/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/field_renderers/field_renderers.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/field_renderers/field_renderers.test.tsx index c8c5caef5abc6..3baa18261a362 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/field_renderers/field_renderers.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/field_renderers/field_renderers.test.tsx @@ -33,8 +33,6 @@ mockGetUrlForApp.mockImplementation( `${appId}/${options?.deepLinkId ?? ''}${options?.path ?? ''}` ); -jest.mock('../../../../common/hooks/use_get_field_spec'); - const mockHost: HostEcs = mockData.complete.host as HostEcs; describe('Field Renderers', () => { diff --git a/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/kpi_network/__snapshots__/index.test.tsx.snap b/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/kpi_network/__snapshots__/index.test.tsx.snap index 45badf441d24a..57e17c21d339a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/kpi_network/__snapshots__/index.test.tsx.snap +++ b/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/kpi_network/__snapshots__/index.test.tsx.snap @@ -412,6 +412,7 @@ exports[`NetworkKpiComponent rendering it renders the default widget 1`] = ` class="euiFlexItem ee8xehw2 emotion-euiFlexItem-growZero-FlexItem" >