Skip to content

Commit 9722616

Browse files
committed
migrate selects from combobox
1 parent 63ffc29 commit 9722616

File tree

1 file changed

+23
-20
lines changed

1 file changed

+23
-20
lines changed

src/components/queryBuilder/Filters.tsx

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useState } from 'react';
22
import { SelectableValue } from '@grafana/data';
3-
import { Button, Input, MultiSelect, RadioButtonGroup, Select } from '@grafana/ui';
4-
import { Filter, FilterOperator, FullField, NullFilter } from '../../types';
3+
import { Button, Input, MultiCombobox, RadioButtonGroup, Combobox, ComboboxOption } from '@grafana/ui';
4+
import { DateFilterWithValue, Filter, FilterOperator, FullField, NullFilter } from '../../types';
55
import * as utils from './utils';
66
import { selectors } from '../../selectors';
77
import { styles } from '../../styles';
@@ -11,11 +11,11 @@ const boolValues: Array<SelectableValue<boolean>> = [
1111
{ value: true, label: 'True' },
1212
{ value: false, label: 'False' },
1313
];
14-
const conditions: Array<SelectableValue<'AND' | 'OR'>> = [
14+
const conditions: Array<ComboboxOption<'AND' | 'OR'>> = [
1515
{ value: 'AND', label: 'AND' },
1616
{ value: 'OR', label: 'OR' },
1717
];
18-
const filterOperators: Array<SelectableValue<FilterOperator>> = [
18+
const filterOperators: Array<ComboboxOption<FilterOperator>> = [
1919
{ value: FilterOperator.Equals, label: '=' },
2020
{ value: FilterOperator.NotEquals, label: '!=' },
2121
{ value: FilterOperator.LessThan, label: '<' },
@@ -37,7 +37,7 @@ const filterOperators: Array<SelectableValue<FilterOperator>> = [
3737
{ value: FilterOperator.WithInGrafanaTimeRange, label: 'WITHIN DASHBOARD TIME RANGE' },
3838
{ value: FilterOperator.OutsideGrafanaTimeRange, label: 'OUTSIDE DASHBOARD TIME RANGE' },
3939
];
40-
const standardTimeOptions: Array<SelectableValue<string>> = [
40+
const standardTimeOptions: Array<ComboboxOption<string>> = [
4141
{ value: "date_trunc('day', now())", label: 'TODAY' },
4242
{ value: "date_trunc('day', dateadd('d', -1, now()))", label: 'YESTERDAY' },
4343
{ value: 'now()', label: 'NOW' },
@@ -117,7 +117,7 @@ export const FilterValueEditor = (props: {
117117
if (filter.type === 'picklist') {
118118
return (
119119
<div data-testid="query-builder-filters-multi-picklist-value-container">
120-
<MultiSelect
120+
<MultiCombobox
121121
value={filter.value}
122122
options={getOptions()}
123123
onChange={(e) => onMultiFilterValueChange(e.map((v) => v.value!))}
@@ -139,15 +139,15 @@ export const FilterValueEditor = (props: {
139139
return <FilterValueNumberItem value={filter.value} onChange={(value) => onFilterChange({ ...filter, value })} />;
140140
} else if (utils.isDateFilter(filter)) {
141141
const onDateFilterValueChange = (value: string) => {
142-
onFilterChange({ ...filter, value });
142+
onFilterChange({ ...filter, value } as DateFilterWithValue);
143143
};
144144
//
145145
return utils.isDateFilterWithOutValue(filter) ? null : (
146146
<div data-testid="query-builder-filters-date-value-container">
147-
<Select
147+
<Combobox
148148
value={filter.value}
149-
onChange={(e) => onDateFilterValueChange(e.value!)}
150-
allowCustomValue={true}
149+
onChange={(e) => onDateFilterValueChange(e.value)}
150+
createCustomValue={true}
151151
options={[...standardTimeOptions]}
152152
/>
153153
</div>
@@ -162,7 +162,7 @@ export const FilterValueEditor = (props: {
162162
) {
163163
return (
164164
<div data-testid="query-builder-filters-single-picklist-value-container">
165-
<Select value={filter.value} onChange={(e) => onStringFilterValueChange(e.value!)} options={getOptions()} />
165+
<Combobox value={filter.value} onChange={(e) => onStringFilterValueChange(e.value!)} options={getOptions()} />
166166
</div>
167167
);
168168
}
@@ -185,7 +185,6 @@ export const FilterEditor = (props: {
185185
onFilterChange: (index: number, filter: Filter) => void;
186186
}) => {
187187
const { index, filter, fieldsList, onFilterChange } = props;
188-
const [isOpen, setIsOpen] = useState(false);
189188
const getFields = () => {
190189
const values = (filter.restrictToFields || fieldsList).map((f) => {
191190
return { label: f.label, value: f.name };
@@ -197,7 +196,7 @@ export const FilterEditor = (props: {
197196
return values;
198197
};
199198

200-
const getFilterOperatorsByType = (type = 'string'): Array<SelectableValue<FilterOperator>> => {
199+
const getFilterOperatorsByType = (type = 'string'): Array<ComboboxOption<FilterOperator>> => {
201200
if (utils.isBooleanType(type)) {
202201
return filterOperators.filter((f) => [FilterOperator.Equals, FilterOperator.NotEquals].includes(f.value!));
203202
} else if (utils.isGeoHashType(type)) {
@@ -284,7 +283,6 @@ export const FilterEditor = (props: {
284283
}
285284
};
286285
const onFilterNameChange = (fieldName: string) => {
287-
setIsOpen(false);
288286
const matchingField = fieldsList.find((f) => f.name === fieldName);
289287
let filterData: { key: string; type: string } | null = null;
290288

@@ -346,6 +344,14 @@ export const FilterEditor = (props: {
346344
if (!Array.isArray(newFilter.value)) {
347345
newFilter.value = [newFilter.value || ''];
348346
}
347+
} else {
348+
if ('value' in newFilter && Array.isArray(newFilter.value)) {
349+
if (utils.isDateType(newFilter.type)) {
350+
newFilter.value = '';
351+
} else {
352+
newFilter.value = newFilter.value[0] || '';
353+
}
354+
}
349355
}
350356
onFilterChange(index, newFilter);
351357
};
@@ -362,17 +368,14 @@ export const FilterEditor = (props: {
362368
{index !== 0 && (
363369
<RadioButtonGroup options={conditions} value={filter.condition} onChange={(e) => onFilterConditionChange(e!)} />
364370
)}
365-
<Select
371+
<Combobox
366372
value={filter.key}
367373
width={30}
368374
options={getFields()}
369-
isOpen={isOpen}
370-
onOpenMenu={() => setIsOpen(true)}
371-
onCloseMenu={() => setIsOpen(false)}
372375
onChange={(e) => onFilterNameChange(e.value!)}
373-
allowCustomValue={true}
376+
createCustomValue={true}
374377
/>
375-
<Select
378+
<Combobox
376379
value={filter.operator}
377380
width={30}
378381
options={getFilterOperatorsByType(filter.type)}

0 commit comments

Comments
 (0)