Skip to content

Commit

Permalink
[Discover-Next] conditionally render selector
Browse files Browse the repository at this point in the history
When selecting a specific language, the data source selector disappears and relies completely on the
query editor when enhancements are enabled.

If toggled on and then off, everything is working properly.

opensearch-project#7046

Signed-off-by: Kawika Avilla <kavilla414@gmail.com>
  • Loading branch information
kavilla committed Jun 19, 2024
1 parent a4aa682 commit 6362894
Show file tree
Hide file tree
Showing 11 changed files with 64 additions and 33 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
"start": "scripts/use_node scripts/opensearch_dashboards --dev",
"start:docker": "scripts/use_node scripts/opensearch_dashboards --dev --opensearch.hosts=$OPENSEARCH_HOSTS --opensearch.ignoreVersionMismatch=true --server.host=$SERVER_HOST",
"start:security": "scripts/use_node scripts/opensearch_dashboards --dev --security",
"start:enhancements": "scripts/use_node scripts/opensearch_dashboards --dev --data.enhancements.enabled=true --uiSettings.overrides['query:enhancements:enabled']=true --uiSettings.overrides['query:dataSource:readOnly']=false",
"debug": "scripts/use_node --nolazy --inspect scripts/opensearch_dashboards --dev",
"debug-break": "scripts/use_node --nolazy --inspect-brk scripts/opensearch_dashboards --dev",
"lint": "yarn run lint:es && yarn run lint:style",
Expand Down
2 changes: 1 addition & 1 deletion src/plugins/data/common/data_frames/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,6 @@ export interface IDataFrameResponse extends SearchResponse<any> {
took: number;
}

export interface IDataFrameError {
export interface IDataFrameError extends IDataFrameResponse {
error: Error;
}
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ export const searchSourceRequiredUiSettings = [
UI_SETTINGS.QUERY_STRING_OPTIONS,
UI_SETTINGS.SEARCH_INCLUDE_FROZEN,
UI_SETTINGS.SORT_OPTIONS,
UI_SETTINGS.DATAFRAME_HYDRATION_STRATEGY,
UI_SETTINGS.QUERY_DATAFRAME_HYDRATION_STRATEGY,
];

export interface SearchSourceDependencies extends FetchHandlers {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ interface IDataSelectorRefresherProps {
export const DataSelectorRefresher: React.FC<IDataSelectorRefresherProps> = React.memo(
({ tooltipText, onRefresh, buttonProps, toolTipProps }) => {
return (
<EuiText size="s">
<EuiText size="s" className="sourceRefreshText">
<EuiToolTip
position="right"
content={i18n.translate('data.datasource.selector.refreshDataSources', {
Expand All @@ -34,10 +34,10 @@ export const DataSelectorRefresher: React.FC<IDataSelectorRefresherProps> = Reac
{...toolTipProps}
>
<EuiButtonIcon
size="s"
onClick={onRefresh}
iconType="refresh"
aria-label="sourceRefresh"
className="sourceRefreshButton"
data-test-subj="sourceRefreshButton"
{...buttonProps}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ export const DataSourceSelectable = ({
return (
<EuiComboBox
{...comboBoxProps}
className="dataExplorerDSSelect"
data-test-subj="dataExplorerDSSelect"
placeholder={i18n.translate('data.datasource.selectADatasource', {
defaultMessage: DATA_SELECTOR_DEFAULT_PLACEHOLDER,
Expand Down
10 changes: 2 additions & 8 deletions src/plugins/data/public/ui/query_editor/_language_selector.scss
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,6 @@
* SPDX-License-Identifier: Apache-2.0
*/
.languageSelector {
max-width: 140px;
height: 100%;

&:first-child {
div:first-child {
height: 100%;
}
}
min-width: 140px;
border-bottom: $euiBorderThin !important;
}
22 changes: 22 additions & 0 deletions src/plugins/data/public/ui/query_editor/_query_editor.scss
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,28 @@
// overflow: auto;
}

.osdQueryEditor__languageWrapper {
:first-child {
box-shadow: none !important;
height: 100%;
border-radius: 0;
}
}

.osdQueryEditor__dataSourceWrapper {
.dataExplorerDSSelect {
border-bottom: $euiBorderThin !important;

div:is([class$="--group"]) {
padding: 0 !important;
}

.sourceRefreshText {
max-height: 40px;
}
}
}

@include euiBreakpoint("xs", "s") {
.osdQueryEditor--withDatePicker {
> :first-child {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ export const QueryLanguageSelector = (props: Props) => {

return (
<EuiComboBox
fullWidth
className="languageSelector"
data-test-subj="languageSelector"
options={languageOptions}
Expand Down
52 changes: 31 additions & 21 deletions src/plugins/data/public/ui/query_editor/query_editor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {
import { QuerySuggestion } from '../../autocomplete';
import { fromUser, getQueryLog, PersistedLog, toUser } from '../../query';
import { SuggestionsListSize } from '../typeahead/suggestions_component';
import { DataSettings, QueryEnhancement } from '../types';
import { DataSettings } from '../types';
import { fetchIndexPatterns } from './fetch_index_patterns';
import { QueryLanguageSelector } from './language_selector';

Expand Down Expand Up @@ -50,7 +50,7 @@ interface Props extends QueryEditorProps {
}

interface State {
queryEnhancements: Map<string, QueryEnhancement>;
isDataSourcesVisible: boolean;
isSuggestionsVisible: boolean;
index: number | null;
suggestions: QuerySuggestion[];
Expand All @@ -75,7 +75,7 @@ const KEY_CODES = {
// eslint-disable-next-line import/no-default-export
export default class QueryEditorUI extends Component<Props, State> {
public state: State = {
queryEnhancements: new Map(),
isDataSourcesVisible: true,
isSuggestionsVisible: false,
index: null,
suggestions: [],
Expand Down Expand Up @@ -167,16 +167,16 @@ export default class QueryEditorUI extends Component<Props, State> {
language,
};

const fields = this.props.settings.getQueryEnhancements(newQuery.language)?.fields;
const enhancement = this.props.settings.getQueryEnhancements(newQuery.language);
const fields = enhancement?.fields;
const newSettings: DataSettings = {
userQueryLanguage: newQuery.language,
userQueryString: newQuery.query,
...(fields && { uiOverrides: { fields } }),
};
this.props.settings?.updateSettings(newSettings);

const dateRangeEnhancement = this.props.settings.getQueryEnhancements(language)?.searchBar
?.dateRange;
const dateRangeEnhancement = enhancement?.searchBar?.dateRange;
const dateRange = dateRangeEnhancement
? {
from: dateRangeEnhancement.initialFrom!,
Expand All @@ -185,6 +185,7 @@ export default class QueryEditorUI extends Component<Props, State> {
: undefined;
this.onChange(newQuery, dateRange);
this.onSubmit(newQuery, dateRange);
this.setState({ isDataSourcesVisible: enhancement?.searchBar?.showDataSourceSelector ?? true });
};

private initPersistedLog = () => {
Expand All @@ -194,6 +195,15 @@ export default class QueryEditorUI extends Component<Props, State> {
: getQueryLog(uiSettings, storage, appName, this.props.query.language);
};

private initDataSourcesVisibility = () => {
if (this.componentIsUnmounting) return;

const isDataSourcesVisible =
this.props.settings.getQueryEnhancements(this.props.query.language)?.searchBar
?.showDataSourceSelector ?? true;
this.setState({ isDataSourcesVisible });
};

public onMouseEnterSuggestion = (index: number) => {
this.setState({ index });
};
Expand All @@ -208,6 +218,7 @@ export default class QueryEditorUI extends Component<Props, State> {

this.initPersistedLog();
// this.fetchIndexPatterns().then(this.updateSuggestions);
this.initDataSourcesVisibility();
this.handleListUpdate();

window.addEventListener('scroll', this.handleListUpdate, {
Expand Down Expand Up @@ -257,23 +268,21 @@ export default class QueryEditorUI extends Component<Props, State> {
<div className={className}>
<EuiFlexGroup gutterSize="xs" direction="column">
<EuiFlexItem grow={false}>
<EuiFlexGroup gutterSize="xs">
<EuiFlexGroup gutterSize="xs" alignItems="center" className={`${className}__wrapper`}>
<EuiFlexItem grow={false}>{this.props.prepend}</EuiFlexItem>
<EuiFlexItem>
<EuiFlexGroup gutterSize="xs">
<EuiFlexItem grow={false}>
<div ref={this.props.containerRef} />
</EuiFlexItem>
<EuiFlexItem grow={true}>
<QueryLanguageSelector
language={this.props.query.language}
anchorPosition={this.props.languageSwitcherPopoverAnchorPosition}
onSelectLanguage={this.onSelectLanguage}
appName={this.services.appName}
/>
</EuiFlexItem>
</EuiFlexGroup>
<EuiFlexItem grow={false} className={`${className}__languageWrapper`}>
<QueryLanguageSelector
language={this.props.query.language}
anchorPosition={this.props.languageSwitcherPopoverAnchorPosition}
onSelectLanguage={this.onSelectLanguage}
appName={this.services.appName}
/>
</EuiFlexItem>
{this.state.isDataSourcesVisible && (
<EuiFlexItem grow={false} className={`${className}__dataSourceWrapper`}>
<div ref={this.props.containerRef} />
</EuiFlexItem>
)}
</EuiFlexGroup>
</EuiFlexItem>
<EuiFlexItem onClick={this.onClickInput} grow={true}>
Expand All @@ -294,6 +303,7 @@ export default class QueryEditorUI extends Component<Props, State> {
scrollBeyondLastLine: false,
wordWrap: 'on',
wrappingIndent: 'indent',
selectionHighlight: false,
}}
/>
</EuiFlexItem>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,7 @@ export default function QueryEditorTopRow(props: QueryEditorTopRowProps) {
onSubmit={onInputSubmit}
getQueryStringInitialValue={getQueryStringInitialValue}
persistedLog={persistedLog}
className="osdQueryEditor"
dataTestSubj={props.dataTestSubj}
queryEditorHeaderRef={queryEditorHeaderRef}
/>
Expand Down
1 change: 1 addition & 0 deletions src/plugins/data/public/ui/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export interface QueryEnhancement {
// Leave blank to support all data sources
// supportedDataSourceTypes?: Record<string, GenericDataSource>;
searchBar?: {
showDataSourceSelector?: boolean;
showQueryInput?: boolean;
showFilterBar?: boolean;
showDatePicker?: boolean;
Expand Down

0 comments on commit 6362894

Please sign in to comment.