[Cases] Fix cases navigation after attaching an alert to a case. (#117633)

This commit is contained in:
Christos Nasikas 2021-11-05 17:03:55 +02:00 committed by GitHub
parent 92762fa62f
commit 28142609cc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 35 additions and 18 deletions

View file

@ -227,12 +227,14 @@ function ObservabilityActions({
event,
casePermissions,
appId: observabilityFeatureId,
owner: observabilityFeatureId,
onClose: afterCaseSelection,
}),
timelines.getAddToNewCaseButton({
event,
casePermissions,
appId: observabilityFeatureId,
owner: observabilityFeatureId,
onClose: afterCaseSelection,
}),
]
@ -364,6 +366,7 @@ export function AlertsTableTGrid(props: AlertsTableTGridProps) {
const sortDirection: SortDirection = 'desc';
return {
appId: observabilityFeatureId,
casesOwner: observabilityFeatureId,
casePermissions,
type,
columns,

View file

@ -8,7 +8,7 @@
import { useMemo } from 'react';
import { useGetUserCasesPermissions, useKibana } from '../../../../common/lib/kibana';
import { TimelineId, TimelineNonEcsData } from '../../../../../common';
import { APP_ID } from '../../../../../common/constants';
import { APP_ID, APP_UI_ID } from '../../../../../common/constants';
import { useInsertTimeline } from '../../../../cases/components/use_insert_timeline';
import { Ecs } from '../../../../../common/ecs';
@ -39,7 +39,8 @@ export const useAddToCaseActions = ({
event: { data: nonEcsData ?? [], ecs: ecsData, _id: ecsData?._id },
useInsertTimeline: insertTimelineHook,
casePermissions,
appId: APP_ID,
appId: APP_UI_ID,
owner: APP_ID,
onClose: afterCaseSelection,
}
: null,

View file

@ -35,7 +35,8 @@ describe('AddToCaseAction', () => {
crud: true,
read: true,
},
appId: 'securitySolution',
appId: 'securitySolutionUI',
owner: 'securitySolution',
onClose: () => null,
};

View file

@ -25,6 +25,7 @@ export interface AddToCaseActionProps {
read: boolean;
} | null;
appId: string;
owner: string;
onClose?: Function;
disableAlerts?: boolean;
}
@ -35,6 +36,7 @@ const AddToCaseActionComponent: React.FC<AddToCaseActionProps> = ({
useInsertTimeline,
casePermissions,
appId,
owner,
onClose,
disableAlerts,
}) => {
@ -50,7 +52,7 @@ const AddToCaseActionComponent: React.FC<AddToCaseActionProps> = ({
createCaseUrl,
isAllCaseModalOpen,
isCreateCaseFlyoutOpen,
} = useAddToCase({ event, useInsertTimeline, casePermissions, appId, onClose });
} = useAddToCase({ event, useInsertTimeline, casePermissions, appId, owner, onClose });
const getAllCasesSelectorModalProps = useMemo(() => {
const { ruleId, ruleName } = normalizedEventFields(event);
@ -62,7 +64,7 @@ const AddToCaseActionComponent: React.FC<AddToCaseActionProps> = ({
id: ruleId,
name: ruleName,
},
owner: appId,
owner,
},
createCaseNavigation: {
href: createCaseUrl,
@ -75,7 +77,7 @@ const AddToCaseActionComponent: React.FC<AddToCaseActionProps> = ({
onRowClick: onCaseClicked,
updateCase: onCaseSuccess,
userCanCrud: casePermissions?.crud ?? false,
owner: [appId],
owner: [owner],
onClose: () =>
dispatch(tGridActions.setOpenAddToExistingCase({ id: eventId, isOpen: false })),
};
@ -87,8 +89,8 @@ const AddToCaseActionComponent: React.FC<AddToCaseActionProps> = ({
goToCreateCase,
eventId,
eventIndex,
appId,
dispatch,
owner,
useInsertTimeline,
event,
]);
@ -105,7 +107,7 @@ const AddToCaseActionComponent: React.FC<AddToCaseActionProps> = ({
onCloseFlyout={closeCaseFlyoutOpen}
onSuccess={onCaseSuccess}
useInsertTimeline={useInsertTimeline}
appId={appId}
owner={owner}
disableAlerts={disableAlerts}
/>
)}

View file

@ -25,6 +25,7 @@ const AddToCaseActionButtonComponent: React.FC<AddToCaseActionProps> = ({
useInsertTimeline,
casePermissions,
appId,
owner,
onClose,
}) => {
const {
@ -36,7 +37,7 @@ const AddToCaseActionButtonComponent: React.FC<AddToCaseActionProps> = ({
openPopover,
closePopover,
isPopoverOpen,
} = useAddToCase({ event, useInsertTimeline, casePermissions, appId, onClose });
} = useAddToCase({ event, useInsertTimeline, casePermissions, appId, owner, onClose });
const tooltipContext = userCanCrud
? isEventSupported
? i18n.ACTION_ADD_TO_CASE_TOOLTIP

View file

@ -18,6 +18,7 @@ const AddToCaseActionComponent: React.FC<AddToCaseActionProps> = ({
useInsertTimeline,
casePermissions,
appId,
owner,
onClose,
}) => {
const { addExistingCaseClick, isDisabled, userCanCrud } = useAddToCase({
@ -25,6 +26,7 @@ const AddToCaseActionComponent: React.FC<AddToCaseActionProps> = ({
useInsertTimeline,
casePermissions,
appId,
owner,
onClose,
});
return (

View file

@ -18,6 +18,7 @@ const AddToCaseActionComponent: React.FC<AddToCaseActionProps> = ({
useInsertTimeline,
casePermissions,
appId,
owner,
onClose,
}) => {
const { addNewCaseClick, isDisabled, userCanCrud } = useAddToCase({
@ -25,6 +26,7 @@ const AddToCaseActionComponent: React.FC<AddToCaseActionProps> = ({
useInsertTimeline,
casePermissions,
appId,
owner,
onClose,
});

View file

@ -16,7 +16,7 @@ const onSuccess = jest.fn();
const defaultProps = {
onCloseFlyout,
onSuccess,
appId: 'securitySolution',
owner: 'securitySolution',
};
describe('CreateCaseFlyout', () => {

View file

@ -19,7 +19,7 @@ export interface CreateCaseModalProps {
onCloseFlyout: () => void;
onSuccess: (theCase: Case) => Promise<void>;
useInsertTimeline?: Function;
appId: string;
owner: string;
disableAlerts?: boolean;
}
@ -70,7 +70,7 @@ const CreateCaseFlyoutComponent: React.FC<CreateCaseModalProps> = ({
afterCaseCreated,
onCloseFlyout,
onSuccess,
appId,
owner,
disableAlerts,
}) => {
const { cases } = useKibana<TimelinesStartServices>().services;
@ -80,10 +80,10 @@ const CreateCaseFlyoutComponent: React.FC<CreateCaseModalProps> = ({
onCancel: onCloseFlyout,
onSuccess,
withSteps: false,
owner: [appId],
owner: [owner],
disableAlerts,
};
}, [afterCaseCreated, onCloseFlyout, onSuccess, appId, disableAlerts]);
}, [afterCaseCreated, onCloseFlyout, onSuccess, owner, disableAlerts]);
return (
<>
<GlobalStyle />

View file

@ -80,6 +80,7 @@ const ScrollableFlexItem = styled(EuiFlexItem)`
export interface TGridStandaloneProps {
appId: string;
casesOwner: string;
casePermissions: {
crud: boolean;
read: boolean;
@ -123,6 +124,7 @@ export interface TGridStandaloneProps {
const TGridStandaloneComponent: React.FC<TGridStandaloneProps> = ({
afterCaseSelection,
appId,
casesOwner,
casePermissions,
columns,
defaultCellActions,
@ -275,9 +277,10 @@ const TGridStandaloneComponent: React.FC<TGridStandaloneProps> = ({
event: selectedEvent,
casePermissions: casePermissions ?? null,
appId,
owner: casesOwner,
onClose: afterCaseSelection,
};
}, [appId, casePermissions, afterCaseSelection, selectedEvent]);
}, [appId, casePermissions, afterCaseSelection, selectedEvent, casesOwner]);
const nonDeletedEvents = useMemo(
() => events.filter((e) => !deletedEventIds.includes(e._id)),

View file

@ -81,6 +81,7 @@ export const useAddToCase = ({
useInsertTimeline,
casePermissions,
appId,
owner,
onClose,
}: AddToCaseActionProps): UseAddToCase => {
const eventId = event?.ecs._id ?? '';
@ -167,13 +168,13 @@ export const useAddToCase = ({
id: ruleId,
name: ruleName,
},
owner: appId,
owner,
},
updateCase,
});
}
},
[eventId, eventIndex, appId, dispatch, event]
[eventId, eventIndex, owner, dispatch, event]
);
const onCaseSuccess = useCallback(
async (theCase: Case) => {
@ -187,7 +188,7 @@ export const useAddToCase = ({
async (ev) => {
ev.preventDefault();
return navigateToApp(appId, {
deepLinkId: appId === 'securitySolution' ? 'case' : 'cases',
deepLinkId: appId === 'securitySolutionUI' ? 'case' : 'cases',
path: getCreateCaseUrl(urlSearch),
});
},

View file

@ -66,6 +66,7 @@ const AppRoot = React.memo(
timelinesPluginSetup.getTGrid &&
timelinesPluginSetup.getTGrid<'standalone'>({
appId: 'securitySolution',
casesOwner: 'securitySolutionUI',
type: 'standalone',
casePermissions: {
read: true,