import React from 'react'; import {TableWithControlsLayout} from '../TableWithControlsLayout/TableWithControlsLayout'; import type {TableWrapperProps} from '../TableWithControlsLayout/TableWithControlsLayout'; import {PaginatedTableProvider, usePaginatedTableState} from './PaginatedTableContext'; import type {PaginatedTableState} from './types'; export interface PaginatedTableWithLayoutProps { controls?: React.ReactNode; extraControls?: React.ReactNode; table: React.ReactNode; footer?: React.ReactNode; tableWrapperProps?: Omit; error?: React.ReactNode; initialState?: Partial; fullHeight?: boolean; noBatching?: boolean; inheritKeyboardNavigation?: boolean; } const TableWrapper = ({ table, tableWrapperProps, }: { table: React.ReactNode; tableWrapperProps?: Omit; }) => { const {tableState} = usePaginatedTableState(); const {sortParams} = tableState; const enhancedTableWrapperProps = React.useMemo(() => { const existingScrollDependencies = tableWrapperProps?.scrollDependencies || []; return { ...tableWrapperProps, scrollDependencies: [...existingScrollDependencies, sortParams], }; }, [tableWrapperProps, sortParams]); return ( {table} ); }; const ControlsSection = ({ controls, extraControls, }: { controls?: React.ReactNode; extraControls?: React.ReactNode; }) => { if (!controls && !extraControls) { return null; } return ( extraControls}> {controls} ); }; const ErrorSection = ({error}: {error?: React.ReactNode}) => { if (!error) { return null; } return {error}; }; const FooterSection = ({footer}: {footer?: React.ReactNode}) => { if (!footer) { return null; } return {footer}; }; export const PaginatedTableWithLayout = ({ controls, extraControls, table, footer, tableWrapperProps, error, initialState, noBatching, fullHeight = true, inheritKeyboardNavigation = false, }: PaginatedTableWithLayoutProps) => { return ( ); };