Skip to content

Commit e20149e

Browse files
ananzhMiki
authored andcommitted
Fix No data selected appearance (opensearch-project#8668)
Also: * Fix some React errors Signed-off-by: Miki <[email protected]> --------- Fix random big number during loading in query editor result (opensearch-project#8650) * Fix random big number during loading in query editor result Signed-off-by: abbyhu2000 <[email protected]> * Changeset file for PR opensearch-project#8650 created/updated * Fix initial loading number Signed-off-by: abbyhu2000 <[email protected]> (cherry picked from commit a7414f0) --------- [bug] address different issues with dataset selector (opensearch-project#8665) * [bug] address some issues with dataset selector Moved the dataset selector back to the search bar and access it by ref in the sidebar. Avoid out of sync issue. * update the logic for ensuring index pattern * dont add ability to open button * empty state but missing data set selector button * fix tests * add back styling Signed-off-by: Kawika Avilla <[email protected]> (cherry picked from commit e23f332) --------- [bug] Discover UI stuck on searching after deleting index pattern (opensearch-project#8659) * [bug] Discover UI stuck on searching after deleting index pattern When using Discover with query enhancement enabled, deleting an index pattern from Index Management does not properly update the "Recently selected data" list in Discover. This causes the UI to become stuck in a "Searching" state when attempting to use Discover after deleting an index pattern. Handle the error case where the use index patterns hook caught error when enhancements was enabled. issue resolved: opensearch-project#8612 (cherry picked from commit 4808094) --------- [Discover]Sample Queries and Saved Queries in No Results Page (opensearch-project#8616) * Sample Queries and Saved Queries in No Results Page Signed-off-by: Sean Li <[email protected]> Signed-off-by: Miki <[email protected]> * Changeset file for PR opensearch-project#8616 created/updated * Update styling Signed-off-by: Miki <[email protected]> (cherry picked from commit 9da1b77) --------- Improve Empty State Handling: Add No Index Patterns Panel with Data Selection in Discover View (opensearch-project#8613) * Improve Empty State Handling: Add No Index Patterns Panel with Data Selection in Discover View This PR primarily addresses the scenario when no index patterns (general) is available in the Discover view. Instead of redirecting users to the index management page, it introduces a new "No Index Patterns" panel. This panel provides users with the option to open a data selector and add index patterns directly from the Discover view, improving the user experience for new or empty deployments. To achieve, we move the selectedDataset state from ConnectedDatasetSelector to the app container's state management. This allows the AdvancedSelector, opened from the AppContainer, to update the dataset state effectively. Key changes include: * Implementing NoIndexPatternsPanel and AdvancedSelector components. * Refactoring dataset state management in AppContainer and Sidebar. * Modifying DiscoverCanvas to conditionally render NoIndexPatternsPanel. * Updating ConnectedDatasetSelector to use shared state and dataset change handling. * Update design of no data selected * use i18n * fix comments * Update design of no data selected * fix lint error Signed-off-by: Anan Zhuang <[email protected]> (cherry picked from commit 6659139) --------- Update Discover appearance (opensearch-project#8651) * Update Discover appearance Signed-off-by: Miki <[email protected]> (cherry picked from commit 17103ba) --------- Move DatasetSelector from data plugin queryString comp to DataExplorer (opensearch-project#8598) * Move DatasetSelector to DataExplorer * Style Disover after moving DatasetSelector to DataExplorer * fix the test by adding the getUpdates$ method to the mock queryString object Signed-off-by: Anan Zhuang <[email protected]> (cherry picked from commit 923cce8)
1 parent bde23d9 commit e20149e

File tree

28 files changed

+302
-303
lines changed

28 files changed

+302
-303
lines changed

changelogs/fragments/8650.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
fix:
2+
- Fix random big number when loading in query result ([#8650](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/8650))

src/plugins/data/common/index_patterns/index_patterns/ensure_default_index_pattern.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,7 @@ import { includes } from 'lodash';
3232
import { IndexPatternsContract } from './index_patterns';
3333
import { UiSettingsCommon } from '../types';
3434

35-
export type EnsureDefaultIndexPattern = (
36-
shouldRedirect?: boolean
37-
) => Promise<unknown | void> | undefined;
35+
export type EnsureDefaultIndexPattern = () => Promise<unknown | void> | undefined;
3836

3937
export const createEnsureDefaultIndexPattern = (
4038
uiSettings: UiSettingsCommon,
@@ -44,10 +42,7 @@ export const createEnsureDefaultIndexPattern = (
4442
* Checks whether a default index pattern is set and exists and defines
4543
* one otherwise.
4644
*/
47-
return async function ensureDefaultIndexPattern(
48-
this: IndexPatternsContract,
49-
shouldRedirect: boolean = true
50-
) {
45+
return async function ensureDefaultIndexPattern(this: IndexPatternsContract) {
5146
const patterns = await this.getIds();
5247
let defaultId = await uiSettings.get('defaultIndex');
5348
let defined = !!defaultId;
@@ -67,6 +62,8 @@ export const createEnsureDefaultIndexPattern = (
6762
defaultId = patterns[0];
6863
await uiSettings.set('defaultIndex', defaultId);
6964
} else {
65+
const isEnhancementsEnabled = await uiSettings.get('query:enhancements:enabled');
66+
const shouldRedirect = !isEnhancementsEnabled;
7067
if (shouldRedirect) return onRedirectNoIndexPattern();
7168
else return;
7269
}

src/plugins/data/public/query/query_string/language_service/lib/dql_language.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ export const getDQLLanguageConfig = (
2424
visualizable: true,
2525
},
2626
showDocLinks: true,
27+
docLink: {
28+
title: i18n.translate('data.dqlLanguage.docLink', {
29+
defaultMessage: 'DQL documentation',
30+
}),
31+
url: 'https://opensearch.org/docs/latest/query-dsl/full-text/query-string/',
32+
},
2733
editorSupportedAppNames: ['discover'],
2834
supportedAppNames: ['discover', 'dashboards', 'visualize', 'data-explorer', 'vis-builder', '*'],
2935
sampleQueries: [

src/plugins/data/public/query/query_string/language_service/lib/lucene_language.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ export const getLuceneLanguageConfig = (
2424
visualizable: true,
2525
},
2626
showDocLinks: true,
27+
docLink: {
28+
title: i18n.translate('data.luceneLanguage.docLink', {
29+
defaultMessage: 'Lucene documentation',
30+
}),
31+
url: 'https://opensearch.org/docs/latest/query-dsl/full-text/query-string/',
32+
},
2733
editorSupportedAppNames: ['discover'],
2834
supportedAppNames: ['discover', 'dashboards', 'visualize', 'data-explorer', 'vis-builder', '*'],
2935
sampleQueries: [

src/plugins/data/public/query/query_string/language_service/lib/query_result.tsx

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -41,40 +41,42 @@ export function QueryResult(props: { queryStatus: QueryStatus }) {
4141
setPopover(!isPopoverOpen);
4242
};
4343

44-
const updateElapsedTime = () => {
45-
const time = Date.now() - (props.queryStatus.startTime || 0);
46-
if (time > BUFFER_TIME) {
47-
setElapsedTime(time);
48-
} else {
49-
setElapsedTime(0);
50-
}
51-
};
52-
5344
useEffect(() => {
45+
const updateElapsedTime = () => {
46+
const currentTime = Date.now();
47+
if (!props.queryStatus.startTime) {
48+
return;
49+
}
50+
const elapsed = currentTime - props.queryStatus.startTime;
51+
setElapsedTime(elapsed);
52+
};
53+
5454
const interval = setInterval(updateElapsedTime, 1000);
5555

56-
return () => clearInterval(interval);
57-
});
56+
return () => {
57+
clearInterval(interval);
58+
setElapsedTime(0);
59+
};
60+
}, [props.queryStatus.startTime]);
5861

59-
if (props.queryStatus.status === ResultStatus.LOADING) {
60-
if (elapsedTime < BUFFER_TIME) {
61-
return null;
62+
if (elapsedTime > BUFFER_TIME) {
63+
if (props.queryStatus.status === ResultStatus.LOADING) {
64+
const time = Math.floor(elapsedTime / 1000);
65+
return (
66+
<EuiButtonEmpty
67+
color="text"
68+
size="xs"
69+
onClick={() => {}}
70+
isLoading
71+
data-test-subj="queryResultLoading"
72+
>
73+
{i18n.translate('data.query.languageService.queryResults.loadTime', {
74+
defaultMessage: 'Loading {time} s',
75+
values: { time },
76+
})}
77+
</EuiButtonEmpty>
78+
);
6279
}
63-
const time = Math.floor(elapsedTime / 1000);
64-
return (
65-
<EuiButtonEmpty
66-
color="text"
67-
size="xs"
68-
onClick={() => {}}
69-
isLoading
70-
data-test-subj="queryResultLoading"
71-
>
72-
{i18n.translate('data.query.languageService.queryResults.loadTime', {
73-
defaultMessage: 'Loading {time} s',
74-
values: { time },
75-
})}
76-
</EuiButtonEmpty>
77-
);
7880
}
7981

8082
if (props.queryStatus.status === ResultStatus.READY) {
@@ -85,7 +87,7 @@ export function QueryResult(props: { queryStatus: QueryStatus }) {
8587
});
8688
} else if (props.queryStatus.elapsedMs < 1000) {
8789
message = i18n.translate(
88-
'data.query.languageService.queryResults.completeTimeInMiliseconds',
90+
'data.query.languageService.queryResults.completeTimeInMilliseconds',
8991
{
9092
defaultMessage: 'Completed in {timeMS} ms',
9193
values: { timeMS: props.queryStatus.elapsedMs },

src/plugins/data/public/query/query_string/language_service/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ export interface LanguageConfig {
5555
visualizable?: boolean;
5656
};
5757
showDocLinks?: boolean;
58+
docLink?: {
59+
title: string;
60+
url: string;
61+
};
5862
editorSupportedAppNames?: string[];
5963
supportedAppNames?: string[];
6064
hideDatePicker?: boolean;

src/plugins/data/public/ui/dataset_selector/index.tsx

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
import { useCallback, useEffect } from 'react';
6+
import { useCallback, useState, useEffect } from 'react';
77
import React from 'react';
88
import { Dataset, Query, TimeRange } from '../../../common';
99
import {
@@ -12,62 +12,59 @@ import {
1212
DatasetSelectorUsingButtonProps,
1313
DatasetSelectorAppearance,
1414
} from './dataset_selector';
15-
import { AdvancedSelector } from './advanced_selector';
15+
import { useOpenSearchDashboards } from '../../../../opensearch_dashboards_react/public';
16+
import { IDataPluginServices } from '../../types';
1617

1718
interface ConnectedDatasetSelectorProps {
1819
onSubmit: ((query: Query, dateRange?: TimeRange | undefined) => void) | undefined;
19-
selectedDataset?: Dataset;
20-
setSelectedDataset: (data: Dataset | undefined) => void;
21-
setIndexPattern: (id: string | undefined) => void;
22-
services?: any;
2320
}
2421

2522
const ConnectedDatasetSelector = ({
2623
onSubmit,
27-
selectedDataset,
28-
setSelectedDataset,
29-
setIndexPattern,
30-
services,
3124
...datasetSelectorProps
3225
}: ConnectedDatasetSelectorProps &
3326
(DatasetSelectorUsingButtonProps | DatasetSelectorUsingButtonEmptyProps)) => {
27+
const { services } = useOpenSearchDashboards<IDataPluginServices>();
3428
const queryString = services.data.query.queryString;
29+
const [selectedDataset, setSelectedDataset] = useState<Dataset | undefined>(
30+
() => queryString.getQuery().dataset || queryString.getDefaultQuery().dataset
31+
);
3532

3633
useEffect(() => {
3734
const subscription = queryString.getUpdates$().subscribe((query) => {
3835
setSelectedDataset(query.dataset);
39-
setIndexPattern(query.dataset?.id);
4036
});
4137

4238
return () => {
4339
subscription.unsubscribe();
4440
};
45-
}, [queryString, setSelectedDataset, setIndexPattern]);
41+
}, [queryString]);
4642

4743
const handleDatasetChange = useCallback(
4844
(dataset?: Dataset) => {
4945
setSelectedDataset(dataset);
50-
setIndexPattern(dataset?.id);
5146
if (dataset) {
5247
const query = queryString.getInitialQueryByDataset(dataset);
5348
queryString.setQuery(query);
5449
onSubmit!(queryString.getQuery());
5550
queryString.getDatasetService().addRecentDataset(dataset);
5651
}
5752
},
58-
[onSubmit, queryString, setSelectedDataset, setIndexPattern]
53+
[onSubmit, queryString]
5954
);
6055

6156
return (
6257
<DatasetSelector
6358
{...datasetSelectorProps}
6459
selectedDataset={selectedDataset}
65-
setSelectedDataset={setSelectedDataset}
66-
setIndexPattern={setIndexPattern}
67-
handleDatasetChange={handleDatasetChange}
60+
setSelectedDataset={handleDatasetChange}
6861
services={services}
6962
/>
7063
);
7164
};
7265

73-
export { ConnectedDatasetSelector as DatasetSelector, AdvancedSelector, DatasetSelectorAppearance };
66+
export {
67+
ConnectedDatasetSelector as DatasetSelector,
68+
ConnectedDatasetSelectorProps as DatasetSelectorProps,
69+
DatasetSelectorAppearance,
70+
};

src/plugins/data/public/ui/filter_bar/filter_options.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,7 @@ const FilterOptionsUI = (props: Props) => {
8888
const uiSettings = opensearchDashboards.services.uiSettings;
8989
const isPinned = uiSettings!.get(UI_SETTINGS.FILTERS_PINNED_BY_DEFAULT);
9090
const useNewHeader = Boolean(uiSettings!.get(UI_SETTINGS.NEW_HOME_PAGE));
91-
const [indexPattern] = props.indexPatterns;
92-
const index = indexPattern && indexPattern.id;
91+
const index = Array.isArray(props.indexPatterns) ? props.indexPatterns[0]?.id : undefined;
9392
const newFilter = buildEmptyFilter(isPinned, index);
9493

9594
const togglePopover = () => {

src/plugins/data/public/ui/index.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
* under the License.
2929
*/
3030

31-
export { UiEnhancements, IUiStart, IUiSetup } from './types';
31+
export { IUiStart, IUiSetup } from './types';
3232
export { IndexPatternSelectProps } from './index_pattern_select';
3333
export { FilterLabel } from './filter_bar';
3434
export { QueryStringInput, QueryStringInputProps } from './query_string_input';
@@ -51,5 +51,4 @@ export {
5151
useQueryStringManager,
5252
} from './search_bar';
5353
export { SuggestionsComponent } from './typeahead';
54-
export { DatasetSelector, AdvancedSelector, DatasetSelectorAppearance } from './dataset_selector';
55-
export { NoIndexPatternsPanel } from './no_index_patterns';
54+
export { DatasetSelector, DatasetSelectorAppearance } from './dataset_selector';

src/plugins/data/public/ui/query_editor/__snapshots__/language_selector.test.tsx.snap

Lines changed: 0 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)