Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Discover] Use fields API to retrieve fields #83891

Merged
merged 101 commits into from
Jan 15, 2021
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
101 commits
Select commit Hold shift + click to select a range
a232550
Add search source to example plugin.
lukeelmers Oct 27, 2020
ba796e0
Add uiSetting for fields API.
lukeelmers Oct 27, 2020
9fbcc82
Update SearchSource to support fields API.
lukeelmers Oct 27, 2020
5afd264
[PoC] reading from the fields API in Discover
Nov 20, 2020
ac1e273
Add N fields as a default column
Nov 20, 2020
e6f2a22
Make fields column non-removeable
Nov 20, 2020
c420e96
Merge master
Nov 25, 2020
8ad5f99
Do not add 'fields' to state
Nov 25, 2020
64f0868
Remove fields from app state and read from source when needed
Nov 26, 2020
b843d33
Remove fields column if a new column is added
Nov 30, 2020
1a3196d
Add search source to example plugin.
lukeelmers Oct 27, 2020
0cf84e4
Add uiSetting for fields API.
lukeelmers Oct 27, 2020
ad23b7f
Update SearchSource to support fields API.
lukeelmers Oct 27, 2020
3681311
Improve error handling in search examples plugin.
lukeelmers Nov 16, 2020
5ac33bb
Add unit tests for legacy behavior.
lukeelmers Nov 20, 2020
9e6c89f
Remove uiSettings feature flag; add fieldsFromSource config.
lukeelmers Nov 20, 2020
d34ab66
Rewrite flatten() based on final API design.
lukeelmers Nov 20, 2020
4773949
Update example app based on final API design.
lukeelmers Nov 23, 2020
d272609
Update maps app to use legacy fieldsFromSource.
lukeelmers Nov 23, 2020
30c7c5f
Update Discover to use legacy fieldsFromSource.
lukeelmers Nov 23, 2020
24a5f9d
Rename source filters to field filters.
lukeelmers Nov 24, 2020
9c7a967
Address feedback.
lukeelmers Nov 30, 2020
5c124f8
Update generated docs.
lukeelmers Nov 30, 2020
79e59a8
Update maps functional test.
lukeelmers Nov 30, 2020
f7d304b
Formatting fields column similar to _source
Nov 30, 2020
4053bf1
Merge upstream
Dec 1, 2020
ee33143
Moving logic for using search API to updating search source
Dec 1, 2020
e3ace69
Fix small merge error
Dec 1, 2020
84136f6
Merge branch 'master' into feat/ssource-fields
kibanamachine Dec 1, 2020
804c5f8
Merge branch 'feat/ssource-fields' of https://github.com/lukeelmers/k…
Dec 2, 2020
29fe624
Move useSource switch to Discover section of advanced settings
Dec 2, 2020
900637b
Do not use fields and source at the same time
Dec 2, 2020
9fc9517
Remove unmapped fields switch
Dec 2, 2020
92253eb
Add basic support for grouping multifields
Dec 3, 2020
00d6c68
Merge master
Dec 3, 2020
5e6162c
Remove output.txt
Dec 3, 2020
e16cdcb
Fix some merge leftovers
Dec 3, 2020
5e0f998
Fix some merge leftovers
Dec 3, 2020
9791498
Merge branch 'master' into discover-ssource-fields
Dec 3, 2020
63e49d4
Fix merge errors
Dec 3, 2020
a80d44d
Fix typescript errors and update nested fields logic
Dec 4, 2020
60119b9
Add a unit test
Dec 4, 2020
8583723
Fixing field formats
Dec 4, 2020
e21e478
Merge master
Dec 4, 2020
5108654
Fix multifield selection logic
Dec 5, 2020
448bc7a
Request all fields from source
Dec 6, 2020
dc5f148
Fix eslint
Dec 6, 2020
f260376
Fix default columns when switching between _source and fields
Dec 6, 2020
a2273f7
Merge branch 'master' into discover-ssource-fields
Dec 6, 2020
c8c4f47
More unit tests
Dec 6, 2020
57319da
Update API changes
Dec 7, 2020
d07b676
Add unit test for discover field details footer
Dec 7, 2020
50f57ef
Remove unused file
Dec 7, 2020
6990015
Remove fields formatting from index pattern
Dec 8, 2020
0965f30
Remove unnecessary check
Dec 8, 2020
ab4edb4
Addressing design comments
Dec 8, 2020
be9b9f4
Merge branch 'master' into discover-ssource-fields
Dec 8, 2020
1a6c620
Fixing fields column display and renaming it to Document
Dec 9, 2020
95ea135
Adding more unit tests
Dec 9, 2020
fc12250
Adding a missing check for useNewFieldsAPI; minor fixes
Dec 10, 2020
eb309ee
Fixing typescript error
Dec 10, 2020
b7a79d6
Remove unnecessary console statement
Dec 10, 2020
2b63157
Add missing prop
Dec 10, 2020
0f65832
Merge branch 'master' into discover-ssource-fields
kibanamachine Dec 10, 2020
fad95e7
Fixing import order
Dec 11, 2020
d3d38ef
Merge branch 'master' into discover-ssource-fields
kibanamachine Dec 14, 2020
e374d6f
Adding functional test to test fields API
Dec 14, 2020
5efe636
[Functional test] Clean up in after
Dec 14, 2020
24ab2ae
Fixing context app
Dec 15, 2020
88e81f0
Addressing PR comments
Dec 16, 2020
711c757
Merge branch 'master' into discover-ssource-fields
Dec 16, 2020
f03e800
Updating failed snapshot
Dec 16, 2020
0d150e6
Addressing PR comments
Dec 18, 2020
06112da
Fixing i18n translations, updating type
Dec 18, 2020
5eb9917
Addressing PR comments
Dec 18, 2020
b5bfbc0
Merge branch 'master' into discover-ssource-fields
Dec 18, 2020
3ac1ec3
Resolving merge conflicts
Dec 18, 2020
72fd6d5
Updating a functional test
Dec 19, 2020
1e85041
Add a separate functional test for fields API
Dec 19, 2020
1e1d313
Merge branch 'master' into discover-ssource-fields
kibanamachine Dec 19, 2020
88e07b4
Merge branch 'master' into discover-ssource-fields
kibanamachine Dec 21, 2020
e893b93
Read fields from source in a functional test
Dec 21, 2020
b917a39
Skip buggy test
Dec 21, 2020
67606c2
Use default behavior in functional tests
Dec 21, 2020
6ea034e
Fixing remaining failing tests
Dec 21, 2020
5083d44
Fixing date-nanos test
Dec 22, 2020
b1a7158
Updating FLS test
Dec 22, 2020
a16bebd
Merge master
Dec 23, 2020
756d240
Fixing yet another functional test
Dec 23, 2020
64a57df
Skipping non-relevant tests
Dec 24, 2020
f677240
Fixing more tests
Dec 24, 2020
ca8e798
Merge master
Jan 4, 2021
36251a8
Merge branch 'master' into discover-ssource-fields
kibanamachine Jan 11, 2021
8424d71
Merge branch 'master' into discover-ssource-fields
kibanamachine Jan 13, 2021
1caa777
Merge branch 'master' into discover-ssource-fields
Jan 13, 2021
290dfdf
Update stub import in test
Jan 14, 2021
27d77d6
Merge branch 'discover-ssource-fields' of https://github.com/majagrub…
Jan 14, 2021
02c37cf
Fix import
Jan 14, 2021
0eec11a
Fix invalid import
Jan 14, 2021
f1bd9e7
Merge branch 'master' into discover-ssource-fields
kibanamachine Jan 14, 2021
a37612a
Merge branch 'master' into discover-ssource-fields
Jan 15, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
380 changes: 256 additions & 124 deletions examples/search_examples/public/components/app.tsx

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/plugins/data/common/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export const UI_SETTINGS = {
COURIER_CUSTOM_REQUEST_PREFERENCE: 'courier:customRequestPreference',
COURIER_MAX_CONCURRENT_SHARD_REQUESTS: 'courier:maxConcurrentShardRequests',
COURIER_BATCH_SEARCHES: 'courier:batchSearches',
SEARCH_FIELDS_FROM_SOURCE: 'search:fieldsFromSource',
SEARCH_INCLUDE_FROZEN: 'search:includeFrozen',
SEARCH_TIMEOUT: 'search:timeout',
HISTOGRAM_BAR_TARGET: 'histogram:barTarget',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,10 @@ export function formatHitProvider(indexPattern: IndexPattern, defaultFormat: any
partials = {};
partialFormattedCache.set(hit, partials);
}

const val = fieldName === '_source' ? hit._source : indexPattern.flattenHit(hit)[fieldName];
const unformattedFields = ['fields', '_source'];
const val = unformattedFields.includes(fieldName)
? hit[fieldName]
: indexPattern.flattenHit(hit)[fieldName];
return convert(hit, val, fieldName);
};

Expand Down
87 changes: 83 additions & 4 deletions src/plugins/data/common/search/search_source/search_source.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ export const searchSourceRequiredUiSettings = [
UI_SETTINGS.COURIER_IGNORE_FILTER_IF_FIELD_NOT_IN_INDEX,
UI_SETTINGS.COURIER_MAX_CONCURRENT_SHARD_REQUESTS,
UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE,
UI_SETTINGS.SEARCH_FIELDS_FROM_SOURCE,
UI_SETTINGS.DOC_HIGHLIGHT,
UI_SETTINGS.META_FIELDS,
UI_SETTINGS.QUERY_ALLOW_LEADING_WILDCARDS,
Expand Down Expand Up @@ -404,8 +405,13 @@ export class SearchSource {
case 'query':
return addToRoot(key, (data[key] || []).concat(val));
case 'fields':
const fields = uniq((data[key] || []).concat(val));
return addToRoot(key, fields);
if (getConfig(UI_SETTINGS.SEARCH_FIELDS_FROM_SOURCE)) {
// preserve legacy behavior
const fields = uniq((data[key] || []).concat(val));
return addToRoot(key, fields);
}
// use new Fields API
return addToBody('fields', val);
case 'index':
case 'type':
case 'highlightAll':
Expand Down Expand Up @@ -451,8 +457,13 @@ export class SearchSource {
}

private flatten() {
const { getConfig } = this.dependencies;
const searchRequest = this.mergeProps();

if (!getConfig(UI_SETTINGS.SEARCH_FIELDS_FROM_SOURCE)) {
return this.flattenWithFieldsApi(searchRequest);
}

searchRequest.body = searchRequest.body || {};
const { body, index, fields, query, filters, highlightAll } = searchRequest;
searchRequest.indexType = this.getIndexType(index);
Expand All @@ -472,8 +483,6 @@ export class SearchSource {
body._source = index.getSourceFiltering();
}

const { getConfig } = this.dependencies;

if (body._source) {
// exclude source fields for this index pattern specified by the user
const filter = fieldWildcardFilter(body._source.excludes, getConfig(UI_SETTINGS.META_FIELDS));
Expand Down Expand Up @@ -507,6 +516,76 @@ export class SearchSource {
return searchRequest;
}

private flattenWithFieldsApi(searchRequest: Record<string, any>) {
const { getConfig } = this.dependencies;

searchRequest.body = searchRequest.body || {};
const { body, index, query, filters, highlightAll } = searchRequest;
searchRequest.indexType = this.getIndexType(index);

const fieldListProvided = !!body.fields;

// get some special field types from the index pattern
const { storedFields, scriptFields, docvalueFields } = index
? index.getComputedFields()
: {
storedFields: ['*'],
scriptFields: {},
docvalueFields: [],
};

// add docvalues to fields if no fields are explicitly provided
body.fields = fieldListProvided ? body.fields : docvalueFields;

// apply source filters from index pattern if specified by the user
if (index) {
const sourceFilters = index.getSourceFiltering();
if (!body.hasOwnProperty('_source')) {
body._source = sourceFilters;
}
const filter = fieldWildcardFilter(
sourceFilters.excludes,
getConfig(UI_SETTINGS.META_FIELDS)
);
body.fields = body.fields.filter((fld: any) =>
filter(typeof fld === 'string' ? fld : fld.field)
);
}

// add scripted fields
body.script_fields = pick(Object.assign(body.script_fields || {}, scriptFields), body.fields);
body.fields = body.fields.filter((fld: any) => {
const f = typeof fld === 'string' ? fld : fld.field;
return !Object.keys(body.script_fields).includes(f);
});

// request the remaining fields from stored_fields just in case, since the
// fields API does not handle stored fields
if (fieldListProvided) {
const bodyFieldNames = body.fields.map((field: any) =>
typeof field === 'string' ? field : field.field
);
const remainingFields = difference(bodyFieldNames, keys(body.script_fields));
body.stored_fields = remainingFields;

// remove _source, since everything's coming from fields API, scripted fields,
// or stored fields
body._source = false;
} else {
body.stored_fields = storedFields;
}

const esQueryConfigs = getEsQueryConfig({ get: getConfig });
body.query = buildEsQuery(index, query, filters, esQueryConfigs);

if (highlightAll && body.query) {
body.highlight = getHighlightRequest(body.query, getConfig(UI_SETTINGS.DOC_HIGHLIGHT));
delete searchRequest.highlightAll;
}

return searchRequest;
}

/**
* serializes search source fields (which can later be passed to {@link ISearchStartSearchSource})
*/
Expand Down
9 changes: 9 additions & 0 deletions src/plugins/data/server/ui_settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,15 @@ export function getUiSettings(): Record<string, UiSettingsParams<unknown>> {
category: ['search'],
schema: schema.boolean(),
},
[UI_SETTINGS.SEARCH_FIELDS_FROM_SOURCE]: {
name: 'Read fields from _source',
description: `Disable to retrieve fields via the new <a href="https://www.elastic.co/guide/en/elasticsearch/reference/master/search-fields.html#search-fields"
target="_blank" rel="noopener">Fields API</a> in the high-level search service. Keep this setting enabled
to continue retrieving fields directly from \`_source\`.`,
value: true,
category: ['search'],
schema: schema.boolean(),
},
[UI_SETTINGS.SEARCH_INCLUDE_FROZEN]: {
name: 'Search in frozen indices',
description: `Will include <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/frozen-indices.html"
Expand Down
65 changes: 55 additions & 10 deletions src/plugins/discover/public/application/angular/discover.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ import {
DOC_HIDE_TIME_COLUMN_SETTING,
MODIFY_COLUMNS_ON_SWITCH,
} from '../../../common';
import { UI_SETTINGS } from '../../../../data/common';

const fetchStatuses = {
UNINITIALIZED: 'uninitialized',
Expand Down Expand Up @@ -199,6 +200,14 @@ function discoverController($element, $route, $scope, $timeout, $window, Promise
const savedSearch = $route.current.locals.savedObjects.savedSearch;
$scope.searchSource = savedSearch.searchSource;
$scope.indexPattern = resolveIndexPatternLoading();
$scope.useNewFieldsApi = !$scope.searchSource.dependencies?.getConfig(
UI_SETTINGS.SEARCH_FIELDS_FROM_SOURCE
);
$scope.showUnmappedFields = false;
$scope.onShowUnmappedFieldsChange = (val) => {
$scope.showUnmappedFields = val;
majagrubic marked this conversation as resolved.
Show resolved Hide resolved
};
const FIRST_N_COLUMNS_FROM_FIELDS_RESPONSE = 3;
//used for functional testing
$scope.fetchCounter = 0;

Expand Down Expand Up @@ -291,7 +300,8 @@ function discoverController($element, $route, $scope, $timeout, $window, Promise
nextIndexPattern,
$scope.state.columns,
$scope.state.sort,
config.get(MODIFY_COLUMNS_ON_SWITCH)
config.get(MODIFY_COLUMNS_ON_SWITCH),
$scope.useNewFieldsApi
);
await replaceUrlAppState(nextAppState);
$route.reload();
Expand Down Expand Up @@ -594,15 +604,27 @@ function discoverController($element, $route, $scope, $timeout, $window, Promise
};
};

function getDefaultColumns() {
kertal marked this conversation as resolved.
Show resolved Hide resolved
const { columns } = savedSearch;
if ($scope.useNewFieldsApi) {
const indexOfSource = columns.indexOf('_source');
if (indexOfSource !== -1 && columns.splice(indexOfSource, 1).length > 0) {
return columns.splice(indexOfSource, 1).length > 0;
}
return [];
} else if (columns.length > 0) {
return columns;
}
return config.get(DEFAULT_COLUMNS_SETTING).slice();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎨 According to our style guide let's please prefer modern JS syntax here:

Suggested change
return config.get(DEFAULT_COLUMNS_SETTING).slice();
return [...config.get(DEFAULT_COLUMNS_SETTING)];

}

function getStateDefaults() {
const query = $scope.searchSource.getField('query') || data.query.queryString.getDefaultQuery();
const columns = getDefaultColumns();
return {
query,
sort: getSortArray(savedSearch.sort, $scope.indexPattern),
columns:
savedSearch.columns.length > 0
? savedSearch.columns
: config.get(DEFAULT_COLUMNS_SETTING).slice(),
columns,
index: $scope.indexPattern.id,
interval: 'auto',
filters: _.cloneDeep($scope.searchSource.getOwnField('filter')),
Expand Down Expand Up @@ -884,7 +906,18 @@ function discoverController($element, $route, $scope, $timeout, $window, Promise
}

$scope.hits = resp.hits.total;
$scope.rows = resp.hits.hits;
$scope.rows = resp.hits.hits.map((hit) => {
if ($scope.useNewFieldsApi) {
const fields = {};
Object.keys(hit.fields)
.splice(0, FIRST_N_COLUMNS_FROM_FIELDS_RESPONSE)
.forEach((key) => {
fields[key] = hit.fields[key];
});
return { ...hit, ...fields };
}
return hit;
});

// if we haven't counted yet, reset the counts
const counts = ($scope.fieldCounts = $scope.fieldCounts || {});
Expand All @@ -896,6 +929,14 @@ function discoverController($element, $route, $scope, $timeout, $window, Promise
});
});

if ($scope.useNewFieldsApi) {
// get some columns to display
if ($scope.state.columns.length === 0) {
const columns = ['fields'];
setAppState({ columns });
kertal marked this conversation as resolved.
Show resolved Hide resolved
}
}

$scope.fetchStatus = fetchStatuses.COMPLETE;
}

Expand Down Expand Up @@ -958,7 +999,7 @@ function discoverController($element, $route, $scope, $timeout, $window, Promise
};

$scope.updateDataSource = () => {
const { indexPattern, searchSource } = $scope;
const { indexPattern, searchSource, useNewFieldsApi } = $scope;
searchSource
.setField('index', $scope.indexPattern)
.setField('size', $scope.opts.sampleSize)
Expand All @@ -972,6 +1013,10 @@ function discoverController($element, $route, $scope, $timeout, $window, Promise
)
.setField('query', data.query.queryString.getQuery() || null)
.setField('filter', filterManager.getFilters());
if (useNewFieldsApi) {
searchSource.setField('fields', ['*']);
kertal marked this conversation as resolved.
Show resolved Hide resolved
searchSource.setField('source', false);
}
return Promise.resolve();
};

Expand All @@ -995,20 +1040,20 @@ function discoverController($element, $route, $scope, $timeout, $window, Promise
};

$scope.addColumn = function addColumn(columnName) {
const { indexPattern } = $scope;
if (uiCapabilities.discover.save) {
const { indexPattern } = $scope;
popularizeField(indexPattern, columnName, indexPatterns);
}
const columns = columnActions.addColumn($scope.state.columns, columnName);
setAppState({ columns });
};

$scope.removeColumn = function removeColumn(columnName) {
const { indexPattern, useNewFieldsApi } = $scope;
if (uiCapabilities.discover.save) {
const { indexPattern } = $scope;
popularizeField(indexPattern, columnName, indexPatterns);
}
const columns = columnActions.removeColumn($scope.state.columns, columnName);
const columns = columnActions.removeColumn($scope.state.columns, columnName, useNewFieldsApi);
// The state's sort property is an array of [sortByColumn,sortDirection]
const sort = $scope.state.sort.length
? $scope.state.sort.filter((subArr) => subArr[0] !== columnName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
update-query="handleRefresh"
update-saved-query-id="updateSavedQueryId"
vis="vis"
use-new-fields-api="useNewFieldsApi"
on-show-unmapped-fields-change="onShowUnmappedFieldsChange"
>
</discover-legacy>
</discover-app>
Original file line number Diff line number Diff line change
Expand Up @@ -22,27 +22,30 @@
* is empty, and removes _source if there are more than 1 columns given
* @param columns
*/
function buildColumns(columns: string[]) {
function buildColumns(columns: string[], useNewFieldsApi: boolean) {
if (columns.length > 1 && columns.indexOf('_source') !== -1) {
return columns.filter((col) => col !== '_source');
} else if (columns.length !== 0) {
return columns;
}
return ['_source'];
return useNewFieldsApi ? ['fields'] : ['_source'];
}

export function addColumn(columns: string[], columnName: string) {
if (columns.includes(columnName)) {
return columns;
}
return buildColumns([...columns, columnName]);
return buildColumns([...columns, columnName], false);
}

export function removeColumn(columns: string[], columnName: string) {
export function removeColumn(columns: string[], columnName: string, useNewFieldsApi: boolean) {
if (!columns.includes(columnName)) {
return columns;
}
return buildColumns(columns.filter((col) => col !== columnName));
return buildColumns(
columns.filter((col) => col !== columnName),
useNewFieldsApi
);
}

export function moveColumn(columns: string[], columnName: string, newIndex: number) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ export function getDisplayedColumns(
name: column,
displayName: isShortDots ? shortenDottedString(column) : column,
isSortable: field && field.sortable ? true : false,
isRemoveable: column !== '_source' || columns.length > 1,
isRemoveable: (column !== '_source' && column !== 'fields') || columns.length > 1,
colLeftIdx: idx - 1 < 0 ? -1 : idx - 1,
colRightIdx: idx + 1 >= columns.length ? -1 : idx + 1,
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,5 +52,7 @@ export function createDiscoverLegacyDirective(reactDirective: any) {
['updateQuery', { watchDepth: 'reference' }],
['updateSavedQueryId', { watchDepth: 'reference' }],
['vis', { watchDepth: 'reference' }],
['useNewFieldsApi', { watchDepth: 'reference' }],
['onShowUnmappedFieldsChange', { watchDepth: 'reference' }],
]);
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ export interface DiscoverLegacyProps {
updateQuery: (payload: { dateRange: TimeRange; query?: Query }, isUpdate?: boolean) => void;
updateSavedQueryId: (savedQueryId?: string) => void;
vis?: Vis;
useNewFieldsApi?: boolean;
onShowUnmappedFieldsChange: (value: boolean) => void;
}

export function DiscoverLegacy({
Expand Down Expand Up @@ -120,6 +122,8 @@ export function DiscoverLegacy({
updateQuery,
updateSavedQueryId,
vis,
useNewFieldsApi,
onShowUnmappedFieldsChange,
}: DiscoverLegacyProps) {
const [isSidebarClosed, setIsSidebarClosed] = useState(false);
const { TopNavMenu } = getServices().navigation.ui;
Expand Down Expand Up @@ -190,6 +194,8 @@ export function DiscoverLegacy({
onRemoveField={onRemoveColumn}
selectedIndexPattern={searchSource && searchSource.getField('index')}
setIndexPattern={setIndexPattern}
useNewFieldsApi={useNewFieldsApi}
onShowUnmappedFieldsChange={onShowUnmappedFieldsChange}
/>
</div>
)}
Expand Down
Loading