Skip to content

Commit

Permalink
[SecuritySolution] Clean up CaseContext (elastic#130036)
Browse files Browse the repository at this point in the history
* clean up casecontext

* update snapshot

(cherry picked from commit 5ee7c3d)
  • Loading branch information
angorayc committed Apr 13, 2022
1 parent 2ea6dc8 commit 0e888a6
Show file tree
Hide file tree
Showing 10 changed files with 691 additions and 753 deletions.
30 changes: 21 additions & 9 deletions x-pack/plugins/security_solution/public/app/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,16 @@ import { KibanaThemeProvider } from '../../../../../src/plugins/kibana_react/pub
import { AppLeaveHandler, AppMountParameters } from '../../../../../src/core/public';

import { ManageUserInfo } from '../detections/components/user_info';
import { DEFAULT_DARK_MODE, APP_NAME } from '../../common/constants';
import { DEFAULT_DARK_MODE, APP_NAME, APP_ID } from '../../common/constants';
import { ErrorToastDispatcher } from '../common/components/error_toast_dispatcher';
import { MlCapabilitiesProvider } from '../common/components/ml/permissions/ml_capabilities_provider';
import { GlobalToaster, ManageGlobalToaster } from '../common/components/toasters';
import { KibanaContextProvider, useKibana, useUiSetting$ } from '../common/lib/kibana';
import {
KibanaContextProvider,
useGetUserCasesPermissions,
useKibana,
useUiSetting$,
} from '../common/lib/kibana';
import { State } from '../common/store';

import { StartServices } from '../types';
Expand Down Expand Up @@ -48,9 +53,11 @@ const StartAppComponent: FC<StartAppComponent> = ({
const {
i18n,
application: { capabilities },
cases,
} = useKibana().services;
const [darkMode] = useUiSetting$<boolean>(DEFAULT_DARK_MODE);

const casesPermissions = useGetUserCasesPermissions();
const CasesContext = cases.ui.getCasesContext();
return (
<EuiErrorBoundary>
<i18n.Context>
Expand All @@ -62,13 +69,18 @@ const StartAppComponent: FC<StartAppComponent> = ({
<UserPrivilegesProvider kibanaCapabilities={capabilities}>
<ManageUserInfo>
<ReactQueryClientProvider>
<PageRouter
history={history}
onAppLeave={onAppLeave}
setHeaderActionMenu={setHeaderActionMenu}
<CasesContext
owner={[APP_ID]}
userCanCrud={casesPermissions?.crud ?? false}
>
{children}
</PageRouter>
<PageRouter
history={history}
onAppLeave={onAppLeave}
setHeaderActionMenu={setHeaderActionMenu}
>
{children}
</PageRouter>
</CasesContext>
</ReactQueryClientProvider>
</ManageUserInfo>
</UserPrivilegesProvider>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import type { Filter } from '@kbn/es-query';
import { inputsModel, State } from '../../store';
import { inputsActions } from '../../store/actions';
import { ControlColumnProps, RowRenderer, TimelineId } from '../../../../common/types/timeline';
import { APP_ID, APP_UI_ID } from '../../../../common/constants';
import { APP_UI_ID } from '../../../../common/constants';
import { timelineActions } from '../../../timelines/store/timeline';
import type { SubsetTimelineModel } from '../../../timelines/store/timeline/model';
import { Status } from '../../../../common/detection_engine/schemas/common/schemas';
Expand All @@ -26,7 +26,7 @@ import type { EntityType } from '../../../../../timelines/common';
import { TGridCellAction } from '../../../../../timelines/common/types';
import { CellValueElementProps } from '../../../timelines/components/timeline/cell_rendering';
import { FIELDS_WITHOUT_CELL_ACTIONS } from '../../lib/cell_actions/constants';
import { useGetUserCasesPermissions, useKibana } from '../../lib/kibana';
import { useKibana } from '../../lib/kibana';
import { GraphOverlay } from '../../../timelines/components/graph_overlay';
import {
useFieldBrowserOptions,
Expand Down Expand Up @@ -114,7 +114,7 @@ const StatefulEventsViewerComponent: React.FC<Props> = ({
} = defaultModel,
} = useSelector((state: State) => eventsViewerSelector(state, id));

const { timelines: timelinesUi, cases } = useKibana().services;
const { timelines: timelinesUi } = useKibana().services;
const {
browserFields,
dataViewId,
Expand Down Expand Up @@ -201,62 +201,58 @@ const StatefulEventsViewerComponent: React.FC<Props> = ({
editorActionsRef,
});

const casesPermissions = useGetUserCasesPermissions();
const CasesContext = cases.ui.getCasesContext();
const isLive = input.policy.kind === 'interval';

return (
<>
<CasesContext owner={[APP_ID]} userCanCrud={casesPermissions?.crud ?? false}>
<FullScreenContainer $isFullScreen={globalFullScreen}>
<InspectButtonContainer>
{timelinesUi.getTGrid<'embedded'>({
additionalFilters,
appId: APP_UI_ID,
browserFields,
bulkActions,
columns,
dataProviders,
dataViewId,
defaultCellActions,
deletedEventIds,
disabledCellActions: FIELDS_WITHOUT_CELL_ACTIONS,
docValueFields,
end,
entityType,
fieldBrowserOptions,
filters: globalFilters,
filterStatus: currentFilter,
globalFullScreen,
graphEventId,
graphOverlay,
hasAlertsCrud,
id,
indexNames: selectedPatterns,
indexPattern,
isLive,
isLoadingIndexPattern,
itemsPerPage,
itemsPerPageOptions,
kqlMode,
leadingControlColumns,
onRuleChange,
query,
renderCellValue,
rowRenderers,
runtimeMappings,
setQuery,
sort,
start,
tGridEventRenderedViewEnabled,
trailingControlColumns,
type: 'embedded',
unit,
})}
</InspectButtonContainer>
</FullScreenContainer>
{DetailsPanel}
</CasesContext>
<FullScreenContainer $isFullScreen={globalFullScreen}>
<InspectButtonContainer>
{timelinesUi.getTGrid<'embedded'>({
additionalFilters,
appId: APP_UI_ID,
browserFields,
bulkActions,
columns,
dataProviders,
dataViewId,
defaultCellActions,
deletedEventIds,
disabledCellActions: FIELDS_WITHOUT_CELL_ACTIONS,
docValueFields,
end,
entityType,
fieldBrowserOptions,
filters: globalFilters,
filterStatus: currentFilter,
globalFullScreen,
graphEventId,
graphOverlay,
hasAlertsCrud,
id,
indexNames: selectedPatterns,
indexPattern,
isLive,
isLoadingIndexPattern,
itemsPerPage,
itemsPerPageOptions,
kqlMode,
leadingControlColumns,
onRuleChange,
query,
renderCellValue,
rowRenderers,
runtimeMappings,
setQuery,
sort,
start,
tGridEventRenderedViewEnabled,
trailingControlColumns,
type: 'embedded',
unit,
})}
</InspectButtonContainer>
</FullScreenContainer>
{DetailsPanel}
</>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import { useRouteSpy } from '../../utils/route/use_route_spy';
import { useQueryToggle } from '../../containers/query_toggle';

jest.mock('../../containers/query_toggle');
jest.mock('../../lib/kibana');

jest.mock('./matrix_loader', () => ({
MatrixLoader: () => <div className="matrixLoader" />,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@ import { InputsModelId } from '../../store/inputs/constants';
import { HoverVisibilityContainer } from '../hover_visibility_container';
import { HISTOGRAM_ACTIONS_BUTTON_CLASS, VisualizationActions } from '../visualization_actions';
import { GetLensAttributes, LensAttributes } from '../visualization_actions/types';
import { useKibana, useGetUserCasesPermissions } from '../../lib/kibana';
import { APP_ID, SecurityPageName } from '../../../../common/constants';
import { SecurityPageName } from '../../../../common/constants';
import { useRouteSpy } from '../../utils/route/use_route_spy';
import { useQueryToggle } from '../../containers/query_toggle';

Expand Down Expand Up @@ -104,10 +103,6 @@ export const MatrixHistogramComponent: React.FC<MatrixHistogramComponentProps> =
skip,
}) => {
const dispatch = useDispatch();
const { cases } = useKibana().services;
const CasesContext = cases.ui.getCasesContext();
const userPermissions = useGetUserCasesPermissions();
const userCanCrud = userPermissions?.crud ?? false;

const handleBrushEnd = useCallback(
({ x }) => {
Expand Down Expand Up @@ -267,18 +262,16 @@ export const MatrixHistogramComponent: React.FC<MatrixHistogramComponentProps> =
<EuiFlexGroup alignItems="center" gutterSize="none">
{onHostOrNetworkOrUserPage && (getLensAttributes || lensAttributes) && timerange && (
<EuiFlexItem grow={false}>
<CasesContext owner={[APP_ID]} userCanCrud={userCanCrud ?? false}>
<VisualizationActions
className="histogram-viz-actions"
getLensAttributes={getLensAttributes}
isInspectButtonDisabled={filterQuery === undefined}
lensAttributes={lensAttributes}
queryId={id}
stackByField={selectedStackByOption.value}
timerange={timerange}
title={title}
/>
</CasesContext>
<VisualizationActions
className="histogram-viz-actions"
getLensAttributes={getLensAttributes}
isInspectButtonDisabled={filterQuery === undefined}
lensAttributes={lensAttributes}
queryId={id}
stackByField={selectedStackByOption.value}
timerange={timerange}
title={title}
/>
</EuiFlexItem>
)}
<EuiFlexItem grow={false}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
import { connect, ConnectedProps, useDispatch } from 'react-redux';
import { Dispatch } from 'redux';
import type { Filter } from '@kbn/es-query';
import { APP_ID } from '../../../../common/constants';
import { getEsQueryConfig } from '../../../../../../../src/plugins/data/common';
import { Status } from '../../../../common/detection_engine/schemas/common/schemas';
import { RowRendererId, TimelineIdLiteral } from '../../../../common/types/timeline';
Expand All @@ -25,7 +24,7 @@ import { useAppToasts } from '../../../common/hooks/use_app_toasts';
import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features';
import { useInvalidFilterQuery } from '../../../common/hooks/use_invalid_filter_query';
import { defaultCellActions } from '../../../common/lib/cell_actions/default_cell_actions';
import { useGetUserCasesPermissions, useKibana } from '../../../common/lib/kibana';
import { useKibana } from '../../../common/lib/kibana';
import { inputsModel, inputsSelectors, State } from '../../../common/store';
import { SourcererScopeName } from '../../../common/store/sourcerer/model';
import * as i18nCommon from '../../../common/translations';
Expand Down Expand Up @@ -365,34 +364,29 @@ export const AlertsTableComponent: React.FC<AlertsTableComponentProps> = ({

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

const casesPermissions = useGetUserCasesPermissions();
const CasesContext = kibana.services.cases.ui.getCasesContext();

if (loading || isEmpty(selectedPatterns)) {
return null;
}

return (
<CasesContext owner={[APP_ID]} userCanCrud={casesPermissions?.crud ?? false}>
<StatefulEventsViewer
additionalFilters={additionalFiltersComponent}
currentFilter={filterGroup}
defaultCellActions={defaultCellActions}
defaultModel={alertsDefaultModel}
end={to}
entityType="events"
hasAlertsCrud={hasIndexWrite && hasIndexMaintenance}
id={timelineId}
leadingControlColumns={leadingControlColumns}
onRuleChange={onRuleChange}
pageFilters={defaultFiltersMemo}
renderCellValue={RenderCellValue}
rowRenderers={defaultRowRenderers}
scopeId={SourcererScopeName.detections}
start={from}
utilityBar={utilityBarCallback}
/>
</CasesContext>
<StatefulEventsViewer
additionalFilters={additionalFiltersComponent}
currentFilter={filterGroup}
defaultCellActions={defaultCellActions}
defaultModel={alertsDefaultModel}
end={to}
entityType="events"
hasAlertsCrud={hasIndexWrite && hasIndexMaintenance}
id={timelineId}
leadingControlColumns={leadingControlColumns}
onRuleChange={onRuleChange}
pageFilters={defaultFiltersMemo}
renderCellValue={RenderCellValue}
rowRenderers={defaultRowRenderers}
scopeId={SourcererScopeName.detections}
start={from}
utilityBar={utilityBarCallback}
/>
);
};

Expand Down
Loading

0 comments on commit 0e888a6

Please sign in to comment.