mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 09:19:04 -04:00
[Text-based languages] Hides generated adhoc dataviews from the picker (#158898)
## Summary
Closes https://github.com/elastic/kibana/issues/158894
Now there is no connection between dataviews and text based mode. In the
background we still creating adhoc dataviews but this is because of our
architecture and not something we want to propagate to the users. For
this reason we hide these dataviews from the dataview picker for the
text based mode
<img width="859" alt="image"
src="0b4f1a69
-3218-45bd-8001-1682ab0f7a20">
This commit is contained in:
parent
8277665dbc
commit
22b438b218
3 changed files with 187 additions and 1 deletions
|
@ -15,6 +15,8 @@ import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
|
|||
import { dataPluginMock } from '@kbn/data-plugin/public/mocks';
|
||||
import { indexPatternEditorPluginMock as dataViewEditorPluginMock } from '@kbn/data-view-editor-plugin/public/mocks';
|
||||
import { ChangeDataView } from './change_dataview';
|
||||
import { DataViewSelector } from './data_view_selector';
|
||||
import { dataViewMock } from './mocks/dataview';
|
||||
import { DataViewPickerPropsExtended, TextBasedLanguages } from './data_view_picker';
|
||||
|
||||
describe('DataView component', () => {
|
||||
|
@ -162,4 +164,64 @@ describe('DataView component', () => {
|
|||
component.find('[data-test-subj="dataview-create-new"]').first().simulate('click');
|
||||
expect(props.onTextLangQuerySubmit).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should not propagate the adHoc dataviews for text based mode', async () => {
|
||||
const component = mount(
|
||||
wrapDataViewComponentInContext(
|
||||
{
|
||||
...props,
|
||||
onDataViewCreated: jest.fn(),
|
||||
textBasedLanguages: [TextBasedLanguages.ESQL, TextBasedLanguages.SQL],
|
||||
textBasedLanguage: TextBasedLanguages.ESQL,
|
||||
savedDataViews: [
|
||||
{
|
||||
id: 'dataview-1',
|
||||
title: 'dataview-1',
|
||||
},
|
||||
],
|
||||
adHocDataViews: [dataViewMock],
|
||||
},
|
||||
false
|
||||
)
|
||||
);
|
||||
findTestSubject(component, 'dataview-trigger').simulate('click');
|
||||
expect(component.find(DataViewSelector).prop('dataViewsList')).toStrictEqual([
|
||||
{
|
||||
id: 'dataview-1',
|
||||
title: 'dataview-1',
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it('should propagate the adHoc dataviews for dataview mode', async () => {
|
||||
const component = mount(
|
||||
wrapDataViewComponentInContext(
|
||||
{
|
||||
...props,
|
||||
onDataViewCreated: jest.fn(),
|
||||
savedDataViews: [
|
||||
{
|
||||
id: 'dataview-1',
|
||||
title: 'dataview-1',
|
||||
},
|
||||
],
|
||||
adHocDataViews: [dataViewMock],
|
||||
},
|
||||
false
|
||||
)
|
||||
);
|
||||
findTestSubject(component, 'dataview-trigger').simulate('click');
|
||||
expect(component.find(DataViewSelector).prop('dataViewsList')).toStrictEqual([
|
||||
{
|
||||
id: 'dataview-1',
|
||||
title: 'dataview-1',
|
||||
},
|
||||
{
|
||||
id: 'the-data-view-id',
|
||||
title: 'the-data-view-title',
|
||||
name: 'the-data-view',
|
||||
isAdhoc: true,
|
||||
},
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -111,8 +111,9 @@ export function ChangeDataView({
|
|||
const savedDataViewRefs: DataViewListItemEnhanced[] = savedDataViews
|
||||
? savedDataViews
|
||||
: await data.dataViews.getIdsWithTitle();
|
||||
// not propagate the adHoc dataviews on the list for text based languages
|
||||
const adHocDataViewRefs: DataViewListItemEnhanced[] =
|
||||
adHocDataViews?.map(mapAdHocDataView) || [];
|
||||
(!isTextBasedLangSelected && adHocDataViews?.map(mapAdHocDataView)) || [];
|
||||
|
||||
setDataViewsList(savedDataViewRefs.concat(adHocDataViewRefs));
|
||||
};
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||
* Side Public License, v 1.
|
||||
*/
|
||||
|
||||
import { DataView } from '@kbn/data-views-plugin/public';
|
||||
|
||||
const fields = [
|
||||
{
|
||||
name: '_source',
|
||||
type: '_source',
|
||||
scripted: false,
|
||||
filterable: false,
|
||||
aggregatable: false,
|
||||
},
|
||||
{
|
||||
name: '_index',
|
||||
type: 'string',
|
||||
scripted: false,
|
||||
filterable: true,
|
||||
aggregatable: false,
|
||||
},
|
||||
{
|
||||
name: 'message',
|
||||
type: 'string',
|
||||
displayName: 'message',
|
||||
scripted: false,
|
||||
filterable: false,
|
||||
aggregatable: false,
|
||||
},
|
||||
{
|
||||
name: 'extension',
|
||||
type: 'string',
|
||||
displayName: 'extension',
|
||||
scripted: false,
|
||||
filterable: true,
|
||||
aggregatable: true,
|
||||
},
|
||||
{
|
||||
name: 'bytes',
|
||||
type: 'number',
|
||||
displayName: 'bytesDisplayName',
|
||||
scripted: false,
|
||||
filterable: true,
|
||||
aggregatable: true,
|
||||
sortable: true,
|
||||
},
|
||||
{
|
||||
name: 'scripted',
|
||||
type: 'number',
|
||||
displayName: 'scripted',
|
||||
scripted: true,
|
||||
filterable: false,
|
||||
},
|
||||
{
|
||||
name: 'object.value',
|
||||
type: 'number',
|
||||
displayName: 'object.value',
|
||||
scripted: false,
|
||||
filterable: true,
|
||||
aggregatable: true,
|
||||
},
|
||||
{
|
||||
name: '@timestamp',
|
||||
type: 'date',
|
||||
displayName: '@timestamp',
|
||||
scripted: false,
|
||||
filterable: true,
|
||||
aggregatable: true,
|
||||
},
|
||||
] as DataView['fields'];
|
||||
|
||||
export const buildDataViewMock = ({
|
||||
name,
|
||||
fields: definedFields,
|
||||
timeFieldName,
|
||||
}: {
|
||||
name: string;
|
||||
fields: DataView['fields'];
|
||||
timeFieldName?: string;
|
||||
}): DataView => {
|
||||
const dataViewFields = [...definedFields] as DataView['fields'];
|
||||
|
||||
dataViewFields.getByName = (fieldName: string) => {
|
||||
return dataViewFields.find((field) => field.name === fieldName);
|
||||
};
|
||||
|
||||
dataViewFields.getAll = () => {
|
||||
return dataViewFields;
|
||||
};
|
||||
|
||||
const dataView = {
|
||||
id: `${name}-id`,
|
||||
title: `${name}-title`,
|
||||
name,
|
||||
metaFields: ['_index', '_score'],
|
||||
fields: dataViewFields,
|
||||
type: 'default',
|
||||
getName: () => name,
|
||||
getComputedFields: () => ({ docvalueFields: [], scriptFields: {}, storedFields: ['*'] }),
|
||||
getSourceFiltering: () => ({}),
|
||||
getIndexPattern: () => `${name}-title`,
|
||||
getFieldByName: jest.fn((fieldName: string) => dataViewFields.getByName(fieldName)),
|
||||
timeFieldName: timeFieldName || '',
|
||||
docvalueFields: [],
|
||||
getFormatterForField: jest.fn(() => ({ convert: (value: unknown) => value })),
|
||||
isTimeNanosBased: () => false,
|
||||
isPersisted: () => false,
|
||||
toSpec: () => ({}),
|
||||
getTimeField: () => {
|
||||
return dataViewFields.find((field) => field.name === timeFieldName);
|
||||
},
|
||||
} as unknown as DataView;
|
||||
|
||||
dataView.isTimeBased = () => !!timeFieldName;
|
||||
|
||||
return dataView;
|
||||
};
|
||||
|
||||
export const dataViewMock = buildDataViewMock({ name: 'the-data-view', fields });
|
Loading…
Add table
Add a link
Reference in a new issue