[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(() => { await waitFor(() => {
wrapper.find('[data-test-subj="case-refresh"]').first().simulate('click'); 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(); expect(fetchCase).toBeCalled();
}); });
}); });

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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