Skip to content

Commit ace1ca2

Browse files
[Explore] Update recent queries and saved queries dropdown styling (#10882)
* allow for changeable classname on recent queries Signed-off-by: Paul Sebastian <[email protected]> * Changeset file for PR #10882 created/updated * put patterns tab in experimental Signed-off-by: Paul Sebastian <[email protected]> * update saved queries dropdown padding Signed-off-by: Paul Sebastian <[email protected]> * Changeset file for PR #10882 created/updated * remove unnecessary comment Signed-off-by: Paul Sebastian <[email protected]> --------- Signed-off-by: Paul Sebastian <[email protected]> Co-authored-by: opensearch-changeset-bot[bot] <154024398+opensearch-changeset-bot[bot]@users.noreply.github.com>
1 parent fc8b101 commit ace1ca2

File tree

8 files changed

+110
-81
lines changed

8 files changed

+110
-81
lines changed

changelogs/fragments/10882.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
fix:
2+
- Recent queries and saved queries dropdown styling ([#10882](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/10882))

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export function RecentQueriesTable({
1616
queryString,
1717
onClickRecentQuery,
1818
isVisible,
19+
className,
1920
}: RecentQueriesTableProps) {
2021
const currentLanguage = queryString.getQuery().language;
2122
const [recentQueries, setRecentQueries] = useState<RecentQueryItem[]>(
@@ -95,7 +96,7 @@ export function RecentQueriesTable({
9596
columns={tableColumns}
9697
rowProps={getRowProps}
9798
cellProps={getCellProps}
98-
className="recentQuery__table"
99+
className={className || 'recentQuery__table'}
99100
data-test-subj="recentQueryTable"
100101
tableLayout="fixed"
101102
compressed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export interface RecentQueriesTableProps {
3131
queryString: QueryStringContract;
3232
onClickRecentQuery: (query: Query, timeRange?: TimeRange) => void;
3333
isVisible: boolean;
34+
className?: string;
3435
}
3536

3637
export interface EditorEnhancements {

src/plugins/data/public/ui/saved_query_management/saved_query_management_component.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,10 @@ export function SavedQueryManagementComponent({
223223
className="osdSavedQueryManagement__popover"
224224
data-test-subj="saved-query-management-popover"
225225
>
226-
<EuiListGroup>
227-
<div>
226+
<EuiListGroup className="osdSavedQueryManagement__newUIList">
227+
<div className="osdSavedQueryManagement__newUIItem">
228228
<EuiButtonEmpty
229+
className="osdSavedQueryManagement__newUIButton"
229230
data-test-subj="saved-query-management-save-button"
230231
disabled={saveQueryIsDisabled}
231232
iconType="save"
@@ -252,8 +253,9 @@ export function SavedQueryManagementComponent({
252253
</EuiText>
253254
</EuiButtonEmpty>
254255
</div>
255-
<div>
256+
<div className="osdSavedQueryManagement__newUIItem">
256257
<EuiButtonEmpty
258+
className="osdSavedQueryManagement__newUIButton"
257259
data-test-subj="saved-query-management-open-button"
258260
iconType="folderOpen"
259261
onClick={() => {

src/plugins/explore/public/application/register_tabs.ts

Lines changed: 80 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ export const registerBuiltInTabs = (
3838
services: ExploreServices,
3939
registryFlavor: ExploreFlavor
4040
) => {
41+
const isExperimentalEnabled = services.uiSettings.get(ENABLE_EXPERIMENTAL_SETTING, false);
42+
4143
// Register Logs Tab
4244
const logsTabDefinition: TabDefinition = {
4345
id: EXPLORE_LOGS_TAB_ID,
@@ -52,89 +54,91 @@ export const registerBuiltInTabs = (
5254
tabRegistry.registerTab(logsTabDefinition);
5355

5456
// Register Patterns Tab
55-
tabRegistry.registerTab({
56-
id: EXPLORE_PATTERNS_TAB_ID,
57-
label: 'Patterns',
58-
flavor: [ExploreFlavor.Logs, ExploreFlavor.Metrics],
59-
order: 15,
60-
supportedLanguages: [EXPLORE_DEFAULT_LANGUAGE],
57+
if (isExperimentalEnabled) {
58+
tabRegistry.registerTab({
59+
id: EXPLORE_PATTERNS_TAB_ID,
60+
label: 'Patterns',
61+
flavor: [ExploreFlavor.Logs, ExploreFlavor.Metrics],
62+
order: 15,
63+
supportedLanguages: [EXPLORE_DEFAULT_LANGUAGE],
6164

62-
prepareQuery: (query) => {
63-
const state = services.store.getState();
65+
prepareQuery: (query) => {
66+
const state = services.store.getState();
6467

65-
// Get the selected patterns field from the Redux state
66-
let patternsField = state.tab.patterns.patternsField;
68+
// Get the selected patterns field from the Redux state
69+
let patternsField = state.tab.patterns.patternsField;
6770

68-
const preparedQuery = getQueryWithSource(query);
69-
if (!patternsField) {
70-
try {
71-
patternsField = findDefaultPatternsField(services);
72-
} catch {
73-
return preparedQuery.query;
71+
const preparedQuery = getQueryWithSource(query);
72+
if (!patternsField) {
73+
try {
74+
patternsField = findDefaultPatternsField(services);
75+
} catch {
76+
return preparedQuery.query;
77+
}
7478
}
75-
}
7679

77-
if (state.tab.patterns.usingRegexPatterns)
78-
return regexPatternQuery(preparedQuery.query, patternsField);
79-
80-
return brainPatternQuery(preparedQuery.query, patternsField);
81-
},
82-
83-
handleQueryError: (error, cacheKey) => {
84-
const state = services.store.getState();
85-
86-
/**
87-
* The below conditional is checking for the error returned when attempting to use a BRAIN
88-
* query on an older version of the querying engine. If this error appears, an attempt is made
89-
* to switch over to a patterns query which works on older versions of the querying engine.
90-
* A redux state is set to inform the UI that this older query is being utilized
91-
* Finally, the query is retriggered.
92-
* The return value being true will prevent the standard error from dispatching, keeping the page clear
93-
*/
94-
if (
95-
error &&
96-
error.status &&
97-
error.status === 400 &&
98-
error.error.details &&
99-
error.error.details.startsWith(BRAIN_QUERY_OLD_ENGINE_ERROR_PREFIX)
100-
) {
101-
// can check further details of err if needed
102-
let patternsField = state.tab.patterns.patternsField;
103-
if (!patternsField) {
104-
patternsField = findDefaultPatternsField(services);
80+
if (state.tab.patterns.usingRegexPatterns)
81+
return regexPatternQuery(preparedQuery.query, patternsField);
82+
83+
return brainPatternQuery(preparedQuery.query, patternsField);
84+
},
85+
86+
handleQueryError: (error, cacheKey) => {
87+
const state = services.store.getState();
88+
89+
/**
90+
* The below conditional is checking for the error returned when attempting to use a BRAIN
91+
* query on an older version of the querying engine. If this error appears, an attempt is made
92+
* to switch over to a patterns query which works on older versions of the querying engine.
93+
* A redux state is set to inform the UI that this older query is being utilized
94+
* Finally, the query is retriggered.
95+
* The return value being true will prevent the standard error from dispatching, keeping the page clear
96+
*/
97+
if (
98+
error &&
99+
error.status &&
100+
error.status === 400 &&
101+
error.error.details &&
102+
error.error.details.startsWith(BRAIN_QUERY_OLD_ENGINE_ERROR_PREFIX)
103+
) {
104+
// can check further details of err if needed
105+
let patternsField = state.tab.patterns.patternsField;
106+
if (!patternsField) {
107+
patternsField = findDefaultPatternsField(services);
108+
}
109+
const query = state.query;
110+
const preparedQuery = getQueryWithSource(query);
111+
services.store.dispatch(setUsingRegexPatterns(true));
112+
services.store.dispatch(
113+
executeTabQuery({
114+
services,
115+
cacheKey: regexPatternQuery(preparedQuery.query, patternsField),
116+
queryString: query.query,
117+
})
118+
);
119+
120+
// set the old cacheKey to uninitialized to finalize loading, our new tab query has new cacheKey
121+
services.store.dispatch(
122+
setIndividualQueryStatus({
123+
cacheKey,
124+
status: {
125+
status: QueryExecutionStatus.UNINITIALIZED,
126+
startTime: undefined,
127+
elapsedMs: undefined,
128+
error: undefined,
129+
},
130+
})
131+
);
132+
133+
return true;
105134
}
106-
const query = state.query;
107-
const preparedQuery = getQueryWithSource(query);
108-
services.store.dispatch(setUsingRegexPatterns(true));
109-
services.store.dispatch(
110-
executeTabQuery({
111-
services,
112-
cacheKey: regexPatternQuery(preparedQuery.query, patternsField),
113-
queryString: query.query,
114-
})
115-
);
116-
117-
// set the old cacheKey to uninitialized to finalize loading, our new tab query has new cacheKey
118-
services.store.dispatch(
119-
setIndividualQueryStatus({
120-
cacheKey,
121-
status: {
122-
status: QueryExecutionStatus.UNINITIALIZED,
123-
startTime: undefined,
124-
elapsedMs: undefined,
125-
error: undefined,
126-
},
127-
})
128-
);
129-
130-
return true;
131-
}
132-
133-
return false;
134-
},
135135

136-
component: PatternsTab,
137-
});
136+
return false;
137+
},
138+
139+
component: PatternsTab,
140+
});
141+
}
138142

139143
// Register Visualizations Tab
140144
tabRegistry.registerTab({
@@ -155,7 +159,6 @@ export const registerBuiltInTabs = (
155159
});
156160

157161
// Register Field Stats Tab
158-
const isExperimentalEnabled = services.uiSettings.get(ENABLE_EXPERIMENTAL_SETTING, false);
159162
if (isExperimentalEnabled) {
160163
tabRegistry.registerTab({
161164
id: EXPLORE_FIELD_STATS_TAB_ID,

src/plugins/explore/public/components/query_panel/query_panel_widgets/recent_queries_button/recent_queries_button.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ export const RecentQueriesButton = () => {
8383
isVisible={popoverIsOpen}
8484
queryString={services.data.query.queryString}
8585
onClickRecentQuery={onClick}
86+
className="exploreRecentQueriesButton__table"
8687
/>
8788
</EuiPopover>
8889
);

src/plugins/explore/public/components/query_panel/query_panel_widgets/save_query/save_query.scss

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,21 @@
77
.exploreSaveQuery {
88
@include exploreQueryPanelButton;
99
}
10+
11+
.exploreSaveQuery__popoverContent {
12+
.osdSavedQueryManagement__newUIList {
13+
padding: 0;
14+
}
15+
16+
.osdSavedQueryManagement__newUIItem {
17+
padding: 0;
18+
margin: 0;
19+
}
20+
21+
.osdSavedQueryManagement__newUIButton {
22+
padding: $euiSizeS;
23+
width: 100%;
24+
text-align: left;
25+
justify-content: flex-start;
26+
}
27+
}

src/plugins/explore/public/components/query_panel/query_panel_widgets/save_query/save_query.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ export const SaveQueryButton = () => {
184184
closePopover={closePopover}
185185
anchorPosition="downCenter"
186186
panelPaddingSize="none"
187+
panelClassName="exploreSaveQuery__popoverContent"
187188
>
188189
<SavedQueryManagementComponent
189190
savedQueryService={savedQueryService}

0 commit comments

Comments
 (0)