57 lines
1.6 KiB
TypeScript
57 lines
1.6 KiB
TypeScript
|
/*
|
||
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||
|
* or more contributor license agreements. Licensed under the Elastic License;
|
||
|
* you may not use this file except in compliance with the Elastic License.
|
||
|
*/
|
||
|
|
||
|
import { Filter } from 'src/plugins/data/public';
|
||
|
import { SavedObjectReference } from 'kibana/public';
|
||
|
import { PersistableFilter } from '../../common';
|
||
|
|
||
|
export function extractFilterReferences(
|
||
|
filters: Filter[]
|
||
|
): { persistableFilters: PersistableFilter[]; references: SavedObjectReference[] } {
|
||
|
const references: SavedObjectReference[] = [];
|
||
|
const persistableFilters = filters.map((filterRow, i) => {
|
||
|
if (!filterRow.meta || !filterRow.meta.index) {
|
||
|
return filterRow;
|
||
|
}
|
||
|
const refName = `filter-index-pattern-${i}`;
|
||
|
references.push({
|
||
|
name: refName,
|
||
|
type: 'index-pattern',
|
||
|
id: filterRow.meta.index,
|
||
|
});
|
||
|
return {
|
||
|
...filterRow,
|
||
|
meta: {
|
||
|
...filterRow.meta,
|
||
|
indexRefName: refName,
|
||
|
index: undefined,
|
||
|
},
|
||
|
};
|
||
|
});
|
||
|
|
||
|
return { persistableFilters, references };
|
||
|
}
|
||
|
|
||
|
export function injectFilterReferences(
|
||
|
filters: PersistableFilter[],
|
||
|
references: SavedObjectReference[]
|
||
|
) {
|
||
|
return filters.map((filterRow) => {
|
||
|
if (!filterRow.meta || !filterRow.meta.indexRefName) {
|
||
|
return filterRow as Filter;
|
||
|
}
|
||
|
const { indexRefName, ...metaRest } = filterRow.meta;
|
||
|
const reference = references.find((ref) => ref.name === indexRefName);
|
||
|
if (!reference) {
|
||
|
throw new Error(`Could not find reference for ${indexRefName}`);
|
||
|
}
|
||
|
return {
|
||
|
...filterRow,
|
||
|
meta: { ...metaRest, index: reference.id },
|
||
|
};
|
||
|
});
|
||
|
}
|