Skip to content

Commit 70e89b3

Browse files
authored
[7.14] [Security Solution] Timeline uses existing filter manager (#111732) (#112148)
* [Security Solution] Timeline uses existing filter manager (#111732) * use existing filterManager * remove unused default value * unit test * fix type Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> # Conflicts: # x-pack/plugins/security_solution/public/common/components/hover_actions/use_hover_action_items.tsx * lint error
1 parent 95aa939 commit 70e89b3

File tree

4 files changed

+40
-6
lines changed

4 files changed

+40
-6
lines changed

x-pack/plugins/security_solution/public/common/components/drag_and_drop/draggable_wrapper_hover_content.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import { useSourcererScope } from '../../containers/sourcerer';
3434
import { timelineSelectors } from '../../../timelines/store/timeline';
3535
import { stopPropagationAndPreventDefault } from '../../../../../timelines/public';
3636
import { TooltipWithKeyboardShortcut } from '../accessibility';
37+
import { FilterManager } from '../../../../../../../src/plugins/data/public';
3738

3839
export const AdditionalContent = styled.div`
3940
padding: 2px;
@@ -104,7 +105,7 @@ const DraggableWrapperHoverContentComponent: React.FC<Props> = ({
104105
value,
105106
}) => {
106107
const kibana = useKibana();
107-
const { timelines } = kibana.services;
108+
const { timelines, uiSettings } = kibana.services;
108109
const { startDragToTimeline } = timelines.getUseAddToTimeline()({
109110
draggableId,
110111
fieldName: field,
@@ -120,8 +121,11 @@ const DraggableWrapperHoverContentComponent: React.FC<Props> = ({
120121
const panelRef = useRef<HTMLDivElement | null>(null);
121122

122123
const filterManager = useMemo(
123-
() => (timelineId === TimelineId.active ? activeFilterMananager : filterManagerBackup),
124-
[timelineId, activeFilterMananager, filterManagerBackup]
124+
() =>
125+
timelineId === TimelineId.active
126+
? activeFilterMananager ?? new FilterManager(uiSettings)
127+
: filterManagerBackup,
128+
[uiSettings, timelineId, activeFilterMananager, filterManagerBackup]
125129
);
126130

127131
// Regarding data from useManageTimeline:

x-pack/plugins/security_solution/public/timelines/components/timeline/query_tab_content/index.tsx

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
EuiBadge,
1515
} from '@elastic/eui';
1616
import { isEmpty } from 'lodash/fp';
17-
import React, { useState, useMemo, useEffect, useCallback } from 'react';
17+
import React, { useMemo, useEffect, useCallback } from 'react';
1818
import styled from 'styled-components';
1919
import { Dispatch } from 'redux';
2020
import { connect, ConnectedProps, useDispatch } from 'react-redux';
@@ -60,6 +60,7 @@ import { activeTimeline } from '../../../containers/active_timeline_context';
6060
import { DetailsPanel } from '../../side_panel';
6161
import { ExitFullScreen } from '../../../../common/components/exit_full_screen';
6262
import { defaultControlColumn } from '../body/control_columns';
63+
import { useDeepEqualSelector } from '../../../../common/hooks/use_selector';
6364

6465
const TimelineHeaderContainer = styled.div`
6566
margin-top: 6px;
@@ -193,7 +194,17 @@ export const QueryTabContentComponent: React.FC<Props> = ({
193194
} = useSourcererScope(SourcererScopeName.timeline);
194195

195196
const { uiSettings } = useKibana().services;
196-
const [filterManager] = useState<FilterManager>(new FilterManager(uiSettings));
197+
198+
const getManageTimeline = useMemo(() => timelineSelectors.getManageTimelineById(), []);
199+
const { filterManager: activeFilterManager } = useDeepEqualSelector((state) =>
200+
getManageTimeline(state, timelineId ?? '')
201+
);
202+
203+
const filterManager = useMemo(() => activeFilterManager ?? new FilterManager(uiSettings), [
204+
activeFilterManager,
205+
uiSettings,
206+
]);
207+
197208
const esQueryConfig = useMemo(() => esQuery.getEsQueryConfig(uiSettings), [uiSettings]);
198209
const kqlQuery: {
199210
query: string;
@@ -258,7 +269,7 @@ export const QueryTabContentComponent: React.FC<Props> = ({
258269
id: timelineId,
259270
})
260271
);
261-
}, [filterManager, timelineId, dispatch]);
272+
}, [activeFilterManager, dispatch, filterManager, timelineId, uiSettings]);
262273

263274
const [
264275
isQueryLoading,

x-pack/plugins/security_solution/public/timelines/store/timeline/helpers.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ export const addTimelineToStore = ({
156156
...timelineById,
157157
[id]: {
158158
...timeline,
159+
filterManager: timelineById[id].filterManager,
159160
isLoading: timelineById[id].isLoading,
160161
initialized: timelineById[id].initialized,
161162
dateRange:

x-pack/plugins/security_solution/public/timelines/store/timeline/reducer.test.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import { TimelineModel } from './model';
5252
import { timelineDefaults } from './defaults';
5353
import { TimelineById } from './types';
5454
import { Direction } from '../../../../common/search_strategy';
55+
import { FilterManager } from '../../../../../../../src/plugins/data/public';
5556

5657
jest.mock('../../../common/components/url_state/normalize_time_range.ts');
5758
jest.mock('../../../common/utils/default_date_settings', () => {
@@ -63,6 +64,8 @@ jest.mock('../../../common/utils/default_date_settings', () => {
6364
};
6465
});
6566

67+
const mockFilterManager = {} as FilterManager;
68+
6669
const basicDataProvider: DataProvider = {
6770
and: [],
6871
id: '123',
@@ -95,6 +98,7 @@ const basicTimeline: TimelineModel = {
9598
eventIdToNoteIds: {},
9699
excludedRowRendererIds: [],
97100
expandedDetail: {},
101+
filterManager: mockFilterManager,
98102
highlightedDropAndProviderId: '',
99103
historyIds: [],
100104
id: 'foo',
@@ -190,6 +194,20 @@ describe('Timeline', () => {
190194
},
191195
});
192196
});
197+
198+
test('should contain existing filterManager', () => {
199+
const update = addTimelineToStore({
200+
id: 'foo',
201+
timeline: {
202+
...basicTimeline,
203+
status: TimelineStatus.immutable,
204+
timelineType: TimelineType.template,
205+
},
206+
timelineById: timelineByIdMock,
207+
});
208+
209+
expect(update.foo.filterManager).toEqual(mockFilterManager);
210+
});
193211
});
194212

195213
describe('#addNewTimeline', () => {

0 commit comments

Comments
 (0)