import * as React from 'react'; import { DetailsList, DetailsListLayoutMode, IDetailsListStyles, IDetailsHeaderProps, ConstrainMode, IDetailsFooterProps, DetailsRow, } from '@fluentui/react/lib/DetailsList'; import { IRenderFunction } from '@fluentui/react/lib/Utilities'; import { TooltipHost } from '@fluentui/react/lib/Tooltip'; import { SelectionMode } from '@fluentui/react/lib/Selection'; import { mergeStyleSets } from '@fluentui/react/lib/Styling'; import { IDetailsColumnRenderTooltipProps } from '@fluentui/react/lib/DetailsList'; export interface IScrollablePaneDetailsListExampleItem { key: number | string; test1: string; test2: string; test3: string; test4: string; test5: string; test6: string; } const gridStyles: Partial = { root: { overflowX: 'scroll', selectors: { '& [role=grid]': { display: 'flex', flexDirection: 'column', alignItems: 'start', height: '60vh', }, }, }, headerWrapper: { flex: '0 0 auto', }, contentWrapper: { flex: '1 1 auto', overflowY: 'auto', overflowX: 'hidden', }, }; const classNames = mergeStyleSets({ header: { margin: 0, }, row: { flex: '0 0 auto', }, }); const footerItem: IScrollablePaneDetailsListExampleItem = { key: 'footer', test1: 'Footer 1', test2: 'Footer 2', test3: 'Footer 3', test4: 'Footer 4', test5: 'Footer 5', test6: 'Footer 6', }; const LOREM_IPSUM = ( 'lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut ' + 'labore et dolore magna aliqua ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut ' + 'aliquip ex ea commodo consequat duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore ' + 'eu fugiat nulla pariatur excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt ' ).split(' '); let loremIndex = 0; const lorem = (wordCount: number): string => { const startIndex = loremIndex + wordCount > LOREM_IPSUM.length ? 0 : loremIndex; loremIndex = startIndex + wordCount; return LOREM_IPSUM.slice(startIndex, loremIndex).join(' '); }; const allItems = Array.from({ length: 200 }).map((item, index) => ({ key: index, test1: lorem(4), test2: lorem(4), test3: lorem(4), test4: lorem(4), test5: lorem(4), test6: lorem(4), })); const columns = Array.from({ length: 6 }).map((item, index) => ({ key: 'column' + (index + 1), name: 'Test ' + (index + 1), fieldName: 'test' + (index + 1), minWidth: 100, maxWidth: 200, isResizable: true, })); const onItemInvoked = (item: IScrollablePaneDetailsListExampleItem): void => { alert('Item invoked: ' + item.test1); }; const onRenderDetailsHeader: IRenderFunction = (props, defaultRender) => { if (!props) { return null; } const onRenderColumnHeaderTooltip: IRenderFunction = tooltipHostProps => ( ); return defaultRender!({ ...props, onRenderColumnHeaderTooltip, }); }; const onRenderDetailsFooter: IRenderFunction = (props, defaultRender) => { if (!props) { return null; } return (
); }; export const ScrollablePaneDetailsListExample: React.FunctionComponent = () => { return (

Item list

); };