diff --git a/x-pack/plugins/lens/public/embeddable/embeddable.tsx b/x-pack/plugins/lens/public/embeddable/embeddable.tsx index 6335581775b5a..3bddbc789f257 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable.tsx +++ b/x-pack/plugins/lens/public/embeddable/embeddable.tsx @@ -74,7 +74,12 @@ import { LensAttributeService } from '../lens_attribute_service'; import type { ErrorMessage, TableInspectorAdapter } from '../editor_frame_service/types'; import { getLensInspectorService, LensInspector } from '../lens_inspector_service'; import { SharingSavedObjectProps, VisualizationDisplayOptions } from '../types'; -import { getActiveDatasourceIdFromDoc, getIndexPatternsObjects, inferTimeField } from '../utils'; +import { + getActiveDatasourceIdFromDoc, + getIndexPatternsObjects, + inferTimeField, + getAdHocIndexSpecs, +} from '../utils'; import { getLayerMetaInfo, combineQueryAndFilters } from '../app_plugin/show_underlying_data'; import { convertDataViewIntoLensIndexPattern } from '../indexpattern_service/loader'; @@ -840,6 +845,19 @@ export class Embeddable this.savedVis?.references.map(({ id }) => id) || [], this.deps.dataViews ); + const activeDatasourceId = getActiveDatasourceIdFromDoc(this.savedVis); + if (activeDatasourceId) { + const activeDatasource = this.deps.datasourceMap[activeDatasourceId]; + const dataSourceState = this.savedVis?.state.datasourceStates[activeDatasourceId]; + const { adHocDataviews } = await getAdHocIndexSpecs( + activeDatasource, + dataSourceState, + this.deps.dataViews + ); + if (adHocDataviews.length) { + indexPatterns.push(...adHocDataviews); + } + } this.indexPatterns = uniqBy(indexPatterns, 'id'); diff --git a/x-pack/plugins/lens/public/utils.ts b/x-pack/plugins/lens/public/utils.ts index 6ebf1cb7d3f83..5a903bc5c327c 100644 --- a/x-pack/plugins/lens/public/utils.ts +++ b/x-pack/plugins/lens/public/utils.ts @@ -150,6 +150,27 @@ export async function getIndexPatternsObjects( return { indexPatterns: fullfilled.map((response) => response.value), rejectedIds }; } +export async function getAdHocIndexSpecs( + dataSource: Datasource, + dataSourceState: unknown, + dataViews: DataViewsContract +): Promise<{ adHocDataviews: DataView[] }> { + const adHocIndexPatterns = dataSource?.getAdHocIndexSpecs?.(dataSourceState); + + const adHocDataviews: DataView[] = []; + + if (adHocIndexPatterns) { + const adHocSpecs = Object.values(adHocIndexPatterns); + if (adHocSpecs?.length) { + for (const addHocDataView of adHocSpecs) { + const d = await dataViews.create(addHocDataView); + adHocDataviews.push(d); + } + } + } + return { adHocDataviews }; +} + export function getRemoveOperation( activeVisualization: Visualization, visualizationState: VisualizationState['state'],