CloudMonitoring: Allow to manually set filters (#40606)
This commit is contained in:
@@ -75,57 +75,78 @@ export const LabelFilter: FunctionComponent<Props> = ({
|
||||
noFillEnd={filters.length > 1}
|
||||
>
|
||||
<VerticalGroup spacing="xs" width="auto">
|
||||
{filters.map(({ key, operator, value, condition }, index) => (
|
||||
<HorizontalGroup key={index} spacing="xs" width="auto">
|
||||
<Select
|
||||
menuShouldPortal
|
||||
width={SELECT_WIDTH}
|
||||
allowCustomValue
|
||||
formatCreateLabel={(v) => `Use label key: ${v}`}
|
||||
value={key}
|
||||
options={options}
|
||||
onChange={({ value: key = '' }) => {
|
||||
onChange(
|
||||
filtersToStringArray(
|
||||
filters.map((f, i) => (i === index ? { key, operator, condition, value: '' } : f))
|
||||
)
|
||||
);
|
||||
}}
|
||||
/>
|
||||
<Select
|
||||
menuShouldPortal
|
||||
value={operator}
|
||||
options={operators.map(toOption)}
|
||||
onChange={({ value: operator = '=' }) =>
|
||||
onChange(filtersToStringArray(filters.map((f, i) => (i === index ? { ...f, operator } : f))))
|
||||
}
|
||||
menuPlacement="bottom"
|
||||
renderControl={OperatorButton}
|
||||
/>
|
||||
<Select
|
||||
menuShouldPortal
|
||||
width={SELECT_WIDTH}
|
||||
formatCreateLabel={(v) => `Use label value: ${v}`}
|
||||
allowCustomValue
|
||||
value={value}
|
||||
placeholder="add filter value"
|
||||
options={
|
||||
labels.hasOwnProperty(key) ? [variableOptionGroup, ...labels[key].map(toOption)] : [variableOptionGroup]
|
||||
}
|
||||
onChange={({ value = '' }) =>
|
||||
onChange(filtersToStringArray(filters.map((f, i) => (i === index ? { ...f, value } : f))))
|
||||
}
|
||||
/>
|
||||
<Button
|
||||
variant="secondary"
|
||||
size="md"
|
||||
icon="trash-alt"
|
||||
aria-label="Remove"
|
||||
onClick={() => onChange(filtersToStringArray(filters.filter((_, i) => i !== index)))}
|
||||
></Button>
|
||||
{index + 1 === filters.length && Object.values(filters).every(({ value }) => value) && <AddFilter />}
|
||||
</HorizontalGroup>
|
||||
))}
|
||||
{filters.map(({ key, operator, value, condition }, index) => {
|
||||
// Add the current key and value as options if they are manually entered
|
||||
const keyPresent = options.some((op) => {
|
||||
if (op.options) {
|
||||
return options.some((opp) => opp.label === key);
|
||||
}
|
||||
return op.label === key;
|
||||
});
|
||||
if (!keyPresent) {
|
||||
options.push({ label: key, value: key });
|
||||
}
|
||||
|
||||
const valueOptions = labels.hasOwnProperty(key)
|
||||
? [variableOptionGroup, ...labels[key].map(toOption)]
|
||||
: [variableOptionGroup];
|
||||
const valuePresent = valueOptions.some((op) => {
|
||||
return op.label === value;
|
||||
});
|
||||
if (!valuePresent) {
|
||||
valueOptions.push({ label: value, value });
|
||||
}
|
||||
|
||||
return (
|
||||
<HorizontalGroup key={index} spacing="xs" width="auto">
|
||||
<Select
|
||||
menuShouldPortal
|
||||
width={SELECT_WIDTH}
|
||||
allowCustomValue
|
||||
formatCreateLabel={(v) => `Use label key: ${v}`}
|
||||
value={key}
|
||||
options={options}
|
||||
onChange={({ value: key = '' }) => {
|
||||
onChange(
|
||||
filtersToStringArray(
|
||||
filters.map((f, i) => (i === index ? { key, operator, condition, value: '' } : f))
|
||||
)
|
||||
);
|
||||
}}
|
||||
/>
|
||||
<Select
|
||||
menuShouldPortal
|
||||
value={operator}
|
||||
options={operators.map(toOption)}
|
||||
onChange={({ value: operator = '=' }) =>
|
||||
onChange(filtersToStringArray(filters.map((f, i) => (i === index ? { ...f, operator } : f))))
|
||||
}
|
||||
menuPlacement="bottom"
|
||||
renderControl={OperatorButton}
|
||||
/>
|
||||
<Select
|
||||
menuShouldPortal
|
||||
width={SELECT_WIDTH}
|
||||
formatCreateLabel={(v) => `Use label value: ${v}`}
|
||||
allowCustomValue
|
||||
value={value}
|
||||
placeholder="add filter value"
|
||||
options={valueOptions}
|
||||
onChange={({ value = '' }) =>
|
||||
onChange(filtersToStringArray(filters.map((f, i) => (i === index ? { ...f, value } : f))))
|
||||
}
|
||||
/>
|
||||
<Button
|
||||
variant="secondary"
|
||||
size="md"
|
||||
icon="trash-alt"
|
||||
aria-label="Remove"
|
||||
onClick={() => onChange(filtersToStringArray(filters.filter((_, i) => i !== index)))}
|
||||
></Button>
|
||||
{index + 1 === filters.length && Object.values(filters).every(({ value }) => value) && <AddFilter />}
|
||||
</HorizontalGroup>
|
||||
);
|
||||
})}
|
||||
{!filters.length && <AddFilter />}
|
||||
</VerticalGroup>
|
||||
</QueryEditorRow>
|
||||
|
||||
Reference in New Issue
Block a user