Select: Changes default menu placement for Select from auto to bottom (#29837)

* Select: Changes default menuPlacement from auto to bottom

* Tests: Fixes snapshot
This commit is contained in:
Hugo Häggmark 2020-12-15 12:46:31 +01:00 committed by GitHub
parent b1a57c6f77
commit 5f4b528122
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 26 additions and 51 deletions

View File

@ -116,7 +116,7 @@ export function SelectBase<T>({
maxMenuHeight = 300, maxMenuHeight = 300,
minMenuHeight, minMenuHeight,
maxVisibleValues, maxVisibleValues,
menuPlacement = 'auto', menuPlacement = 'bottom',
menuPosition, menuPosition,
noOptionsMessage = 'No options found', noOptionsMessage = 'No options found',
onBlur, onBlur,

View File

@ -3,7 +3,7 @@ import React, { PureComponent } from 'react';
// Components // Components
import { HorizontalGroup, Select } from '@grafana/ui'; import { HorizontalGroup, Select } from '@grafana/ui';
import { SelectableValue, DataSourceInstanceSettings } from '@grafana/data'; import { DataSourceInstanceSettings, SelectableValue } from '@grafana/data';
import { selectors } from '@grafana/e2e-selectors'; import { selectors } from '@grafana/e2e-selectors';
import { isUnsignedPluginSignature, PluginSignatureBadge } from '../../../features/plugins/PluginSignatureBadge'; import { isUnsignedPluginSignature, PluginSignatureBadge } from '../../../features/plugins/PluginSignatureBadge';
import { getDataSourceSrv } from '@grafana/runtime'; import { getDataSourceSrv } from '@grafana/runtime';
@ -130,7 +130,6 @@ export class DataSourcePicker extends PureComponent<Props, State> {
onBlur={onBlur} onBlur={onBlur}
openMenuOnFocus={openMenuOnFocus} openMenuOnFocus={openMenuOnFocus}
maxMenuHeight={500} maxMenuHeight={500}
menuPlacement="bottom"
placeholder={placeholder} placeholder={placeholder}
noOptionsMessage="No datasources found" noOptionsMessage="No datasources found"
value={value} value={value}

View File

@ -226,7 +226,6 @@ export class CalculateFieldTransformerEditor extends React.PureComponent<
stats={[options.reducer]} stats={[options.reducer]}
onChange={this.onStatsChange} onChange={this.onStatsChange}
defaultStat={ReducerID.sum} defaultStat={ReducerID.sum}
menuPlacement="bottom"
/> />
</div> </div>
</div> </div>
@ -305,14 +304,12 @@ export class CalculateFieldTransformerEditor extends React.PureComponent<
className="min-width-18 gf-form-spacing" className="min-width-18 gf-form-spacing"
value={options?.left} value={options?.left}
onChange={this.onBinaryLeftChanged} onChange={this.onBinaryLeftChanged}
menuPlacement="bottom"
/> />
<Select <Select
className="width-8 gf-form-spacing" className="width-8 gf-form-spacing"
options={ops} options={ops}
value={options.operator ?? ops[0].value} value={options.operator ?? ops[0].value}
onChange={this.onBinaryOperationChanged} onChange={this.onBinaryOperationChanged}
menuPlacement="bottom"
/> />
<Select <Select
allowCustomValue={true} allowCustomValue={true}
@ -321,7 +318,6 @@ export class CalculateFieldTransformerEditor extends React.PureComponent<
options={rightNames} options={rightNames}
value={options?.right} value={options?.right}
onChange={this.onBinaryRightChanged} onChange={this.onBinaryRightChanged}
menuPlacement="bottom"
/> />
</div> </div>
</div> </div>
@ -347,7 +343,6 @@ export class CalculateFieldTransformerEditor extends React.PureComponent<
options={calculationModes} options={calculationModes}
value={calculationModes.find(v => v.value === mode)} value={calculationModes.find(v => v.value === mode)}
onChange={this.onModeChanged} onChange={this.onModeChanged}
menuPlacement="bottom"
/> />
</div> </div>
</div> </div>

View File

@ -8,8 +8,8 @@ import {
} from '@grafana/data'; } from '@grafana/data';
import { Input, Select } from '@grafana/ui'; import { Input, Select } from '@grafana/ui';
import { import {
ConcatenateTransformerOptions,
ConcatenateFrameNameMode, ConcatenateFrameNameMode,
ConcatenateTransformerOptions,
} from '@grafana/data/src/transformations/transformers/concat'; } from '@grafana/data/src/transformations/transformers/concat';
interface ConcatenateTransformerEditorProps extends TransformerUIProps<ConcatenateTransformerOptions> {} interface ConcatenateTransformerEditorProps extends TransformerUIProps<ConcatenateTransformerOptions> {}
@ -61,7 +61,6 @@ export class ConcatenateTransformerEditor extends React.PureComponent<Concatenat
options={nameModes} options={nameModes}
value={nameModes.find(v => v.value === frameNameMode)} value={nameModes.find(v => v.value === frameNameMode)}
onChange={this.onModeChanged} onChange={this.onModeChanged}
menuPlacement="bottom"
/> />
</div> </div>
</div> </div>

View File

@ -87,7 +87,6 @@ export const FilterByValueFilterEditor: React.FC<Props> = props => {
options={fieldsAsOptions} options={fieldsAsOptions}
value={filter.fieldName} value={filter.fieldName}
onChange={onChangeField} onChange={onChangeField}
menuPlacement="bottom"
/> />
</div> </div>
<div className="gf-form gf-form-spacing"> <div className="gf-form gf-form-spacing">
@ -98,7 +97,6 @@ export const FilterByValueFilterEditor: React.FC<Props> = props => {
options={matcherOptions} options={matcherOptions}
value={matcherId} value={matcherId}
onChange={onChangeMatcher} onChange={onChangeMatcher}
menuPlacement="bottom"
/> />
</div> </div>
<div className="gf-form gf-form--grow gf-form-spacing"> <div className="gf-form gf-form--grow gf-form-spacing">

View File

@ -1,20 +1,20 @@
import React, { useMemo, useCallback } from 'react'; import React, { useCallback, useMemo } from 'react';
import { css, cx } from 'emotion'; import { css, cx } from 'emotion';
import { import {
DataTransformerID, DataTransformerID,
ReducerID,
SelectableValue,
standardTransformers, standardTransformers,
TransformerRegistyItem, TransformerRegistyItem,
TransformerUIProps, TransformerUIProps,
ReducerID,
SelectableValue,
} from '@grafana/data'; } from '@grafana/data';
import { getAllFieldNamesFromDataFrames } from './OrganizeFieldsTransformerEditor'; import { getAllFieldNamesFromDataFrames } from './OrganizeFieldsTransformerEditor';
import { Select, StatsPicker, stylesFactory } from '@grafana/ui'; import { Select, StatsPicker, stylesFactory } from '@grafana/ui';
import { import {
GroupByTransformerOptions,
GroupByOperationID,
GroupByFieldOptions, GroupByFieldOptions,
GroupByOperationID,
GroupByTransformerOptions,
} from '@grafana/data/src/transformations/transformers/groupBy'; } from '@grafana/data/src/transformations/transformers/groupBy';
interface FieldProps { interface FieldProps {
@ -90,7 +90,6 @@ export const GroupByFieldConfiguration: React.FC<FieldProps> = ({ fieldName, con
placeholder="Ignored" placeholder="Ignored"
onChange={onChange} onChange={onChange}
isClearable isClearable
menuPlacement="bottom"
/> />
</div> </div>
</div> </div>
@ -105,7 +104,6 @@ export const GroupByFieldConfiguration: React.FC<FieldProps> = ({ fieldName, con
onChange={stats => { onChange={stats => {
onConfigChange({ ...config, aggregations: stats as ReducerID[] }); onConfigChange({ ...config, aggregations: stats as ReducerID[] });
}} }}
menuPlacement="bottom"
/> />
</div> </div>
)} )}

View File

@ -1,10 +1,10 @@
import React from 'react'; import React from 'react';
import { import {
DataTransformerID, DataTransformerID,
SelectableValue,
standardTransformers, standardTransformers,
TransformerRegistyItem, TransformerRegistyItem,
TransformerUIProps, TransformerUIProps,
SelectableValue,
} from '@grafana/data'; } from '@grafana/data';
import { Select } from '@grafana/ui'; import { Select } from '@grafana/ui';
@ -49,7 +49,6 @@ export const LabelsAsFieldsTransformerEditor: React.FC<TransformerUIProps<Labels
className="min-width-18 gf-form-spacing" className="min-width-18 gf-form-spacing"
value={options?.valueLabel} value={options?.valueLabel}
onChange={onValueLabelChange} onChange={onValueLabelChange}
menuPlacement="bottom"
/> />
</div> </div>
</div> </div>

View File

@ -1,15 +1,15 @@
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { StatsPicker, Select, LegacyForms } from '@grafana/ui'; import { LegacyForms, Select, StatsPicker } from '@grafana/ui';
import { import {
DataTransformerID, DataTransformerID,
ReducerID, ReducerID,
SelectableValue,
standardTransformers, standardTransformers,
TransformerRegistyItem, TransformerRegistyItem,
TransformerUIProps, TransformerUIProps,
SelectableValue,
} from '@grafana/data'; } from '@grafana/data';
import { ReduceTransformerOptions, ReduceTransformerMode } from '@grafana/data/src/transformations/transformers/reduce'; import { ReduceTransformerMode, ReduceTransformerOptions } from '@grafana/data/src/transformations/transformers/reduce';
import { selectors } from '@grafana/e2e-selectors'; import { selectors } from '@grafana/e2e-selectors';
// TODO: Minimal implementation, needs some <3 // TODO: Minimal implementation, needs some <3
@ -60,7 +60,6 @@ export const ReduceTransformerEditor: React.FC<TransformerUIProps<ReduceTransfor
options={modes} options={modes}
value={modes.find(v => v.value === options.mode) || modes[0]} value={modes.find(v => v.value === options.mode) || modes[0]}
onChange={onSelectMode} onChange={onSelectMode}
menuPlacement="bottom"
className="flex-grow-1" className="flex-grow-1"
/> />
</div> </div>
@ -81,7 +80,6 @@ export const ReduceTransformerEditor: React.FC<TransformerUIProps<ReduceTransfor
reducers: stats as ReducerID[], reducers: stats as ReducerID[],
}); });
}} }}
menuPlacement="bottom"
/> />
</div> </div>
</div> </div>

View File

@ -33,13 +33,7 @@ export const SeriesToFieldsTransformerEditor: React.FC<TransformerUIProps<Series
<div className="gf-form-inline"> <div className="gf-form-inline">
<div className="gf-form gf-form--grow"> <div className="gf-form gf-form--grow">
<div className="gf-form-label width-8">Field name</div> <div className="gf-form-label width-8">Field name</div>
<Select <Select options={fieldNameOptions} value={options.byField} onChange={onSelectField} isClearable />
options={fieldNameOptions}
value={options.byField}
onChange={onSelectField}
isClearable
menuPlacement="bottom"
/>
</div> </div>
</div> </div>
); );

View File

@ -159,7 +159,6 @@ export class TransformationsEditor extends React.PureComponent<TransformationsEd
options={availableTransformers} options={availableTransformers}
onChange={this.onTransformationAdd} onChange={this.onTransformationAdd}
isFullWidth={false} isFullWidth={false}
menuPlacement="bottom"
/> />
</div> </div>
); );

View File

@ -5,24 +5,24 @@ import debounce from 'lodash/debounce';
import unionBy from 'lodash/unionBy'; import unionBy from 'lodash/unionBy';
import { import {
QueryField, BracesPlugin,
SlatePrism,
LegacyForms, LegacyForms,
MultiSelect,
QueryField,
Select,
SlatePrism,
TypeaheadInput, TypeaheadInput,
TypeaheadOutput, TypeaheadOutput,
BracesPlugin,
Select,
MultiSelect,
} from '@grafana/ui'; } from '@grafana/ui';
// Utils & Services // Utils & Services
// dom also includes Element polyfills // dom also includes Element polyfills
import { Plugin, Node, Editor } from 'slate'; import { Editor, Node, Plugin } from 'slate';
import syntax from '../syntax'; import syntax from '../syntax';
// Types // Types
import { ExploreQueryFieldProps, AbsoluteTimeRange, SelectableValue, AppEvents } from '@grafana/data'; import { AbsoluteTimeRange, AppEvents, ExploreQueryFieldProps, SelectableValue } from '@grafana/data';
import { CloudWatchQuery, CloudWatchLogsQuery } from '../types'; import { CloudWatchLogsQuery, CloudWatchQuery } from '../types';
import { CloudWatchDatasource } from '../datasource'; import { CloudWatchDatasource } from '../datasource';
import { LanguageMap, languages as prismLanguages } from 'prismjs'; import { LanguageMap, languages as prismLanguages } from 'prismjs';
import { CloudWatchLanguageProvider } from '../language_provider'; import { CloudWatchLanguageProvider } from '../language_provider';
@ -321,7 +321,6 @@ export class CloudWatchLogsQueryField extends React.PureComponent<CloudWatchLogs
onChange={v => this.setSelectedRegion(v)} onChange={v => this.setSelectedRegion(v)}
width={18} width={18}
placeholder="Choose Region" placeholder="Choose Region"
menuPlacement="bottom"
maxMenuHeight={500} maxMenuHeight={500}
/> />
} }
@ -349,7 +348,6 @@ export class CloudWatchLogsQueryField extends React.PureComponent<CloudWatchLogs
isOptionDisabled={() => selectedLogGroups.length >= MAX_LOG_GROUPS} isOptionDisabled={() => selectedLogGroups.length >= MAX_LOG_GROUPS}
placeholder="Choose Log Groups" placeholder="Choose Log Groups"
maxVisibleValues={4} maxVisibleValues={4}
menuPlacement="bottom"
noOptionsMessage="No log groups available" noOptionsMessage="No log groups available"
isLoading={loadingLogGroups} isLoading={loadingLogGroups}
onOpenMenu={this.onOpenLogGroupMenu} onOpenMenu={this.onOpenLogGroupMenu}

View File

@ -3,15 +3,15 @@ import React, { PureComponent } from 'react';
// Types // Types
import { InlineFormLabel, LegacyForms, Select } from '@grafana/ui'; import { InlineFormLabel, LegacyForms, Select } from '@grafana/ui';
import { SelectableValue, QueryEditorProps } from '@grafana/data'; import { QueryEditorProps, SelectableValue } from '@grafana/data';
const { Switch } = LegacyForms;
import { PrometheusDatasource } from '../datasource'; import { PrometheusDatasource } from '../datasource';
import { PromQuery, PromOptions } from '../types'; import { PromOptions, PromQuery } from '../types';
import PromQueryField from './PromQueryField'; import PromQueryField from './PromQueryField';
import PromLink from './PromLink'; import PromLink from './PromLink';
const { Switch } = LegacyForms;
export type Props = QueryEditorProps<PrometheusDatasource, PromQuery, PromOptions>; export type Props = QueryEditorProps<PrometheusDatasource, PromQuery, PromOptions>;
const FORMAT_OPTIONS: Array<SelectableValue<string>> = [ const FORMAT_OPTIONS: Array<SelectableValue<string>> = [
@ -157,7 +157,6 @@ export class PromQueryEditor extends PureComponent<Props, State> {
<div className="gf-form-label">Resolution</div> <div className="gf-form-label">Resolution</div>
<Select <Select
isSearchable={false} isSearchable={false}
menuPlacement="bottom"
options={INTERVAL_FACTOR_OPTIONS} options={INTERVAL_FACTOR_OPTIONS}
onChange={this.onIntervalFactorChange} onChange={this.onIntervalFactorChange}
value={intervalFactorOption} value={intervalFactorOption}

View File

@ -82,7 +82,6 @@ exports[`Render PromQueryEditor with basic options should render 1`] = `
</div> </div>
<Select <Select
isSearchable={false} isSearchable={false}
menuPlacement="bottom"
onChange={[Function]} onChange={[Function]}
options={ options={
Array [ Array [