Skip to content

Commit 0e888a6

Browse files
committed
[SecuritySolution] Clean up CaseContext (#130036)
* clean up casecontext * update snapshot (cherry picked from commit 5ee7c3d)
1 parent 2ea6dc8 commit 0e888a6

10 files changed

Lines changed: 691 additions & 753 deletions

File tree

x-pack/plugins/security_solution/public/app/app.tsx

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,16 @@ import { KibanaThemeProvider } from '../../../../../src/plugins/kibana_react/pub
1515
import { AppLeaveHandler, AppMountParameters } from '../../../../../src/core/public';
1616

1717
import { ManageUserInfo } from '../detections/components/user_info';
18-
import { DEFAULT_DARK_MODE, APP_NAME } from '../../common/constants';
18+
import { DEFAULT_DARK_MODE, APP_NAME, APP_ID } from '../../common/constants';
1919
import { ErrorToastDispatcher } from '../common/components/error_toast_dispatcher';
2020
import { MlCapabilitiesProvider } from '../common/components/ml/permissions/ml_capabilities_provider';
2121
import { GlobalToaster, ManageGlobalToaster } from '../common/components/toasters';
22-
import { KibanaContextProvider, useKibana, useUiSetting$ } from '../common/lib/kibana';
22+
import {
23+
KibanaContextProvider,
24+
useGetUserCasesPermissions,
25+
useKibana,
26+
useUiSetting$,
27+
} from '../common/lib/kibana';
2328
import { State } from '../common/store';
2429

2530
import { StartServices } from '../types';
@@ -48,9 +53,11 @@ const StartAppComponent: FC<StartAppComponent> = ({
4853
const {
4954
i18n,
5055
application: { capabilities },
56+
cases,
5157
} = useKibana().services;
5258
const [darkMode] = useUiSetting$<boolean>(DEFAULT_DARK_MODE);
53-
59+
const casesPermissions = useGetUserCasesPermissions();
60+
const CasesContext = cases.ui.getCasesContext();
5461
return (
5562
<EuiErrorBoundary>
5663
<i18n.Context>
@@ -62,13 +69,18 @@ const StartAppComponent: FC<StartAppComponent> = ({
6269
<UserPrivilegesProvider kibanaCapabilities={capabilities}>
6370
<ManageUserInfo>
6471
<ReactQueryClientProvider>
65-
<PageRouter
66-
history={history}
67-
onAppLeave={onAppLeave}
68-
setHeaderActionMenu={setHeaderActionMenu}
72+
<CasesContext
73+
owner={[APP_ID]}
74+
userCanCrud={casesPermissions?.crud ?? false}
6975
>
70-
{children}
71-
</PageRouter>
76+
<PageRouter
77+
history={history}
78+
onAppLeave={onAppLeave}
79+
setHeaderActionMenu={setHeaderActionMenu}
80+
>
81+
{children}
82+
</PageRouter>
83+
</CasesContext>
7284
</ReactQueryClientProvider>
7385
</ManageUserInfo>
7486
</UserPrivilegesProvider>

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

Lines changed: 51 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import type { Filter } from '@kbn/es-query';
1212
import { inputsModel, State } from '../../store';
1313
import { inputsActions } from '../../store/actions';
1414
import { ControlColumnProps, RowRenderer, TimelineId } from '../../../../common/types/timeline';
15-
import { APP_ID, APP_UI_ID } from '../../../../common/constants';
15+
import { APP_UI_ID } from '../../../../common/constants';
1616
import { timelineActions } from '../../../timelines/store/timeline';
1717
import type { SubsetTimelineModel } from '../../../timelines/store/timeline/model';
1818
import { Status } from '../../../../common/detection_engine/schemas/common/schemas';
@@ -26,7 +26,7 @@ import type { EntityType } from '../../../../../timelines/common';
2626
import { TGridCellAction } from '../../../../../timelines/common/types';
2727
import { CellValueElementProps } from '../../../timelines/components/timeline/cell_rendering';
2828
import { FIELDS_WITHOUT_CELL_ACTIONS } from '../../lib/cell_actions/constants';
29-
import { useGetUserCasesPermissions, useKibana } from '../../lib/kibana';
29+
import { useKibana } from '../../lib/kibana';
3030
import { GraphOverlay } from '../../../timelines/components/graph_overlay';
3131
import {
3232
useFieldBrowserOptions,
@@ -114,7 +114,7 @@ const StatefulEventsViewerComponent: React.FC<Props> = ({
114114
} = defaultModel,
115115
} = useSelector((state: State) => eventsViewerSelector(state, id));
116116

117-
const { timelines: timelinesUi, cases } = useKibana().services;
117+
const { timelines: timelinesUi } = useKibana().services;
118118
const {
119119
browserFields,
120120
dataViewId,
@@ -201,62 +201,58 @@ const StatefulEventsViewerComponent: React.FC<Props> = ({
201201
editorActionsRef,
202202
});
203203

204-
const casesPermissions = useGetUserCasesPermissions();
205-
const CasesContext = cases.ui.getCasesContext();
206204
const isLive = input.policy.kind === 'interval';
207205

208206
return (
209207
<>
210-
<CasesContext owner={[APP_ID]} userCanCrud={casesPermissions?.crud ?? false}>
211-
<FullScreenContainer $isFullScreen={globalFullScreen}>
212-
<InspectButtonContainer>
213-
{timelinesUi.getTGrid<'embedded'>({
214-
additionalFilters,
215-
appId: APP_UI_ID,
216-
browserFields,
217-
bulkActions,
218-
columns,
219-
dataProviders,
220-
dataViewId,
221-
defaultCellActions,
222-
deletedEventIds,
223-
disabledCellActions: FIELDS_WITHOUT_CELL_ACTIONS,
224-
docValueFields,
225-
end,
226-
entityType,
227-
fieldBrowserOptions,
228-
filters: globalFilters,
229-
filterStatus: currentFilter,
230-
globalFullScreen,
231-
graphEventId,
232-
graphOverlay,
233-
hasAlertsCrud,
234-
id,
235-
indexNames: selectedPatterns,
236-
indexPattern,
237-
isLive,
238-
isLoadingIndexPattern,
239-
itemsPerPage,
240-
itemsPerPageOptions,
241-
kqlMode,
242-
leadingControlColumns,
243-
onRuleChange,
244-
query,
245-
renderCellValue,
246-
rowRenderers,
247-
runtimeMappings,
248-
setQuery,
249-
sort,
250-
start,
251-
tGridEventRenderedViewEnabled,
252-
trailingControlColumns,
253-
type: 'embedded',
254-
unit,
255-
})}
256-
</InspectButtonContainer>
257-
</FullScreenContainer>
258-
{DetailsPanel}
259-
</CasesContext>
208+
<FullScreenContainer $isFullScreen={globalFullScreen}>
209+
<InspectButtonContainer>
210+
{timelinesUi.getTGrid<'embedded'>({
211+
additionalFilters,
212+
appId: APP_UI_ID,
213+
browserFields,
214+
bulkActions,
215+
columns,
216+
dataProviders,
217+
dataViewId,
218+
defaultCellActions,
219+
deletedEventIds,
220+
disabledCellActions: FIELDS_WITHOUT_CELL_ACTIONS,
221+
docValueFields,
222+
end,
223+
entityType,
224+
fieldBrowserOptions,
225+
filters: globalFilters,
226+
filterStatus: currentFilter,
227+
globalFullScreen,
228+
graphEventId,
229+
graphOverlay,
230+
hasAlertsCrud,
231+
id,
232+
indexNames: selectedPatterns,
233+
indexPattern,
234+
isLive,
235+
isLoadingIndexPattern,
236+
itemsPerPage,
237+
itemsPerPageOptions,
238+
kqlMode,
239+
leadingControlColumns,
240+
onRuleChange,
241+
query,
242+
renderCellValue,
243+
rowRenderers,
244+
runtimeMappings,
245+
setQuery,
246+
sort,
247+
start,
248+
tGridEventRenderedViewEnabled,
249+
trailingControlColumns,
250+
type: 'embedded',
251+
unit,
252+
})}
253+
</InspectButtonContainer>
254+
</FullScreenContainer>
255+
{DetailsPanel}
260256
</>
261257
);
262258
};

x-pack/plugins/security_solution/public/common/components/matrix_histogram/index.test.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import { useRouteSpy } from '../../utils/route/use_route_spy';
1818
import { useQueryToggle } from '../../containers/query_toggle';
1919

2020
jest.mock('../../containers/query_toggle');
21-
jest.mock('../../lib/kibana');
2221

2322
jest.mock('./matrix_loader', () => ({
2423
MatrixLoader: () => <div className="matrixLoader" />,

x-pack/plugins/security_solution/public/common/components/matrix_histogram/index.tsx

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ import { InputsModelId } from '../../store/inputs/constants';
3131
import { HoverVisibilityContainer } from '../hover_visibility_container';
3232
import { HISTOGRAM_ACTIONS_BUTTON_CLASS, VisualizationActions } from '../visualization_actions';
3333
import { GetLensAttributes, LensAttributes } from '../visualization_actions/types';
34-
import { useKibana, useGetUserCasesPermissions } from '../../lib/kibana';
35-
import { APP_ID, SecurityPageName } from '../../../../common/constants';
34+
import { SecurityPageName } from '../../../../common/constants';
3635
import { useRouteSpy } from '../../utils/route/use_route_spy';
3736
import { useQueryToggle } from '../../containers/query_toggle';
3837

@@ -104,10 +103,6 @@ export const MatrixHistogramComponent: React.FC<MatrixHistogramComponentProps> =
104103
skip,
105104
}) => {
106105
const dispatch = useDispatch();
107-
const { cases } = useKibana().services;
108-
const CasesContext = cases.ui.getCasesContext();
109-
const userPermissions = useGetUserCasesPermissions();
110-
const userCanCrud = userPermissions?.crud ?? false;
111106

112107
const handleBrushEnd = useCallback(
113108
({ x }) => {
@@ -267,18 +262,16 @@ export const MatrixHistogramComponent: React.FC<MatrixHistogramComponentProps> =
267262
<EuiFlexGroup alignItems="center" gutterSize="none">
268263
{onHostOrNetworkOrUserPage && (getLensAttributes || lensAttributes) && timerange && (
269264
<EuiFlexItem grow={false}>
270-
<CasesContext owner={[APP_ID]} userCanCrud={userCanCrud ?? false}>
271-
<VisualizationActions
272-
className="histogram-viz-actions"
273-
getLensAttributes={getLensAttributes}
274-
isInspectButtonDisabled={filterQuery === undefined}
275-
lensAttributes={lensAttributes}
276-
queryId={id}
277-
stackByField={selectedStackByOption.value}
278-
timerange={timerange}
279-
title={title}
280-
/>
281-
</CasesContext>
265+
<VisualizationActions
266+
className="histogram-viz-actions"
267+
getLensAttributes={getLensAttributes}
268+
isInspectButtonDisabled={filterQuery === undefined}
269+
lensAttributes={lensAttributes}
270+
queryId={id}
271+
stackByField={selectedStackByOption.value}
272+
timerange={timerange}
273+
title={title}
274+
/>
282275
</EuiFlexItem>
283276
)}
284277
<EuiFlexItem grow={false}>

x-pack/plugins/security_solution/public/detections/components/alerts_table/index.tsx

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
1010
import { connect, ConnectedProps, useDispatch } from 'react-redux';
1111
import { Dispatch } from 'redux';
1212
import type { Filter } from '@kbn/es-query';
13-
import { APP_ID } from '../../../../common/constants';
1413
import { getEsQueryConfig } from '../../../../../../../src/plugins/data/common';
1514
import { Status } from '../../../../common/detection_engine/schemas/common/schemas';
1615
import { RowRendererId, TimelineIdLiteral } from '../../../../common/types/timeline';
@@ -25,7 +24,7 @@ import { useAppToasts } from '../../../common/hooks/use_app_toasts';
2524
import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features';
2625
import { useInvalidFilterQuery } from '../../../common/hooks/use_invalid_filter_query';
2726
import { defaultCellActions } from '../../../common/lib/cell_actions/default_cell_actions';
28-
import { useGetUserCasesPermissions, useKibana } from '../../../common/lib/kibana';
27+
import { useKibana } from '../../../common/lib/kibana';
2928
import { inputsModel, inputsSelectors, State } from '../../../common/store';
3029
import { SourcererScopeName } from '../../../common/store/sourcerer/model';
3130
import * as i18nCommon from '../../../common/translations';
@@ -365,34 +364,29 @@ export const AlertsTableComponent: React.FC<AlertsTableComponentProps> = ({
365364

366365
const leadingControlColumns = useMemo(() => getDefaultControlColumn(ACTION_BUTTON_COUNT), []);
367366

368-
const casesPermissions = useGetUserCasesPermissions();
369-
const CasesContext = kibana.services.cases.ui.getCasesContext();
370-
371367
if (loading || isEmpty(selectedPatterns)) {
372368
return null;
373369
}
374370

375371
return (
376-
<CasesContext owner={[APP_ID]} userCanCrud={casesPermissions?.crud ?? false}>
377-
<StatefulEventsViewer
378-
additionalFilters={additionalFiltersComponent}
379-
currentFilter={filterGroup}
380-
defaultCellActions={defaultCellActions}
381-
defaultModel={alertsDefaultModel}
382-
end={to}
383-
entityType="events"
384-
hasAlertsCrud={hasIndexWrite && hasIndexMaintenance}
385-
id={timelineId}
386-
leadingControlColumns={leadingControlColumns}
387-
onRuleChange={onRuleChange}
388-
pageFilters={defaultFiltersMemo}
389-
renderCellValue={RenderCellValue}
390-
rowRenderers={defaultRowRenderers}
391-
scopeId={SourcererScopeName.detections}
392-
start={from}
393-
utilityBar={utilityBarCallback}
394-
/>
395-
</CasesContext>
372+
<StatefulEventsViewer
373+
additionalFilters={additionalFiltersComponent}
374+
currentFilter={filterGroup}
375+
defaultCellActions={defaultCellActions}
376+
defaultModel={alertsDefaultModel}
377+
end={to}
378+
entityType="events"
379+
hasAlertsCrud={hasIndexWrite && hasIndexMaintenance}
380+
id={timelineId}
381+
leadingControlColumns={leadingControlColumns}
382+
onRuleChange={onRuleChange}
383+
pageFilters={defaultFiltersMemo}
384+
renderCellValue={RenderCellValue}
385+
rowRenderers={defaultRowRenderers}
386+
scopeId={SourcererScopeName.detections}
387+
start={from}
388+
utilityBar={utilityBarCallback}
389+
/>
396390
);
397391
};
398392

0 commit comments

Comments
 (0)