[discover] Extract discover grid flyout from discover grid component (#147403)

## Summary

Extract discover grid flyout from discover grid component. Part of
effort to turn discover into set of components consumable by other
kibana apps.

Closes https://github.com/elastic/kibana/issues/144154
This commit is contained in:
Matthew Kime 2022-12-16 10:21:06 -06:00 committed by GitHub
parent 90b1399531
commit e43ccd13c6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 21 additions and 7 deletions

View file

@ -23,6 +23,7 @@ import { MAX_CONTEXT_SIZE, MIN_CONTEXT_SIZE } from './services/constants';
import { DocTableContext } from '../../components/doc_table/doc_table_context'; import { DocTableContext } from '../../components/doc_table/doc_table_context';
import { useDiscoverServices } from '../../hooks/use_discover_services'; import { useDiscoverServices } from '../../hooks/use_discover_services';
import type { DataTableRecord } from '../../types'; import type { DataTableRecord } from '../../types';
import { DiscoverGridFlyout } from '../../components/discover_grid/discover_grid_flyout';
export interface ContextAppContentProps { export interface ContextAppContentProps {
columns: string[]; columns: string[];
@ -160,6 +161,7 @@ export function ContextAppContent({
onAddColumn={onAddColumn} onAddColumn={onAddColumn}
onRemoveColumn={onRemoveColumn} onRemoveColumn={onRemoveColumn}
onSetColumns={onSetColumns} onSetColumns={onSetColumns}
DocumentView={DiscoverGridFlyout}
/> />
</div> </div>
)} )}

View file

@ -37,6 +37,7 @@ import { DocumentExplorerUpdateCallout } from '../document_explorer_callout/docu
import { DiscoverTourProvider } from '../../../../components/discover_tour'; import { DiscoverTourProvider } from '../../../../components/discover_tour';
import { DataTableRecord } from '../../../../types'; import { DataTableRecord } from '../../../../types';
import { getRawRecordType } from '../../utils/get_raw_record_type'; import { getRawRecordType } from '../../utils/get_raw_record_type';
import { DiscoverGridFlyout } from '../../../../components/discover_grid/discover_grid_flyout';
const DocTableInfiniteMemoized = React.memo(DocTableInfinite); const DocTableInfiniteMemoized = React.memo(DocTableInfinite);
const DataGridMemoized = React.memo(DiscoverGrid); const DataGridMemoized = React.memo(DiscoverGrid);
@ -216,6 +217,7 @@ function DiscoverDocumentsComponent({
onUpdateRowsPerPage={onUpdateRowsPerPage} onUpdateRowsPerPage={onUpdateRowsPerPage}
onFieldEdited={onFieldEdited} onFieldEdited={onFieldEdited}
savedSearchId={savedSearch.id} savedSearchId={savedSearch.id}
DocumentView={DiscoverGridFlyout}
/> />
</div> </div>
</> </>

View file

@ -187,6 +187,10 @@ export interface DiscoverGridProps {
* Saved search id used for links to single doc and surrounding docs in the flyout * Saved search id used for links to single doc and surrounding docs in the flyout
*/ */
savedSearchId?: string; savedSearchId?: string;
/**
* Document detail view component
*/
DocumentView?: typeof DiscoverGridFlyout;
} }
export const EuiDataGridMemoized = React.memo(EuiDataGrid); export const EuiDataGridMemoized = React.memo(EuiDataGrid);
@ -226,6 +230,7 @@ export const DiscoverGrid = ({
rowsPerPageState, rowsPerPageState,
onUpdateRowsPerPage, onUpdateRowsPerPage,
onFieldEdited, onFieldEdited,
DocumentView,
}: DiscoverGridProps) => { }: DiscoverGridProps) => {
const dataGridRef = useRef<EuiDataGridRefProps>(null); const dataGridRef = useRef<EuiDataGridRefProps>(null);
const services = useDiscoverServices(); const services = useDiscoverServices();
@ -445,9 +450,13 @@ export const DiscoverGrid = ({
} }
return { columns: sortingColumns, onSort: () => {} }; return { columns: sortingColumns, onSort: () => {} };
}, [sortingColumns, onTableSort, isSortEnabled]); }, [sortingColumns, onTableSort, isSortEnabled]);
const canSetExpandedDoc = Boolean(setExpandedDoc && DocumentView);
const lead = useMemo( const lead = useMemo(
() => getLeadControlColumns(setExpandedDoc).filter(({ id }) => controlColumnIds.includes(id)), () =>
[controlColumnIds, setExpandedDoc] getLeadControlColumns(canSetExpandedDoc).filter(({ id }) => controlColumnIds.includes(id)),
[controlColumnIds, canSetExpandedDoc]
); );
const additionalControls = useMemo( const additionalControls = useMemo(
@ -625,8 +634,8 @@ export const DiscoverGrid = ({
</p> </p>
</EuiScreenReaderOnly> </EuiScreenReaderOnly>
)} )}
{setExpandedDoc && expandedDoc && ( {setExpandedDoc && expandedDoc && DocumentView && (
<DiscoverGridFlyout <DocumentView
dataView={dataView} dataView={dataView}
hit={expandedDoc} hit={expandedDoc}
hits={displayedRows} hits={displayedRows}

View file

@ -20,7 +20,6 @@ import { SelectButton } from './discover_grid_document_selection';
import { defaultTimeColumnWidth } from './constants'; import { defaultTimeColumnWidth } from './constants';
import { buildCopyColumnNameButton, buildCopyColumnValuesButton } from './build_copy_column_button'; import { buildCopyColumnNameButton, buildCopyColumnValuesButton } from './build_copy_column_button';
import { DiscoverServices } from '../../build_services'; import { DiscoverServices } from '../../build_services';
import { DataTableRecord } from '../../types';
import { buildEditFieldButton } from './build_edit_field_button'; import { buildEditFieldButton } from './build_edit_field_button';
const openDetails = { const openDetails = {
@ -53,8 +52,8 @@ const select = {
), ),
}; };
export function getLeadControlColumns(setExpandedDoc?: (doc?: DataTableRecord) => void) { export function getLeadControlColumns(canSetExpandedDoc: boolean) {
if (!setExpandedDoc) { if (!canSetExpandedDoc) {
return [select]; return [select];
} }
return [openDetails, select]; return [openDetails, select];

View file

@ -11,6 +11,7 @@ import { DataTableRecord } from '../types';
import { DiscoverGrid, DiscoverGridProps } from '../components/discover_grid/discover_grid'; import { DiscoverGrid, DiscoverGridProps } from '../components/discover_grid/discover_grid';
import { TotalDocuments } from '../application/main/components/total_documents/total_documents'; import { TotalDocuments } from '../application/main/components/total_documents/total_documents';
import './saved_search_grid.scss'; import './saved_search_grid.scss';
import { DiscoverGridFlyout } from '../components/discover_grid/discover_grid_flyout';
export interface DiscoverGridEmbeddableProps extends DiscoverGridProps { export interface DiscoverGridEmbeddableProps extends DiscoverGridProps {
totalHitCount: number; totalHitCount: number;
@ -39,6 +40,7 @@ export function DiscoverGridEmbeddable(props: DiscoverGridEmbeddableProps) {
{...props} {...props}
setExpandedDoc={!props.isPlainRecord ? setExpandedDoc : undefined} setExpandedDoc={!props.isPlainRecord ? setExpandedDoc : undefined}
expandedDoc={expandedDoc} expandedDoc={expandedDoc}
DocumentView={DiscoverGridFlyout}
/> />
</EuiFlexItem> </EuiFlexItem>
</EuiFlexGroup> </EuiFlexGroup>