[Security Solution][Case] Fix bug where push button is not appearing after switching between connectors (#93986)

* Fix bug

* PR review
This commit is contained in:
Christos Nasikas 2021-03-09 12:22:33 +02:00 committed by GitHub
parent d754b0be68
commit a563f5a72e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 23 additions and 18 deletions

View file

@ -469,7 +469,7 @@ describe('CaseView ', () => {
);
await waitFor(() => {
wrapper.find('[data-test-subj="case-refresh"]').first().simulate('click');
expect(fetchCaseUserActions).toBeCalledWith('1234', undefined);
expect(fetchCaseUserActions).toBeCalledWith('1234', 'resilient-2', undefined);
expect(fetchCase).toBeCalled();
});
});

View file

@ -213,7 +213,7 @@ export const CaseComponent = React.memo<CaseProps>(
const handleUpdateCase = useCallback(
(newCase: Case) => {
updateCase(newCase);
fetchCaseUserActions(caseId, subCaseId);
fetchCaseUserActions(caseId, newCase.connector.id, subCaseId);
},
[updateCase, fetchCaseUserActions, caseId, subCaseId]
);
@ -283,9 +283,9 @@ export const CaseComponent = React.memo<CaseProps>(
);
const handleRefresh = useCallback(() => {
fetchCaseUserActions(caseId, subCaseId);
fetchCaseUserActions(caseId, caseData.connector.id, subCaseId);
fetchCase();
}, [caseId, fetchCase, fetchCaseUserActions, subCaseId]);
}, [caseData.connector.id, caseId, fetchCase, fetchCaseUserActions, subCaseId]);
const spyState = useMemo(() => ({ caseTitle: caseData.title }), [caseData.title]);
@ -388,7 +388,12 @@ export const CaseComponent = React.memo<CaseProps>(
caseUserActions={caseUserActions}
connectors={connectors}
data={caseData}
fetchUserActions={fetchCaseUserActions.bind(null, caseId, subCaseId)}
fetchUserActions={fetchCaseUserActions.bind(
null,
caseId,
caseData.connector.id,
subCaseId
)}
isLoadingDescription={isLoading && updateKey === 'description'}
isLoadingUserActions={isLoadingUserActions}
onShowAlertDetails={showAlert}

View file

@ -167,7 +167,7 @@ export type UpdateKey = keyof Pick<
export interface UpdateByKey {
updateKey: UpdateKey;
updateValue: CasePatchRequest[UpdateKey];
fetchCaseUserActions?: (caseId: string, subCaseId?: string) => void;
fetchCaseUserActions?: (caseId: string, caseConnectorId: string, subCaseId?: string) => void;
updateCase?: (newCase: Case) => void;
caseData: Case;
onSuccess?: () => void;

View file

@ -53,7 +53,7 @@ describe('useGetCaseUserActions', () => {
);
await waitForNextUpdate();
result.current.fetchCaseUserActions(basicCase.id);
result.current.fetchCaseUserActions(basicCase.id, basicCase.connector.id);
await waitForNextUpdate();
expect(spyOnPostCase).toBeCalledWith(basicCase.id, abortCtrl.signal);
});
@ -65,7 +65,7 @@ describe('useGetCaseUserActions', () => {
useGetCaseUserActions(basicCase.id, basicCase.connector.id)
);
await waitForNextUpdate();
result.current.fetchCaseUserActions(basicCase.id);
result.current.fetchCaseUserActions(basicCase.id, basicCase.connector.id);
await waitForNextUpdate();
expect(result.current).toEqual({
...initialData,
@ -85,7 +85,7 @@ describe('useGetCaseUserActions', () => {
useGetCaseUserActions(basicCase.id, basicCase.connector.id)
);
await waitForNextUpdate();
result.current.fetchCaseUserActions(basicCase.id);
result.current.fetchCaseUserActions(basicCase.id, basicCase.connector.id);
expect(result.current.isLoading).toBe(true);
});
@ -102,7 +102,7 @@ describe('useGetCaseUserActions', () => {
useGetCaseUserActions(basicCase.id, basicCase.connector.id)
);
await waitForNextUpdate();
result.current.fetchCaseUserActions(basicCase.id);
result.current.fetchCaseUserActions(basicCase.id, basicCase.connector.id);
expect(result.current).toEqual({
...initialData,

View file

@ -46,7 +46,7 @@ export const initialData: CaseUserActionsState = {
};
export interface UseGetCaseUserActions extends CaseUserActionsState {
fetchCaseUserActions: (caseId: string, subCaseId?: string) => void;
fetchCaseUserActions: (caseId: string, caseConnectorId: string, subCaseId?: string) => void;
}
const getExternalService = (value: string): CaseExternalService | null =>
@ -249,7 +249,7 @@ export const useGetCaseUserActions = (
const [, dispatchToaster] = useStateToaster();
const fetchCaseUserActions = useCallback(
async (thisCaseId: string, thisSubCaseId?: string) => {
async (thisCaseId: string, thisCaseConnectorId: string, thisSubCaseId?: string) => {
try {
isCancelledRef.current = false;
abortCtrlRef.current.abort();
@ -279,7 +279,7 @@ export const useGetCaseUserActions = (
setCaseUserActionsState({
caseUserActions,
...getPushedInfo(caseUserActions, caseConnectorId),
...getPushedInfo(caseUserActions, thisCaseConnectorId),
isLoading: false,
isError: false,
participants,
@ -307,12 +307,12 @@ export const useGetCaseUserActions = (
}
},
// eslint-disable-next-line react-hooks/exhaustive-deps
[caseConnectorId]
[caseUserActionsState]
);
useEffect(() => {
if (!isEmpty(caseId)) {
fetchCaseUserActions(caseId, subCaseId);
fetchCaseUserActions(caseId, caseConnectorId, subCaseId);
}
return () => {

View file

@ -84,7 +84,7 @@ describe('useUpdateCase', () => {
isError: false,
updateCaseProperty: result.current.updateCaseProperty,
});
expect(fetchCaseUserActions).toBeCalledWith(basicCase.id, undefined);
expect(fetchCaseUserActions).toBeCalledWith(basicCase.id, '123', undefined);
expect(updateCase).toBeCalledWith(basicCase);
expect(onSuccess).toHaveBeenCalled();
});
@ -104,7 +104,7 @@ describe('useUpdateCase', () => {
isError: false,
updateCaseProperty: result.current.updateCaseProperty,
});
expect(fetchCaseUserActions).toBeCalledWith(basicCase.id, basicSubCaseId);
expect(fetchCaseUserActions).toBeCalledWith(basicCase.id, '123', basicSubCaseId);
expect(updateCase).toBeCalledWith(basicCase);
expect(onSuccess).toHaveBeenCalled();
});

View file

@ -105,7 +105,7 @@ export const useUpdateCase = ({
if (!isCancelledRef.current) {
if (fetchCaseUserActions != null) {
fetchCaseUserActions(caseId, subCaseId);
fetchCaseUserActions(caseId, response[0].connector.id, subCaseId);
}
if (updateCase != null) {
updateCase(response[0]);