diff --git a/x-pack/solutions/security/plugins/security_solution/common/constants.ts b/x-pack/solutions/security/plugins/security_solution/common/constants.ts index 3c2ced7ba57ee..80300227b0ae7 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/constants.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/constants.ts @@ -82,6 +82,8 @@ export const DEFAULT_THREAT_INDEX_KEY = 'securitySolution:defaultThreatIndex' as export const DEFAULT_THREAT_INDEX_VALUE = ['logs-ti_*'] as const; export const DEFAULT_THREAT_MATCH_QUERY = '@timestamp >= "now-30d/d"' as const; +export const EXPLORE_DATA_VIEW_PREFIX = 'explore-data-view' as const; + export const EXPLORE_PATH = '/explore' as const; export const DASHBOARDS_PATH = '/dashboards' as const; export const MANAGE_PATH = '/manage' as const; diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/components/data_view_picker/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/components/data_view_picker/index.tsx index 40513f0af7a46..0418821e0a454 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/components/data_view_picker/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/components/data_view_picker/index.tsx @@ -10,6 +10,7 @@ import React, { useCallback, useRef, useMemo, memo } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { DataView } from '@kbn/data-views-plugin/public'; +import { EXPLORE_DATA_VIEW_PREFIX } from '../../../../common/constants'; import type { SourcererUrlState } from '../../../sourcerer/store/model'; import { useUpdateUrlParam } from '../../../common/utils/global_query_string'; import { URL_PARAM_KEY } from '../../../common/hooks/use_url_state'; @@ -61,7 +62,9 @@ export const DataViewPicker = memo(({ scope, onClosePopover, disabled }: DataVie const { adhocDataViews: adhocDataViewSpecs, defaultDataViewId } = useSelector(sharedStateSelector); const adhocDataViews = useMemo(() => { - return adhocDataViewSpecs.map((spec) => new DataView({ spec, fieldFormats })); + return adhocDataViewSpecs + .filter((spec) => !spec.id?.startsWith(EXPLORE_DATA_VIEW_PREFIX)) + .map((spec) => new DataView({ spec, fieldFormats })); }, [adhocDataViewSpecs, fieldFormats]); const managedDataViews = useManagedDataViews(); diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_managed_data_views.test.ts b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_managed_data_views.test.ts index 0eadbeb8ff976..fd1c253cd2b17 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_managed_data_views.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_managed_data_views.test.ts @@ -58,6 +58,7 @@ describe('useManagedDataViews', () => { // Mock the Redux selector (useSelector as jest.Mock).mockReturnValue({ dataViews: mockDataViews, + adhocDataViews: [], defaultDataViewId: DEFAULT_SECURITY_SOLUTION_DATA_VIEW_ID, alertDataViewId: DEFAULT_ALERT_DATA_VIEW_ID, }); @@ -101,6 +102,7 @@ describe('useManagedDataViews', () => { ]; (useSelector as jest.Mock).mockReturnValue({ dataViews: mockDataViews, + adhocDataViews: [], defaultDataViewId: DEFAULT_SECURITY_SOLUTION_DATA_VIEW_ID, }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_managed_data_views.ts b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_managed_data_views.ts index a45aec3ca42fc..5960d12b103fe 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_managed_data_views.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_managed_data_views.ts @@ -8,6 +8,7 @@ import { DataView } from '@kbn/data-views-plugin/public'; import { useSelector } from 'react-redux'; import { useMemo } from 'react'; +import { EXPLORE_DATA_VIEW_PREFIX } from '../../../common/constants'; import { useKibana } from '../../common/lib/kibana'; import { sharedStateSelector } from '../redux/selectors'; @@ -17,6 +18,7 @@ import { sharedStateSelector } from '../redux/selectors'; export const useManagedDataViews = (): DataView[] => { const { dataViews: dataViewSpecs, + adhocDataViews, defaultDataViewId, alertDataViewId, } = useSelector(sharedStateSelector); @@ -26,9 +28,14 @@ export const useManagedDataViews = (): DataView[] => { return useMemo( () => - dataViewSpecs - .filter((dv) => dv.id === defaultDataViewId || dv.id === alertDataViewId) + [...dataViewSpecs, ...adhocDataViews] + .filter( + (dv) => + dv.id === defaultDataViewId || + dv.id === alertDataViewId || + dv.id?.startsWith(EXPLORE_DATA_VIEW_PREFIX) + ) .map((spec) => new DataView({ spec, fieldFormats })), - [dataViewSpecs, defaultDataViewId, alertDataViewId, fieldFormats] + [dataViewSpecs, adhocDataViews, defaultDataViewId, alertDataViewId, fieldFormats] ); }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/utils/create_explore_data_view.ts b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/utils/create_explore_data_view.ts index 96dd447864d25..b6aec04ed395e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/utils/create_explore_data_view.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/utils/create_explore_data_view.ts @@ -7,6 +7,7 @@ import type { DataViewsServicePublic, DataView } from '@kbn/data-views-plugin/public'; import type { SpacesPluginStart } from '@kbn/spaces-plugin/public'; +import { EXPLORE_DATA_VIEW_PREFIX } from '../../../common/constants'; export const createExploreDataView = async ( dependencies: { @@ -21,8 +22,8 @@ export const createExploreDataView = async ( .join(); return dependencies.dataViews.create({ - id: `explore-data-view-${(await dependencies.spaces.getActiveSpace()).id}`, - name: 'Explore Data View', + id: `${EXPLORE_DATA_VIEW_PREFIX}-${(await dependencies.spaces.getActiveSpace()).id}`, + name: 'Explore data view', title: exploreDataViewPattern, }); };