Loki: Remove already selected options from next label filter options in builder (#57187)

* Loki: Filter out duplicated options in loki query builder label name options

* Update test
This commit is contained in:
Ivana Huckova 2022-10-19 11:32:01 +02:00 committed by GitHub
parent c0f5183330
commit b997bc4200
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 2 deletions

View File

@ -1,6 +1,7 @@
import { render, screen, getAllByRole, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import React from 'react';
import { getSelectParent } from 'test/helpers/selectOptionInTest';
import { DataSourceInstanceSettings, DataSourcePluginMeta } from '@grafana/data';
@ -46,11 +47,28 @@ describe('LokiQueryBuilder', () => {
render(<LokiQueryBuilder {...props} query={defaultQuery} />);
await userEvent.click(screen.getByLabelText('Add'));
const labels = screen.getByText(/Label filters/);
const selects = getAllByRole(labels.parentElement!.parentElement!.parentElement!, 'combobox');
const selects = getAllByRole(getSelectParent(labels)!, 'combobox');
await userEvent.click(selects[3]);
await waitFor(() => expect(screen.getByText('job')).toBeInTheDocument());
});
it('does not show already existing label names as option in label filter', async () => {
const props = createDefaultProps();
props.datasource.getDataSamples = jest.fn().mockResolvedValue([]);
props.datasource.languageProvider.fetchSeriesLabels = jest
.fn()
.mockReturnValue({ job: ['a'], instance: ['b'], baz: ['bar'] });
render(<LokiQueryBuilder {...props} query={defaultQuery} />);
await userEvent.click(screen.getByLabelText('Add'));
const labels = screen.getByText(/Label filters/);
const selects = getAllByRole(getSelectParent(labels)!, 'combobox');
await userEvent.click(selects[3]);
await waitFor(() => expect(screen.getByText('job')).toBeInTheDocument());
await waitFor(() => expect(screen.getByText('instance')).toBeInTheDocument());
await waitFor(() => expect(screen.getAllByText('baz')).toHaveLength(1));
});
it('shows error for query with operations and no stream selector', async () => {
const query = { labels: [], operations: [{ id: LokiOperationId.Logfmt, params: [] }] };
render(<LokiQueryBuilder {...createDefaultProps()} query={query} />);

View File

@ -54,7 +54,14 @@ export const LokiQueryBuilder = React.memo<Props>(({ datasource, query, onChange
const expr = lokiQueryModeller.renderLabels(labelsToConsider);
const series = await datasource.languageProvider.fetchSeriesLabels(expr);
return Object.keys(series).sort();
const labelsNamesToConsider = labelsToConsider.map((l) => l.label);
const labelNames = Object.keys(series)
// Filter out label names that are already selected
.filter((name) => !labelsNamesToConsider.includes(name))
.sort();
return labelNames;
};
const onGetLabelValues = async (forLabel: Partial<QueryBuilderLabelFilter>) => {