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

TypeScriptify index_patterns/index_patterns/flatten_hit.js #45269

Merged
merged 7 commits into from
Sep 16, 2019
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,19 @@
*/

import _ from 'lodash';
import { IndexPattern } from './';

// Takes a hit, merges it with any stored/scripted fields, and with the metaFields
// returns a flattened version

function flattenHit(indexPattern, hit, deep) {
const flat = {};
function flattenHit(indexPattern: IndexPattern, hit: Record<string, any>, deep: boolean) {
const flat = {} as Record<string, any>;

// recursively merge _source
const fields = indexPattern.fields.byName;
(function flatten(obj, keyPrefix) {
(function flatten(obj, keyPrefix = '') {
keyPrefix = keyPrefix ? keyPrefix + '.' : '';
_.forOwn(obj, function (val, key) {
_.forOwn(obj, function(val, key) {
key = keyPrefix + key;

if (deep) {
Expand All @@ -52,28 +53,28 @@ function flattenHit(indexPattern, hit, deep) {
} else if (Array.isArray(flat[key])) {
flat[key].push(val);
} else {
flat[key] = [ flat[key], val ];
flat[key] = [flat[key], val];
}
return;
}

flatten(val, key);
});
}(hit._source));
})(hit._source);

return flat;
}

function decorateFlattenedWrapper(hit, metaFields) {
return function (flattened) {
function decorateFlattenedWrapper(hit: Record<string, any>, metaFields: Record<string, any>) {
return function(flattened: Record<string, any>) {
// assign the meta fields
_.each(metaFields, function (meta) {
_.each(metaFields, function(meta) {
if (meta === '_source') return;
flattened[meta] = hit[meta];
});

// unwrap computed fields
_.forOwn(hit.fields, function (val, key) {
_.forOwn(hit.fields, function(val, key: any) {
if (key[0] === '_' && !_.contains(metaFields, key)) return;
flattened[key] = Array.isArray(val) && val.length === 1 ? val[0] : val;
});
Expand All @@ -88,8 +89,12 @@ function decorateFlattenedWrapper(hit, metaFields) {
*
* @internal
*/
export function flattenHitWrapper(indexPattern, metaFields = {}, cache = new WeakMap()) {
return function cachedFlatten(hit, deep = false) {
export function flattenHitWrapper(
indexPattern: IndexPattern,
metaFields = {},
cache = new WeakMap()
) {
return function cachedFlatten(hit: Record<string, any>, deep = false) {
const decorateFlattened = decorateFlattenedWrapper(hit, metaFields);
const cached = cache.get(hit);
const flattened = cached || flattenHit(indexPattern, hit, deep);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
* under the License.
*/

// @ts-ignore
export * from './flatten_hit';
export * from './format_hit';
export * from './index_pattern';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ import { Field, FieldList, FieldType } from '../fields';
import { createFieldsFetcher } from './_fields_fetcher';
import { getRoutes } from '../utils';
import { formatHitProvider } from './format_hit';
// @ts-ignore
import { flattenHitWrapper } from './flatten_hit';
import { IndexPatternsApiClient } from './index_patterns_api_client';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@
*/

import { IndexPatternsService, IndexPatternsSetup } from '.';
// @ts-ignore
import { flattenHitWrapper } from './index_patterns/flatten_hit';
import { flattenHitWrapper } from './index_patterns';

type IndexPatternsServiceClientContract = PublicMethodsOf<IndexPatternsService>;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@

import { UiSettingsClientContract, SavedObjectsClientContract } from 'src/core/public';
import { Field, FieldList, FieldType } from './fields';
// @ts-ignore
import { createFlattenHitWrapper } from './index_patterns/flatten_hit';
import { createFlattenHitWrapper } from './index_patterns';
import { createIndexPatternSelect } from './components';
import {
formatHitProvider,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ import { mount } from 'enzyme';
import { IndexPattern } from 'ui/index_patterns';
// @ts-ignore
import { findTestSubject } from '@elastic/eui/lib/test';
// @ts-ignore
import { flattenHitWrapper } from '../../../../data/public/index_patterns/index_patterns/flatten_hit';
import { flattenHitWrapper } from '../../../../data/public/index_patterns/index_patterns';
import { DocViewTable } from './table';

// @ts-ignore
Expand Down