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 0968bc4a4fe21..4c906bb93154d 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 @@ -39,7 +39,7 @@ 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 { useDataViewSpec } from '../../data_view_manager/hooks/use_data_view_spec'; +import { useDataView } from '../../data_view_manager/hooks/use_data_view'; export interface SendToTimelineButtonProps { asEmptyButton: boolean; @@ -67,10 +67,10 @@ export const SendToTimelineButton: FC ({ useUpdateUrlParam: jest.fn(), })); -jest.mock('../../hooks/use_data_view_spec', () => ({ - useDataViewSpec: jest.fn(), +jest.mock('../../hooks/use_data_view', () => ({ + useDataView: jest.fn(), })); jest.mock('../../hooks/use_select_data_view', () => ({ @@ -79,11 +79,11 @@ describe('DataViewPicker', () => { beforeEach(() => { jest.mocked(useUpdateUrlParam).mockReturnValue(jest.fn()); - jest.mocked(useDataViewSpec).mockReturnValue({ - dataViewSpec: { + jest.mocked(useDataView).mockReturnValue({ + dataView: { id: DEFAULT_SECURITY_SOLUTION_DATA_VIEW_ID, name: 'Default Security Data View', - }, + } as unknown as DataView, status: 'ready', }); 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 44d673c70efab..da54dc8b05243 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 @@ -14,15 +14,15 @@ 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'; import { useKibana } from '../../../common/lib/kibana'; -import { useDataViewSpec } from '../../hooks/use_data_view_spec'; import { sharedStateSelector } from '../../redux/selectors'; import { sharedDataViewManagerSlice } from '../../redux/slices'; import { useSelectDataView } from '../../hooks/use_select_data_view'; import { DataViewManagerScopeName } from '../../constants'; import { useManagedDataViews } from '../../hooks/use_managed_data_views'; import { useSavedDataViews } from '../../hooks/use_saved_data_views'; -import { LOADING } from './translations'; +import { DEFAULT_SECURITY_DATA_VIEW, LOADING } from './translations'; import { DATA_VIEW_PICKER_TEST_ID } from './constants'; +import { useDataView } from '../../hooks/use_data_view'; interface DataViewPickerProps { /** @@ -55,7 +55,7 @@ export const DataViewPicker = memo(({ scope, onClosePopover, disabled }: DataVie const closeDataViewEditor = useRef<() => void | undefined>(); const closeFieldEditor = useRef<() => void | undefined>(); - const { dataViewSpec, status } = useDataViewSpec(scope); + const { dataView, status } = useDataView(scope); const { adhocDataViews: adhocDataViewSpecs, defaultDataViewId } = useSelector(sharedStateSelector); @@ -69,7 +69,7 @@ export const DataViewPicker = memo(({ scope, onClosePopover, disabled }: DataVie const isDefaultSourcerer = scope === DataViewManagerScopeName.default; const updateUrlParam = useUpdateUrlParam(URL_PARAM_KEY.sourcerer); - const dataViewId = dataViewSpec?.id; + const dataViewId = dataView?.id; // NOTE: this function is called in response to user interaction with the picker, // hence - it is the only place where we should update the url param for the data view selection. @@ -154,10 +154,16 @@ export const DataViewPicker = memo(({ scope, onClosePopover, disabled }: DataVie return { label: LOADING }; } + if (dataView?.id === defaultDataViewId) { + return { + label: DEFAULT_SECURITY_DATA_VIEW, + }; + } + return { - label: dataViewSpec?.name || dataViewSpec?.id || 'Data view', + label: dataView?.name || dataView?.id || 'Data view', }; - }, [dataViewSpec?.name, dataViewSpec?.id, status]); + }, [dataView?.id, dataView?.name, defaultDataViewId, status]); return (
diff --git a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view_spec.ts b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view_spec.ts index a89524559c25d..5f6febb770ebe 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view_spec.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/data_view_manager/hooks/use_data_view_spec.ts @@ -23,9 +23,11 @@ export interface UseDataViewSpecResult { /** * Returns an object with the dataViewSpec and status values for the given scopeName. + * IMPORTANT: If fields are not required, make sure to pass `includeFields = false`. */ export const useDataViewSpec = ( - scopeName: DataViewManagerScopeName = DataViewManagerScopeName.default + scopeName: DataViewManagerScopeName = DataViewManagerScopeName.default, + includeFields = true ): UseDataViewSpecResult => { const { dataView, status } = useDataView(scopeName); @@ -42,6 +44,6 @@ export const useDataViewSpec = ( }; } - return { dataViewSpec: dataView?.toSpec?.(), status }; - }, [dataView, status]); + return { dataViewSpec: dataView?.toSpec?.(includeFields), status }; + }, [dataView, includeFields, status]); }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/timelines/hooks/use_create_timeline.tsx b/x-pack/solutions/security/plugins/security_solution/public/timelines/hooks/use_create_timeline.tsx index 653c3943efd85..955cbac9abd6a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/timelines/hooks/use_create_timeline.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/timelines/hooks/use_create_timeline.tsx @@ -21,11 +21,11 @@ import { defaultUdtHeaders } from '../components/timeline/body/column_headers/de import { timelineDefaults } from '../store/defaults'; import { useSelectDataView } from '../../data_view_manager/hooks/use_select_data_view'; import { DataViewManagerScopeName } from '../../data_view_manager/constants'; -import { useDataViewSpec } from '../../data_view_manager/hooks/use_data_view_spec'; import { useSelectedPatterns } from '../../data_view_manager/hooks/use_selected_patterns'; import { sourcererActions, sourcererSelectors } from '../../sourcerer/store'; import { SourcererScopeName } from '../../sourcerer/store/model'; import { useEnableExperimental } from '../../common/hooks/use_experimental_features'; +import { useDataView } from '../../data_view_manager/hooks/use_data_view'; export interface UseCreateTimelineParams { /** @@ -59,14 +59,12 @@ export const useCreateTimeline = ({ ) ?? { id: '', patternList: [] }; const { newDataViewPickerEnabled } = useEnableExperimental(); - const { dataViewSpec: experimentalDataViewSpec } = useDataViewSpec( - DataViewManagerScopeName.default - ); + const { dataView: experimentalDataView } = useDataView(DataViewManagerScopeName.default); const experimentalSelectedPatterns = useSelectedPatterns(DataViewManagerScopeName.default); const dataViewId = useMemo( - () => (newDataViewPickerEnabled ? experimentalDataViewSpec.id ?? '' : oldDataViewId), - [experimentalDataViewSpec.id, newDataViewPickerEnabled, oldDataViewId] + () => (newDataViewPickerEnabled ? experimentalDataView?.id ?? '' : oldDataViewId), + [experimentalDataView?.id, newDataViewPickerEnabled, oldDataViewId] ); const selectedPatterns = useMemo( () => (newDataViewPickerEnabled ? experimentalSelectedPatterns : oldSelectedPatterns),