Skip to content

Commit ad37f02

Browse files
[Security Solution] Refactor useSelector (#75297)
1 parent c39243c commit ad37f02

File tree

33 files changed

+135
-131
lines changed

33 files changed

+135
-131
lines changed

x-pack/plugins/security_solution/public/cases/components/use_all_cases_modal/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
*/
66

77
import React, { useState, useCallback, useMemo } from 'react';
8+
import { useDispatch } from 'react-redux';
89

9-
import { useDispatch, useSelector } from 'react-redux';
10+
import { useShallowEqualSelector } from '../../../common/hooks/use_selector';
1011
import { APP_ID } from '../../../../common/constants';
1112
import { SecurityPageName } from '../../../app/types';
1213
import { useKibana } from '../../../common/lib/kibana';
1314
import { getCaseDetailsUrl, getCreateCaseUrl } from '../../../common/components/link_to';
14-
import { State } from '../../../common/store';
1515
import { setInsertTimeline } from '../../../timelines/store/timeline/actions';
1616
import { timelineSelectors } from '../../../timelines/store/timeline';
1717

@@ -34,7 +34,7 @@ export const useAllCasesModal = ({
3434
}: UseAllCasesModalProps): UseAllCasesModalReturnedValues => {
3535
const dispatch = useDispatch();
3636
const { navigateToApp } = useKibana().services.application;
37-
const timeline = useSelector((state: State) =>
37+
const timeline = useShallowEqualSelector((state) =>
3838
timelineSelectors.selectTimeline(state, timelineId)
3939
);
4040

x-pack/plugins/security_solution/public/common/components/navigation/use_get_url_search.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,16 @@
44
* you may not use this file except in compliance with the Elastic License.
55
*/
66

7-
import { isEqual } from 'lodash/fp';
87
import { useMemo } from 'react';
9-
import { useSelector } from 'react-redux';
108

9+
import { useDeepEqualSelector } from '../../hooks/use_selector';
1110
import { makeMapStateToProps } from '../url_state/helpers';
1211
import { getSearch } from './helpers';
1312
import { SearchNavTab } from './types';
1413

1514
export const useGetUrlSearch = (tab: SearchNavTab) => {
1615
const mapState = makeMapStateToProps();
17-
const { urlState } = useSelector(mapState, isEqual);
16+
const { urlState } = useDeepEqualSelector(mapState);
1817
const urlSearch = useMemo(() => getSearch(tab, urlState), [tab, urlState]);
1918
return urlSearch;
2019
};

x-pack/plugins/security_solution/public/common/containers/source/index.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { set } from '@elastic/safer-lodash-set/fp';
88
import { keyBy, pick, isEmpty, isEqual, isUndefined } from 'lodash/fp';
99
import memoizeOne from 'memoize-one';
1010
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
11-
import { useDispatch, useSelector, shallowEqual } from 'react-redux';
11+
import { useDispatch } from 'react-redux';
1212
import { IIndexPattern } from 'src/plugins/data/public';
1313

1414
import { useKibana } from '../../lib/kibana';
@@ -20,11 +20,10 @@ import {
2020
BrowserFields,
2121
} from '../../../../common/search_strategy/index_fields';
2222
import { AbortError } from '../../../../../../../src/plugins/data/common';
23+
import { useShallowEqualSelector } from '../../../common/hooks/use_selector';
2324
import * as i18n from './translations';
2425
import { SourcererScopeName } from '../../store/sourcerer/model';
2526
import { sourcererActions, sourcererSelectors } from '../../store/sourcerer';
26-
27-
import { State } from '../../store';
2827
import { DocValueFields } from '../../../../common/search_strategy/common';
2928

3029
export { BrowserField, BrowserFields, DocValueFields };
@@ -201,9 +200,8 @@ export const useIndexFields = (sourcererScopeName: SourcererScopeName) => {
201200
() => sourcererSelectors.getIndexNamesSelectedSelector(),
202201
[]
203202
);
204-
const indexNames = useSelector<State, string[]>(
205-
(state) => indexNamesSelectedSelector(state, sourcererScopeName),
206-
shallowEqual
203+
const indexNames = useShallowEqualSelector<string[]>((state) =>
204+
indexNamesSelectedSelector(state, sourcererScopeName)
207205
);
208206

209207
const setLoading = useCallback(

x-pack/plugins/security_solution/public/common/containers/use_full_screen/index.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
*/
66

77
import { useCallback, useMemo } from 'react';
8-
import { useDispatch, useSelector } from 'react-redux';
9-
import { SCROLLING_DISABLED_CLASS_NAME } from '../../../../common/constants';
8+
import { useDispatch } from 'react-redux';
109

10+
import { SCROLLING_DISABLED_CLASS_NAME } from '../../../../common/constants';
11+
import { useShallowEqualSelector } from '../../hooks/use_selector';
1112
import { inputsSelectors } from '../../store';
1213
import { inputsActions } from '../../store/actions';
1314

@@ -29,8 +30,10 @@ export const resetScroll = () => {
2930

3031
export const useFullScreen = () => {
3132
const dispatch = useDispatch();
32-
const globalFullScreen = useSelector(inputsSelectors.globalFullScreenSelector) ?? false;
33-
const timelineFullScreen = useSelector(inputsSelectors.timelineFullScreenSelector) ?? false;
33+
const globalFullScreen =
34+
useShallowEqualSelector(inputsSelectors.globalFullScreenSelector) ?? false;
35+
const timelineFullScreen =
36+
useShallowEqualSelector(inputsSelectors.timelineFullScreenSelector) ?? false;
3437

3538
const setGlobalFullScreen = useCallback(
3639
(fullScreen: boolean) => {

x-pack/plugins/security_solution/public/common/containers/use_global_time/index.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@
55
*/
66

77
import { useCallback, useState, useEffect, useMemo } from 'react';
8-
import { useDispatch, useSelector } from 'react-redux';
8+
import { useDispatch } from 'react-redux';
99

10+
import { useShallowEqualSelector } from '../../hooks/use_selector';
1011
import { inputsSelectors } from '../../store';
1112
import { inputsActions } from '../../store/actions';
1213
import { SetQuery, DeleteQuery } from './types';
1314

1415
export const useGlobalTime = (clearAllQuery: boolean = true) => {
1516
const dispatch = useDispatch();
16-
const { from, to } = useSelector(inputsSelectors.globalTimeRangeSelector);
17+
const { from, to } = useShallowEqualSelector(inputsSelectors.globalTimeRangeSelector);
1718
const [isInitializing, setIsInitializing] = useState(true);
1819

1920
const setQuery = useCallback(
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License;
4+
* you may not use this file except in compliance with the Elastic License.
5+
*/
6+
7+
import { shallowEqual, useSelector } from 'react-redux';
8+
import deepEqual from 'fast-deep-equal';
9+
import { State } from '../store';
10+
11+
export type TypedUseSelectorHook = <TSelected, TState = State>(
12+
selector: (state: TState) => TSelected,
13+
equalityFn?: (left: TSelected, right: TSelected) => boolean
14+
) => TSelected;
15+
16+
export const useShallowEqualSelector: TypedUseSelectorHook = (selector) =>
17+
useSelector(selector, shallowEqual);
18+
19+
export const useDeepEqualSelector: TypedUseSelectorHook = (selector) =>
20+
useSelector(selector, deepEqual);

x-pack/plugins/security_solution/public/hosts/containers/authentications/index.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
import { noop } from 'lodash/fp';
88
import { useCallback, useEffect, useRef, useState } from 'react';
9-
import { shallowEqual, useSelector } from 'react-redux';
109
import deepEqual from 'fast-deep-equal';
1110

1211
import {
@@ -26,7 +25,8 @@ import {
2625
} from '../../../../common/search_strategy';
2726
import { ESTermQuery } from '../../../../common/typed_json';
2827

29-
import { inputsModel, State } from '../../../common/store';
28+
import { useShallowEqualSelector } from '../../../common/hooks/use_selector';
29+
import { inputsModel } from '../../../common/store';
3030
import { createFilter } from '../../../common/containers/helpers';
3131
import { generateTablePaginationOptions } from '../../../common/components/paginated_table/helpers';
3232
import { useKibana } from '../../../common/lib/kibana';
@@ -71,9 +71,8 @@ export const useAuthentications = ({
7171
skip,
7272
}: UseAuthentications): [boolean, AuthenticationArgs] => {
7373
const getAuthenticationsSelector = hostsSelectors.authenticationsSelector();
74-
const { activePage, limit } = useSelector(
75-
(state: State) => getAuthenticationsSelector(state, type),
76-
shallowEqual
74+
const { activePage, limit } = useShallowEqualSelector((state) =>
75+
getAuthenticationsSelector(state, type)
7776
);
7877
const { data, notifications } = useKibana().services;
7978
const refetch = useRef<inputsModel.Refetch>(noop);

x-pack/plugins/security_solution/public/hosts/containers/hosts/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
import deepEqual from 'fast-deep-equal';
88
import { noop } from 'lodash/fp';
99
import { useCallback, useEffect, useRef, useState } from 'react';
10-
import { useSelector } from 'react-redux';
1110

1211
import { inputsModel, State } from '../../../common/store';
1312
import { createFilter } from '../../../common/containers/helpers';
1413
import { useKibana } from '../../../common/lib/kibana';
14+
import { useShallowEqualSelector } from '../../../common/hooks/use_selector';
1515
import { hostsModel, hostsSelectors } from '../../store';
1616
import { generateTablePaginationOptions } from '../../../common/components/paginated_table/helpers';
1717
import {
@@ -69,7 +69,7 @@ export const useAllHost = ({
6969
type,
7070
}: UseAllHost): [boolean, HostsArgs] => {
7171
const getHostsSelector = hostsSelectors.hostsSelector();
72-
const { activePage, direction, limit, sortField } = useSelector((state: State) =>
72+
const { activePage, direction, limit, sortField } = useShallowEqualSelector((state: State) =>
7373
getHostsSelector(state, type)
7474
);
7575
const { data, notifications } = useKibana().services;

x-pack/plugins/security_solution/public/network/components/network_dns_table/index.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66

77
import React, { useCallback, useMemo } from 'react';
8-
import { useDispatch, useSelector, shallowEqual } from 'react-redux';
8+
import { useDispatch } from 'react-redux';
99
import deepEqual from 'fast-deep-equal';
1010

1111
import { networkActions, networkModel, networkSelectors } from '../../store';
@@ -16,6 +16,7 @@ import {
1616
NetworkDnsFields,
1717
} from '../../../../common/search_strategy';
1818
import { Criteria, ItemsPerRow, PaginatedTable } from '../../../common/components/paginated_table';
19+
import { useShallowEqualSelector } from '../../../common/hooks/use_selector';
1920

2021
import { getNetworkDnsColumns } from './columns';
2122
import { IsPtrIncluded } from './is_ptr_included';
@@ -59,10 +60,7 @@ const NetworkDnsTableComponent: React.FC<NetworkDnsTableProps> = ({
5960
}) => {
6061
const dispatch = useDispatch();
6162
const getNetworkDnsSelector = networkSelectors.dnsSelector();
62-
const { activePage, isPtrIncluded, limit, sort } = useSelector(
63-
getNetworkDnsSelector,
64-
shallowEqual
65-
);
63+
const { activePage, isPtrIncluded, limit, sort } = useShallowEqualSelector(getNetworkDnsSelector);
6664
const updateLimitPagination = useCallback(
6765
(newLimit) =>
6866
dispatch(

x-pack/plugins/security_solution/public/network/components/network_http_table/index.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
*/
66

77
import React, { useCallback, useMemo } from 'react';
8-
import { useDispatch, useSelector, shallowEqual } from 'react-redux';
8+
import { useDispatch } from 'react-redux';
99

1010
import { networkActions, networkModel, networkSelectors } from '../../store';
1111
import { NetworkHttpEdges, NetworkHttpFields } from '../../../../common/search_strategy';
12-
import { State } from '../../../common/store';
12+
import { useShallowEqualSelector } from '../../../common/hooks/use_selector';
1313
import { Criteria, ItemsPerRow, PaginatedTable } from '../../../common/components/paginated_table';
1414

1515
import { getNetworkHttpColumns } from './columns';
@@ -51,9 +51,8 @@ const NetworkHttpTableComponent: React.FC<NetworkHttpTableProps> = ({
5151
}) => {
5252
const dispatch = useDispatch();
5353
const getNetworkHttpSelector = networkSelectors.httpSelector();
54-
const { activePage, limit, sort } = useSelector(
55-
(state: State) => getNetworkHttpSelector(state, type),
56-
shallowEqual
54+
const { activePage, limit, sort } = useShallowEqualSelector((state) =>
55+
getNetworkHttpSelector(state, type)
5756
);
5857
const tableType =
5958
type === networkModel.NetworkType.page

0 commit comments

Comments
 (0)