Skip to content

Commit 5e6b36c

Browse files
michaelolo24kibanamachinedplumlee
authored
[8.19] [Investigations][DataViews] - Remove non-performant toSpec usage (#225726) (#228346)
# Backport This will backport the following commits from `main` to `8.19`: - [[Investigations][DataViews] - Remove non-performant toSpec usage (#225726)](#225726) <!--- Backport version: 10.0.1 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) <!--BACKPORT [{"author":{"name":"Michael Olorunnisola","email":"michael.olorunnisola@elastic.co"},"sourceCommit":{"committedDate":"2025-07-15T01:41:03Z","message":"[Investigations][DataViews] - Remove non-performant toSpec usage (#225726)\n\n## Summary\n\nThis PR looks to improve the performance of the application by using\n`DataView` in place of `DataViewSpec`. The currently used `DataViewSpec`\nturns out to not be performant at scale because it lacks caching, and\nperforms quite a few nested iterations in the\n[DataView.toSpec](https://github.com/elastic/kibana/blob/27183690142a5590b4ad72d060c43cad869f3f3c/src/platform/plugins/shared/data_views/common/data_views/data_view.ts#L147)\ncall as seen\n[here](https://github.com/elastic/kibana/blob/27183690142a5590b4ad72d060c43cad869f3f3c/src/platform/plugins/shared/data_views/common/data_views/abstract_data_views.ts#L391-L422),\n[here](https://github.com/elastic/kibana/blob/27183690142a5590b4ad72d060c43cad869f3f3c/src/platform/plugins/shared/data_views/common/fields/field_list.ts#L157-L159),\nand finally\n[here](https://github.com/elastic/kibana/blob/27183690142a5590b4ad72d060c43cad869f3f3c/src/platform/plugins/shared/data_views/common/fields/data_view_field.ts#L438-L440).\nWhile this may not be a significant issue at a few thousand fields, this\ndoes not scale well as the number of fields reaches the tens/hundreds of\nthousands.\n\nThis PR makes the change to rely on the DataView instance directly,\nwhich is cached in memory. These performance impacts aren't seen\ncurrently as the new framework is currently disabled behind the below\nfeature flag.\n\n** Relevant configurations **\n`xpack.securitySolution.enableExperimental:\n['newDataViewPickerEnabled']`\n\n---------\n\nCo-authored-by: PhilippeOberti <philippe.oberti@elastic.co>","sha":"6294df62575ad73f5feb5a20142b5e1fc49c3dbe","branchLabelMapping":{"^v9.2.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","backport missing","Team:Threat Hunting:Investigations","backport:version","v9.1.0","v8.19.0","v9.2.0"],"title":"[Investigations][DataViews] - Remove non-performant toSpec usage","number":225726,"url":"https://github.com/elastic/kibana/pull/225726","mergeCommit":{"message":"[Investigations][DataViews] - Remove non-performant toSpec usage (#225726)\n\n## Summary\n\nThis PR looks to improve the performance of the application by using\n`DataView` in place of `DataViewSpec`. The currently used `DataViewSpec`\nturns out to not be performant at scale because it lacks caching, and\nperforms quite a few nested iterations in the\n[DataView.toSpec](https://github.com/elastic/kibana/blob/27183690142a5590b4ad72d060c43cad869f3f3c/src/platform/plugins/shared/data_views/common/data_views/data_view.ts#L147)\ncall as seen\n[here](https://github.com/elastic/kibana/blob/27183690142a5590b4ad72d060c43cad869f3f3c/src/platform/plugins/shared/data_views/common/data_views/abstract_data_views.ts#L391-L422),\n[here](https://github.com/elastic/kibana/blob/27183690142a5590b4ad72d060c43cad869f3f3c/src/platform/plugins/shared/data_views/common/fields/field_list.ts#L157-L159),\nand finally\n[here](https://github.com/elastic/kibana/blob/27183690142a5590b4ad72d060c43cad869f3f3c/src/platform/plugins/shared/data_views/common/fields/data_view_field.ts#L438-L440).\nWhile this may not be a significant issue at a few thousand fields, this\ndoes not scale well as the number of fields reaches the tens/hundreds of\nthousands.\n\nThis PR makes the change to rely on the DataView instance directly,\nwhich is cached in memory. These performance impacts aren't seen\ncurrently as the new framework is currently disabled behind the below\nfeature flag.\n\n** Relevant configurations **\n`xpack.securitySolution.enableExperimental:\n['newDataViewPickerEnabled']`\n\n---------\n\nCo-authored-by: PhilippeOberti <philippe.oberti@elastic.co>","sha":"6294df62575ad73f5feb5a20142b5e1fc49c3dbe"}},"sourceBranch":"main","suggestedTargetBranches":["9.1","8.19"],"targetPullRequestStates":[{"branch":"9.1","label":"v9.1.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"8.19","label":"v8.19.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"main","label":"v9.2.0","branchLabelMappingKey":"^v9.2.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/225726","number":225726,"mergeCommit":{"message":"[Investigations][DataViews] - Remove non-performant toSpec usage (#225726)\n\n## Summary\n\nThis PR looks to improve the performance of the application by using\n`DataView` in place of `DataViewSpec`. The currently used `DataViewSpec`\nturns out to not be performant at scale because it lacks caching, and\nperforms quite a few nested iterations in the\n[DataView.toSpec](https://github.com/elastic/kibana/blob/27183690142a5590b4ad72d060c43cad869f3f3c/src/platform/plugins/shared/data_views/common/data_views/data_view.ts#L147)\ncall as seen\n[here](https://github.com/elastic/kibana/blob/27183690142a5590b4ad72d060c43cad869f3f3c/src/platform/plugins/shared/data_views/common/data_views/abstract_data_views.ts#L391-L422),\n[here](https://github.com/elastic/kibana/blob/27183690142a5590b4ad72d060c43cad869f3f3c/src/platform/plugins/shared/data_views/common/fields/field_list.ts#L157-L159),\nand finally\n[here](https://github.com/elastic/kibana/blob/27183690142a5590b4ad72d060c43cad869f3f3c/src/platform/plugins/shared/data_views/common/fields/data_view_field.ts#L438-L440).\nWhile this may not be a significant issue at a few thousand fields, this\ndoes not scale well as the number of fields reaches the tens/hundreds of\nthousands.\n\nThis PR makes the change to rely on the DataView instance directly,\nwhich is cached in memory. These performance impacts aren't seen\ncurrently as the new framework is currently disabled behind the below\nfeature flag.\n\n** Relevant configurations **\n`xpack.securitySolution.enableExperimental:\n['newDataViewPickerEnabled']`\n\n---------\n\nCo-authored-by: PhilippeOberti <philippe.oberti@elastic.co>","sha":"6294df62575ad73f5feb5a20142b5e1fc49c3dbe"}}]}] BACKPORT--> --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Davis Plumlee <davis.plumlee@elastic.co> Co-authored-by: Davis Plumlee <56367316+dplumlee@users.noreply.github.com>
1 parent ed158d0 commit 5e6b36c

68 files changed

Lines changed: 601 additions & 467 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

x-pack/solutions/security/plugins/security_solution/public/app/components/top_values_popover/top_values_popover.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { StatefulTopN } from '../../../common/components/top_n';
1414
import { getScopeFromPath } from '../../../sourcerer/containers/sourcerer_paths';
1515
import { useSourcererDataView } from '../../../sourcerer/containers';
1616
import { useKibana } from '../../../common/lib/kibana';
17-
import { useDataViewSpec } from '../../../data_view_manager/hooks/use_data_view_spec';
17+
import { useDataView } from '../../../data_view_manager/hooks/use_data_view';
1818
import { useBrowserFields } from '../../../data_view_manager/hooks/use_browser_fields';
1919

2020
export const TopValuesPopover = React.memo(() => {
@@ -25,10 +25,9 @@ export const TopValuesPopover = React.memo(() => {
2525

2626
const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled');
2727

28-
const { dataViewSpec } = useDataViewSpec(sourcererScope);
28+
const { dataView: experimentalDataView } = useDataView(sourcererScope);
2929
const experimentalBrowserFields = useBrowserFields(sourcererScope);
3030

31-
const sourcererDataView = newDataViewPickerEnabled ? dataViewSpec : oldSourcererDataView;
3231
const browserFields = newDataViewPickerEnabled ? experimentalBrowserFields : oldBrowserFields;
3332

3433
const {
@@ -57,7 +56,8 @@ export const TopValuesPopover = React.memo(() => {
5756
field={data.fieldName}
5857
scopeId={data.scopeId}
5958
toggleTopN={onClose}
60-
dataViewSpec={sourcererDataView}
59+
dataView={experimentalDataView}
60+
dataViewSpec={oldSourcererDataView}
6161
browserFields={browserFields}
6262
/>
6363
</EuiWrappingPopover>

x-pack/solutions/security/plugins/security_solution/public/assistant/send_to_timeline/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,10 @@ export const SendToTimelineButton: FC<PropsWithChildren<SendToTimelineButtonProp
6767
const { dataViewId: oldTimelineDataViewId } = useSourcererDataView(SourcererScopeName.timeline);
6868
const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled');
6969

70-
const { dataView } = useDataView(SourcererScopeName.timeline);
70+
const { dataView: experimentalDataView } = useDataView(SourcererScopeName.timeline);
7171

7272
const timelineDataViewId = newDataViewPickerEnabled
73-
? dataView?.id ?? null
73+
? experimentalDataView.id ?? null
7474
: oldTimelineDataViewId;
7575

7676
const { setDiscoverAppState } = useDiscoverState();

x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/index.tsx

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,10 @@ import { SettingsFlyout } from './settings_flyout';
4444
import { parseFilterQuery } from './settings_flyout/parse_filter_query';
4545
import { useSourcererDataView } from '../../sourcerer/containers';
4646
import { useAttackDiscovery } from './use_attack_discovery';
47-
import { useIsExperimentalFeatureEnabled } from '../../common/hooks/use_experimental_features';
48-
import { useDataViewSpec } from '../../data_view_manager/hooks/use_data_view_spec';
4947
import { useInvalidateGetAttackDiscoveryGenerations } from './use_get_attack_discovery_generations';
5048
import { useKibanaFeatureFlags } from './use_kibana_feature_flags';
5149
import { getConnectorNameFromId } from './utils/get_connector_name_from_id';
50+
import { useDataView } from '../../data_view_manager/hooks/use_data_view';
5251

5352
export const ID = 'attackDiscoveryQuery';
5453

@@ -192,22 +191,19 @@ const AttackDiscoveryPageComponent: React.FC = () => {
192191
const pageTitle = useMemo(() => <PageTitle />, []);
193192

194193
const { sourcererDataView: oldSourcererDataView } = useSourcererDataView();
195-
196-
const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled');
197-
const { dataViewSpec } = useDataViewSpec();
198-
199-
const sourcererDataView = newDataViewPickerEnabled ? dataViewSpec : oldSourcererDataView;
194+
const { dataView: experimentalDataView } = useDataView();
200195

201196
// filterQuery is the combined search bar query and filters in ES format:
202197
const [filterQuery, kqlError] = useMemo(
203198
() =>
204199
convertToBuildEsQuery({
205200
config: getEsQueryConfig(uiSettings),
206-
dataViewSpec: sourcererDataView,
201+
dataViewSpec: oldSourcererDataView,
202+
dataView: experimentalDataView,
207203
queries: [query ?? getDefaultQuery()], // <-- search bar query
208204
filters: filters ?? [], // <-- search bar filters
209205
}),
210-
[filters, sourcererDataView, query, uiSettings]
206+
[experimentalDataView, filters, oldSourcererDataView, query, uiSettings]
211207
);
212208

213209
// renders a toast if the filter query is invalid:

x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/create_flyout/index.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import {
1717
} from '@elastic/eui';
1818
import { useAssistantContext, useLoadConnectors } from '@kbn/elastic-assistant';
1919

20+
import { DataViewManagerScopeName } from '../../../../../data_view_manager/constants';
21+
import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view';
2022
import { useKibana } from '../../../../../common/lib/kibana';
2123
import { useSourcererDataView } from '../../../../../sourcerer/containers';
2224
import { Footer } from '../../footer';
@@ -46,6 +48,7 @@ export const CreateFlyout: React.FC<Props> = React.memo(({ onClose }) => {
4648
});
4749

4850
const { sourcererDataView } = useSourcererDataView();
51+
const { dataView: experimentalDataView } = useDataView(DataViewManagerScopeName.detections);
4952

5053
const { mutateAsync: createAttackDiscoverySchedule, isLoading: isLoadingQuery } =
5154
useCreateAttackDiscoverySchedule();
@@ -63,7 +66,8 @@ export const CreateFlyout: React.FC<Props> = React.memo(({ onClose }) => {
6366
alertsIndexPattern ?? '',
6467
connector,
6568
sourcererDataView,
66-
uiSettings
69+
uiSettings,
70+
experimentalDataView
6771
);
6872
await createAttackDiscoverySchedule({ scheduleToCreate });
6973
onClose();
@@ -75,6 +79,7 @@ export const CreateFlyout: React.FC<Props> = React.memo(({ onClose }) => {
7579
aiConnectors,
7680
alertsIndexPattern,
7781
createAttackDiscoverySchedule,
82+
experimentalDataView,
7883
onClose,
7984
sourcererDataView,
8085
uiSettings,

x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/details_flyout/index.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { useAssistantContext, useLoadConnectors } from '@kbn/elastic-assistant';
2424
import { DEFAULT_END, DEFAULT_START } from '@kbn/elastic-assistant-common';
2525
import type { Filter } from '@kbn/es-query';
2626

27+
import { useDataView } from '../../../../../data_view_manager/hooks/use_data_view';
2728
import * as i18n from './translations';
2829

2930
import { useKibana } from '../../../../../common/lib/kibana';
@@ -39,6 +40,7 @@ import { ScheduleDefinition } from './definition';
3940
import { Header } from './header';
4041
import { ScheduleExecutionLogs } from './execution_logs';
4142
import { convertFormDataInBaseSchedule } from '../utils/convert_form_data';
43+
import { DataViewManagerScopeName } from '../../../../../data_view_manager/constants';
4244

4345
interface Props {
4446
scheduleId: string;
@@ -65,6 +67,7 @@ export const DetailsFlyout: React.FC<Props> = React.memo(({ scheduleId, onClose
6567
});
6668

6769
const { sourcererDataView } = useSourcererDataView();
70+
const { dataView: experimentalDataView } = useDataView(DataViewManagerScopeName.detections);
6871

6972
const [isEditing, setIsEditing] = useState(false);
7073

@@ -84,7 +87,8 @@ export const DetailsFlyout: React.FC<Props> = React.memo(({ scheduleId, onClose
8487
alertsIndexPattern ?? '',
8588
connector,
8689
sourcererDataView,
87-
uiSettings
90+
uiSettings,
91+
experimentalDataView
8892
);
8993
await updateAttackDiscoverySchedule({ id: scheduleId, scheduleToUpdate });
9094
setIsEditing(false);
@@ -94,11 +98,12 @@ export const DetailsFlyout: React.FC<Props> = React.memo(({ scheduleId, onClose
9498
},
9599
[
96100
aiConnectors,
97-
uiSettings,
98-
sourcererDataView,
99-
scheduleId,
100101
alertsIndexPattern,
102+
sourcererDataView,
103+
uiSettings,
104+
experimentalDataView,
101105
updateAttackDiscoverySchedule,
106+
scheduleId,
102107
]
103108
);
104109

x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/utils/convert_form_data.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { convertFormDataInBaseSchedule } from './convert_form_data';
1313
import { convertToBuildEsQuery } from '../../../../../common/lib/kuery';
1414
import { getGenAiConfig } from '../../../use_attack_discovery/helpers';
1515
import { parseFilterQuery } from '../../parse_filter_query';
16+
import { createStubDataView } from '@kbn/data-views-plugin/common/data_views/data_view.stub';
1617

1718
jest.mock('../../../../../common/lib/kuery');
1819
jest.mock('../../../use_attack_discovery/helpers');
@@ -50,7 +51,8 @@ describe('convertFormDataInBaseSchedule', () => {
5051
{} as DataViewSpec,
5152
{
5253
get: jest.fn(),
53-
} as unknown as IUiSettingsClient
54+
} as unknown as IUiSettingsClient,
55+
createStubDataView({ spec: {} })
5456
);
5557
expect(baseSchedule).toEqual({
5658
actions: [],

x-pack/solutions/security/plugins/security_solution/public/attack_discovery/pages/settings_flyout/schedule/utils/convert_form_data.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import type { IUiSettingsClient } from '@kbn/core/public';
9-
import type { DataViewSpec } from '@kbn/data-plugin/common';
9+
import type { DataView, DataViewSpec } from '@kbn/data-plugin/common';
1010
import { getEsQueryConfig } from '@kbn/data-plugin/common';
1111
import type { AIConnector } from '@kbn/elastic-assistant';
1212

@@ -20,13 +20,15 @@ export const convertFormDataInBaseSchedule = (
2020
alertsIndexPattern: string,
2121
connector: AIConnector,
2222
dataViewSpec: DataViewSpec,
23-
uiSettings: IUiSettingsClient
23+
uiSettings: IUiSettingsClient,
24+
dataView: DataView
2425
) => {
2526
const alertsSelectionSettings = scheduleData.alertsSelectionSettings;
2627

2728
const [filterQuery, kqlError] = convertToBuildEsQuery({
2829
config: getEsQueryConfig(uiSettings),
2930
dataViewSpec,
31+
dataView,
3032
queries: [alertsSelectionSettings.query],
3133
filters: alertsSelectionSettings.filters,
3234
});

x-pack/solutions/security/plugins/security_solution/public/common/components/cell_actions/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export const SecurityCellActions: React.FC<SecurityCellActionsProps> = ({
7171

7272
const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled');
7373
const { dataView: experimentalDataView } = useDataView(sourcererScopeId);
74-
const dataViewId = newDataViewPickerEnabled ? experimentalDataView?.id : oldDataViewId;
74+
const dataViewId = newDataViewPickerEnabled ? experimentalDataView.id : oldDataViewId;
7575

7676
// Make a dependency key to prevent unnecessary re-renders when data object is defined inline
7777
// It is necessary because the data object is an array or an object and useMemo would always re-render
@@ -82,13 +82,13 @@ export const SecurityCellActions: React.FC<SecurityCellActionsProps> = ({
8282
(Array.isArray(data) ? data : [data])
8383
.map(({ field, value }) => ({
8484
field: newDataViewPickerEnabled
85-
? experimentalDataView?.fields?.getByName(field)?.toSpec()
85+
? experimentalDataView.fields?.getByName(field)?.toSpec()
8686
: oldGetFieldSpec(field),
8787
value,
8888
}))
8989
.filter((item): item is CellActionsData => !!item.field),
9090
// eslint-disable-next-line react-hooks/exhaustive-deps -- Use the dependencyKey to prevent unnecessary re-renders
91-
[dependencyKey, oldGetFieldSpec, newDataViewPickerEnabled, experimentalDataView?.fields]
91+
[dependencyKey, oldGetFieldSpec, newDataViewPickerEnabled, experimentalDataView.fields]
9292
);
9393

9494
const metadataWithDataView = useMemo(() => ({ ...metadata, dataViewId }), [dataViewId, metadata]);

x-pack/solutions/security/plugins/security_solution/public/common/components/events_viewer/index.tsx

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import { getEsQueryConfig } from '@kbn/data-plugin/common';
3535
import type { EuiTheme } from '@kbn/kibana-react-plugin/common';
3636
import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
3737
import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy';
38-
import { useDataViewSpec } from '../../../data_view_manager/hooks/use_data_view_spec';
3938
import { useDataView } from '../../../data_view_manager/hooks/use_data_view';
4039
import { InspectButton } from '../inspect';
4140
import type {
@@ -160,27 +159,31 @@ const StatefulEventsViewerComponent: React.FC<EventsViewerProps & PropsFromRedux
160159
const oldGetFieldSpec = useGetFieldSpec(sourcererScope);
161160

162161
const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled');
163-
const { dataViewSpec, status } = useDataViewSpec(sourcererScope);
164-
const { dataView: experimentalDataView } = useDataView(sourcererScope);
162+
const { dataView: experimentalDataView, status } = useDataView(sourcererScope);
165163

166164
const experimentalSelectedPatterns = useSelectedPatterns(sourcererScope);
167165
const experimentalBrowserFields = useBrowserFields(sourcererScope);
168166
const selectedPatterns = newDataViewPickerEnabled
169167
? experimentalSelectedPatterns
170168
: oldSelectedPatterns;
171-
const sourcererDataView = newDataViewPickerEnabled ? dataViewSpec : oldSourcererDataView;
172169
const isLoadingIndexPattern = newDataViewPickerEnabled
173170
? status !== 'ready'
174171
: oldIsLoadingIndexPattern;
175-
const dataViewId = newDataViewPickerEnabled ? dataViewSpec.id ?? null : oldDataViewId;
176-
const selectedDataViewId = newDataViewPickerEnabled ? dataViewSpec.id : oldDataViewId;
172+
const dataViewId = newDataViewPickerEnabled ? experimentalDataView.id ?? null : oldDataViewId;
173+
const selectedDataViewId = newDataViewPickerEnabled ? experimentalDataView.id : oldDataViewId;
177174
const browserFields = newDataViewPickerEnabled ? experimentalBrowserFields : oldBrowserFields;
178175

176+
const runtimeMappings = useMemo(() => {
177+
return newDataViewPickerEnabled
178+
? (experimentalDataView.getRuntimeMappings() as RunTimeMappings) ?? {}
179+
: (oldSourcererDataView?.runtimeFieldMap as RunTimeMappings) ?? {};
180+
}, [newDataViewPickerEnabled, experimentalDataView, oldSourcererDataView]);
181+
179182
const experimentalGetFieldSpec = useCallback(
180183
(fieldName: string) => {
181-
return experimentalDataView?.fields?.getByName(fieldName)?.toSpec();
184+
return experimentalDataView.fields?.getByName(fieldName)?.toSpec();
182185
},
183-
[experimentalDataView?.fields]
186+
[experimentalDataView.fields]
184187
);
185188
const getFieldSpec = newDataViewPickerEnabled ? experimentalGetFieldSpec : oldGetFieldSpec;
186189

@@ -264,12 +267,22 @@ const StatefulEventsViewerComponent: React.FC<EventsViewerProps & PropsFromRedux
264267
dataProviders: [],
265268
filters: globalFilters,
266269
from: start,
267-
dataViewSpec: sourcererDataView,
270+
dataViewSpec: oldSourcererDataView,
271+
dataView: experimentalDataView,
268272
kqlMode: 'filter',
269273
kqlQuery: query,
270274
to: end,
271275
}),
272-
[esQueryConfig, browserFields, globalFilters, start, sourcererDataView, query, end]
276+
[
277+
esQueryConfig,
278+
browserFields,
279+
globalFilters,
280+
start,
281+
oldSourcererDataView,
282+
experimentalDataView,
283+
query,
284+
end,
285+
]
273286
);
274287

275288
const canQueryTimeline = useMemo(
@@ -311,7 +324,7 @@ const StatefulEventsViewerComponent: React.FC<EventsViewerProps & PropsFromRedux
311324
id: tableId,
312325
indexNames: indexNames ?? selectedPatterns,
313326
limit: itemsPerPage,
314-
runtimeMappings: sourcererDataView.runtimeFieldMap as RunTimeMappings,
327+
runtimeMappings,
315328
skip: !canQueryTimeline,
316329
sort: sortField,
317330
startDate: start,

x-pack/solutions/security/plugins/security_solution/public/common/components/markdown_editor/plugins/insight/index.tsx

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ import { useLicense } from '../../../../hooks/use_license';
6161
import { isProviderValid } from './helpers';
6262
import * as i18n from './translations';
6363
import { useGetScopedSourcererDataView } from '../../../../../sourcerer/components/use_get_sourcerer_data_view';
64-
import { useDataViewSpec } from '../../../../../data_view_manager/hooks/use_data_view_spec';
6564

6665
interface InsightComponentProps {
6766
label?: string;
@@ -291,8 +290,10 @@ const InsightEditorComponent = ({
291290

292291
const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled');
293292

294-
const { dataViewSpec } = useDataViewSpec();
295-
const sourcererDataView = newDataViewPickerEnabled ? dataViewSpec : oldSourcererDataView;
293+
const { dataView: experimentalDataView } = useDataView(SourcererScopeName.default);
294+
const dataViewName = newDataViewPickerEnabled
295+
? experimentalDataView.name
296+
: oldSourcererDataView.name;
296297

297298
const {
298299
unifiedSearch: {
@@ -305,8 +306,6 @@ const InsightEditorComponent = ({
305306
sourcererScope: SourcererScopeName.default,
306307
});
307308

308-
const { dataView: experimentalDataView } = useDataView(SourcererScopeName.default);
309-
310309
const dataView = newDataViewPickerEnabled ? experimentalDataView : oldDataView;
311310

312311
const [providers, setProviders] = useState<Provider[][]>([[]]);
@@ -416,7 +415,7 @@ const InsightEditorComponent = ({
416415
);
417416
}, [labelController.field.value, providers, dataView]);
418417
const filtersStub = useMemo(() => {
419-
const index = sourcererDataView.name ?? '*';
418+
const index = dataViewName ?? '*';
420419
return [
421420
{
422421
$state: {
@@ -430,7 +429,7 @@ const InsightEditorComponent = ({
430429
},
431430
},
432431
];
433-
}, [sourcererDataView]);
432+
}, [dataViewName]);
434433
const isPlatinum = useLicense().isAtLeast('platinum');
435434

436435
return (
@@ -496,11 +495,11 @@ const InsightEditorComponent = ({
496495
/>
497496
</EuiFormRow>
498497
<EuiFormRow label={i18n.FILTER_BUILDER} helpText={i18n.FILTER_BUILDER_TEXT} fullWidth>
499-
{oldDataView ? (
498+
{dataView ? (
500499
<FiltersBuilderLazy
501500
filters={filtersStub}
502501
onChange={onChange}
503-
dataView={oldDataView}
502+
dataView={dataView}
504503
maxDepth={1}
505504
/>
506505
) : (

0 commit comments

Comments
 (0)