/* * 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 React, { useEffect, useState } from 'react'; import ReactDOM from 'react-dom'; import type { AppMountParameters, CoreStart } from '@kbn/core/public'; import { buildDataTableRecord } from '@kbn/discover-utils'; import type { DataTableRecord } from '@kbn/discover-utils/types'; import type { DataView } from '@kbn/data-views-plugin/common'; import { UnifiedDocViewer } from '@kbn/unified-doc-viewer-plugin/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { StartDeps } from './plugin'; export const renderApp = ( core: CoreStart, { data }: StartDeps, { element }: AppMountParameters ) => { ReactDOM.render(, element); return () => { ReactDOM.unmountComponentAtNode(element); }; }; function UnifiedDocViewerExamplesApp({ data }: { data: DataPublicPluginStart }) { const [dataView, setDataView] = useState(); const [hit, setHit] = useState(); useEffect(() => { data.dataViews.getDefault().then((defaultDataView) => setDataView(defaultDataView)); }, [data]); useEffect(() => { const setDefaultHit = async () => { if (!dataView?.id) return; const response = await data.search .search({ params: { index: dataView?.getIndexPattern(), body: { fields: ['*'], _source: false, }, }, }) .toPromise(); const docs = response?.rawResponse?.hits?.hits ?? []; if (docs.length > 0) { const record = buildDataTableRecord(docs[0], dataView); setHit(record); } }; setDefaultHit(); }, [data, dataView]); return ( <> {dataView?.id && hit ? ( ) : ( 'Loading... (make sure you have a default data view and at least one matching document)' )} ); }