diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/LabelFilterItem.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/LabelFilterItem.tsx
index bdbe4795f9e..fdaa490f275 100644
--- a/public/app/plugins/datasource/prometheus/querybuilder/components/LabelFilterItem.tsx
+++ b/public/app/plugins/datasource/prometheus/querybuilder/components/LabelFilterItem.tsx
@@ -73,8 +73,10 @@ export function LabelFilterItem({
debounceDuration
);
+ const itemValue = item?.value ?? '';
+
return (
-
+
{/* Label name select, loads all values at once */}
);
diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/LabelFilters.test.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/LabelFilters.test.tsx
index 19c9fb4cafc..71063d6f75d 100644
--- a/public/app/plugins/datasource/prometheus/querybuilder/components/LabelFilters.test.tsx
+++ b/public/app/plugins/datasource/prometheus/querybuilder/components/LabelFilters.test.tsx
@@ -66,10 +66,26 @@ describe('LabelFilters', () => {
it('removes label', async () => {
const { onChange } = setup({ labelsFilters: [{ label: 'foo', op: '=', value: 'bar' }] });
- await userEvent.click(screen.getByLabelText(/remove/));
+ await userEvent.click(screen.getByLabelText(/remove-foo/));
expect(onChange).toBeCalledWith([]);
});
+ it('removes label but preserves a label with a value of empty string', async () => {
+ const { onChange } = setup({
+ labelsFilters: [
+ { label: 'lab', op: '=', value: 'bel' },
+ { label: 'foo', op: '=', value: 'bar' },
+ { label: 'le', op: '=', value: '' },
+ ],
+ });
+ await userEvent.click(screen.getByLabelText(/remove-foo/));
+ expect(onChange).toBeCalledWith([
+ { label: 'lab', op: '=', value: 'bel' },
+ { label: 'le', op: '=', value: '' },
+ ]);
+ expect(screen.queryByText('bar')).toBeNull();
+ });
+
it('renders empty input when labels are deleted from outside ', async () => {
const { rerender } = setup({ labelsFilters: [{ label: 'foo', op: '=', value: 'bar' }] });
expect(screen.getByText(/foo/)).toBeInTheDocument();