Skip to content

Commit c1120d9

Browse files
[Discover 2.0] fixes add filter and dismissible callout (#5029) (#5033)
* fixes add filter and dismissible callout * fixes filters applying when loading a saved search --------- (cherry picked from commit b9b2b79) Signed-off-by: Ashwin P Chandran <[email protected]> Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent e475830 commit c1120d9

File tree

7 files changed

+87
-26
lines changed

7 files changed

+87
-26
lines changed

src/plugins/discover/public/application/view_components/canvas/discover_chart_container.tsx

+16-16
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,22 @@ export const DiscoverChartContainer = ({ hits, bucketInterval, chartData }: Sear
2020
indexPattern,
2121
]);
2222

23+
if (!hits || !chartData || !bucketInterval) return null;
24+
2325
return (
24-
hits && (
25-
<DiscoverChart
26-
bucketInterval={bucketInterval}
27-
chartData={chartData}
28-
config={uiSettings}
29-
data={data}
30-
hits={hits}
31-
resetQuery={() => {
32-
window.location.href = `#/view/${savedSearch?.id}`;
33-
window.location.reload();
34-
}}
35-
services={services}
36-
showResetButton={!!savedSearch && !!savedSearch.id}
37-
isTimeBased={isTimeBased}
38-
/>
39-
)
26+
<DiscoverChart
27+
bucketInterval={bucketInterval}
28+
chartData={chartData}
29+
config={uiSettings}
30+
data={data}
31+
hits={hits}
32+
resetQuery={() => {
33+
window.location.href = `#/view/${savedSearch?.id}`;
34+
window.location.reload();
35+
}}
36+
services={services}
37+
showResetButton={!!savedSearch && !!savedSearch.id}
38+
isTimeBased={isTimeBased}
39+
/>
4040
);
4141
};

src/plugins/discover/public/application/view_components/canvas/discover_table.tsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,15 @@ export const DiscoverTable = ({ history }: Props) => {
5151
refetch$.next();
5252
};
5353
const onAddFilter = useCallback(
54-
(field: IndexPatternField, values: string, operation: '+' | '-') => {
54+
(field: string | IndexPatternField, values: string, operation: '+' | '-') => {
55+
if (!indexPattern) return;
56+
5557
const newFilters = opensearchFilters.generateFilters(
5658
filterManager,
5759
field,
5860
values,
5961
operation,
60-
indexPattern.id
62+
indexPattern.id ?? ''
6163
);
6264
return filterManager.addFilters(newFilters);
6365
},

src/plugins/discover/public/application/view_components/canvas/index.tsx

+9-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import { useOpenSearchDashboards } from '../../../../../opensearch_dashboards_re
2020
import { filterColumns } from '../utils/filter_columns';
2121
import { DEFAULT_COLUMNS_SETTING } from '../../../../common';
2222

23+
const KEY_SHOW_NOTICE = 'discover:deprecation-notice:show';
24+
2325
// eslint-disable-next-line import/no-default-export
2426
export default function DiscoverCanvas({ setHeaderActionMenu, history }: ViewProps) {
2527
const { data$, refetch$, indexPattern } = useDiscoverContext();
@@ -41,8 +43,13 @@ export default function DiscoverCanvas({ setHeaderActionMenu, history }: ViewPro
4143
bucketInterval: {},
4244
});
4345

44-
const [isCallOutVisible, setIsCallOutVisible] = useState(true);
45-
const closeCallOut = () => setIsCallOutVisible(false);
46+
const [isCallOutVisible, setIsCallOutVisible] = useState(
47+
localStorage.getItem(KEY_SHOW_NOTICE) !== 'false'
48+
);
49+
const closeCallOut = () => {
50+
localStorage.setItem(KEY_SHOW_NOTICE, 'false');
51+
setIsCallOutVisible(false);
52+
};
4653

4754
let callOut;
4855

src/plugins/discover/public/application/view_components/panel/index.tsx

+27-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
import React, { useEffect, useState } from 'react';
6+
import React, { useCallback, useEffect, useState } from 'react';
77
import { ViewProps } from '../../../../../data_explorer/public';
88
import {
99
addColumn,
@@ -15,9 +15,18 @@ import {
1515
import { DiscoverSidebar } from '../../components/sidebar';
1616
import { useDiscoverContext } from '../context';
1717
import { ResultStatus, SearchData } from '../utils/use_search';
18+
import { IndexPatternField, opensearchFilters } from '../../../../../data/public';
19+
import { useOpenSearchDashboards } from '../../../../../opensearch_dashboards_react/public';
20+
import { DiscoverViewServices } from '../../../build_services';
1821

1922
// eslint-disable-next-line import/no-default-export
2023
export default function DiscoverPanel(props: ViewProps) {
24+
const { services } = useOpenSearchDashboards<DiscoverViewServices>();
25+
const {
26+
data: {
27+
query: { filterManager },
28+
},
29+
} = services;
2130
const { data$, indexPattern } = useDiscoverContext();
2231
const [fetchState, setFetchState] = useState<SearchData>(data$.getValue());
2332

@@ -36,6 +45,22 @@ export default function DiscoverPanel(props: ViewProps) {
3645
};
3746
}, [data$, fetchState]);
3847

48+
const onAddFilter = useCallback(
49+
(field: string | IndexPatternField, values: string, operation: '+' | '-') => {
50+
if (!indexPattern) return;
51+
52+
const newFilters = opensearchFilters.generateFilters(
53+
filterManager,
54+
field,
55+
values,
56+
operation,
57+
indexPattern.id ?? ''
58+
);
59+
return filterManager.addFilters(newFilters);
60+
},
61+
[filterManager, indexPattern]
62+
);
63+
3964
return (
4065
<DiscoverSidebar
4166
columns={columns || []}
@@ -61,7 +86,7 @@ export default function DiscoverPanel(props: ViewProps) {
6186
);
6287
}}
6388
selectedIndexPattern={indexPattern}
64-
onAddFilter={() => {}}
89+
onAddFilter={onAddFilter}
6590
/>
6691
);
6792
}

src/plugins/discover/public/application/view_components/utils/filter_columns.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { IndexPattern } from '../../../opensearch_dashboards_services';
1616
*/
1717
export function filterColumns(
1818
columns: string[],
19-
indexPattern: IndexPattern,
19+
indexPattern: IndexPattern | undefined,
2020
defaultColumns: string[]
2121
) {
2222
const fieldsName = indexPattern?.fields.getAll().map((fld) => fld.name) || [];

src/plugins/discover/public/application/view_components/utils/use_search.ts

+21-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { BehaviorSubject, Subject, merge } from 'rxjs';
88
import { debounceTime } from 'rxjs/operators';
99
import { i18n } from '@osd/i18n';
1010
import { useEffect } from 'react';
11+
import { cloneDeep } from 'lodash';
1112
import { RequestAdapter } from '../../../../../inspector/public';
1213
import { DiscoverServices } from '../../../build_services';
1314
import { search } from '../../../../../data/public';
@@ -30,7 +31,6 @@ import {
3031
getResponseInspectorStats,
3132
} from '../../../opensearch_dashboards_services';
3233
import { SEARCH_ON_PAGE_LOAD_SETTING } from '../../../../common';
33-
import { SortOrder } from '../../../saved_searches/types';
3434

3535
export enum ResultStatus {
3636
UNINITIALIZED = 'uninitialized',
@@ -253,9 +253,29 @@ export const useSearch = (services: DiscoverServices) => {
253253
(async () => {
254254
const savedSearchInstance = await getSavedSearchById(savedSearchId || '');
255255
setSavedSearch(savedSearchInstance);
256+
257+
// sync initial app filters from savedObject to filterManager
258+
const filters = cloneDeep(savedSearchInstance.searchSource.getOwnField('filter'));
259+
const query =
260+
savedSearchInstance.searchSource.getField('query') ||
261+
data.query.queryString.getDefaultQuery();
262+
const actualFilters = [];
263+
264+
if (filters !== undefined) {
265+
const result = typeof filters === 'function' ? filters() : filters;
266+
if (result !== undefined) {
267+
actualFilters.push(...(Array.isArray(result) ? result : [result]));
268+
}
269+
}
270+
271+
filterManager.setAppFilters(actualFilters);
272+
data.query.queryString.setQuery(query);
256273
})();
257274

258275
return () => {};
276+
// This effect will only run when getSavedSearchById is called, which is
277+
// only called when the component is first mounted.
278+
// eslint-disable-next-line react-hooks/exhaustive-deps
259279
}, [getSavedSearchById, savedSearchId]);
260280

261281
return {

src/plugins/discover_legacy/public/application/components/discover_legacy.tsx

+9-2
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ export interface DiscoverLegacyProps {
101101
vis?: Vis;
102102
}
103103

104+
const KEY_SHOW_NOTICE = 'discover:deprecation-notice:show';
105+
104106
export function DiscoverLegacy({
105107
addColumn,
106108
fetch,
@@ -132,7 +134,9 @@ export function DiscoverLegacy({
132134
vis,
133135
}: DiscoverLegacyProps) {
134136
const [isSidebarClosed, setIsSidebarClosed] = useState(false);
135-
const [isCallOutVisible, setIsCallOutVisible] = useState(true);
137+
const [isCallOutVisible, setIsCallOutVisible] = useState(
138+
localStorage.getItem(KEY_SHOW_NOTICE) !== 'false'
139+
);
136140
const { TopNavMenu } = getServices().navigation.ui;
137141
const { savedSearch, indexPatternList } = opts;
138142
const bucketAggConfig = vis?.data?.aggs?.aggs[1];
@@ -142,7 +146,10 @@ export function DiscoverLegacy({
142146
: undefined;
143147
const [fixedScrollEl, setFixedScrollEl] = useState<HTMLElement | undefined>();
144148

145-
const closeCallOut = () => setIsCallOutVisible(false);
149+
const closeCallOut = () => {
150+
localStorage.setItem(KEY_SHOW_NOTICE, 'false');
151+
setIsCallOutVisible(false);
152+
};
146153

147154
let callOut;
148155

0 commit comments

Comments
 (0)