UNPKG

office-ui-fabric-react

Version:

Reusable React components for building experiences for Office 365.

254 lines (253 loc) • 10.4 kB
import * as React from 'react'; import { DetailsList } from './DetailsList'; import { ISelection, SelectionMode } from '../../utilities/selection/index'; import { IDragDropEvents, IDragDropContext } from './../../utilities/dragdrop/index'; import { IGroup, IGroupRenderProps } from '../GroupedList/index'; import { IDetailsRowProps } from '../DetailsList/DetailsRow'; import { IViewport } from '../../utilities/decorators/withViewport'; export interface IDetailsList { /** * Ensures that the list content is updated. Call this in cases where the list prop updates don't change, but the list * still needs to be re-evaluated. For example, if a sizer bar is adjusted and causes the list width to change, you can * call this to force a re-evaluation. Be aware that this can be an expensive operation and should be done sparingly. */ forceUpdate: () => void; } export interface IDetailsListProps extends React.Props<DetailsList> { /** A key that uniquely identifies the given items. If provided, the selection will be reset when the key changes. */ setKey?: string; /** The items to render. */ items: any[]; /** * Optional default focused index to set focus to once the items have rendered and the index exists. */ initialFocusedIndex?: number; /** Optional class name to add to the root element. */ className?: string; /** Optional grouping instructions. The definition for IGroup can be found under the GroupedList component. */ groups?: IGroup[]; /** Optional override properties to render groups. The definition for IGroupRenderProps can be found under the GroupedList component. */ groupProps?: IGroupRenderProps; /** Optional selection model to track selection state. */ selection?: ISelection; /** Controls how/if the details list manages selection. */ selectionMode?: SelectionMode; /** Controls how the columns are adjusted. */ layoutMode?: DetailsListLayoutMode; /** * Controls the visibility of selection check box. * @default CheckboxVisibility.onHover */ checkboxVisibility?: CheckboxVisibility; /** * Controls the visibility of the details header. * @default true */ isHeaderVisible?: boolean; /** Given column defitions. If none are provided, default columns will be created based on the item's properties. */ columns?: IColumn[]; /** Controls how the list contrains overflow. */ constrainMode?: ConstrainMode; /** Event names and corresponding callbacks that will be registered to rendered row elements. */ rowElementEventMap?: [{ eventName: string; callback: (context: IDragDropContext, event?: any) => void; }]; /** Callback for when the details list has been updated. Useful for telemetry tracking externally. */ onDidUpdate?: (detailsList?: DetailsList) => any; /** Callback for when a given row has been mounted. Useful for identifying when a row has been rendered on the page. */ onRowDidMount?: (item?: any, index?: number) => void; /** Callback for when a given row has been mounted. Useful for identifying when a row has been removed from the page. */ onRowWillUnmount?: (item?: any, index?: number) => void; /** Callback for when the user clicks on the column header. */ onColumnHeaderClick?: (ev?: React.MouseEvent<HTMLElement>, column?: IColumn) => void; /** Callback for when the user asks for a contextual menu (usually via right click) from a column header. */ onColumnHeaderContextMenu?: (column?: IColumn, ev?: Event) => void; /** Callback for when a given row has been invoked (by pressing enter while it is selected.) */ onItemInvoked?: (item?: any, index?: number, ev?: Event) => void; /** Callback for when the context menu of an item has been accessed. */ onItemContextMenu?: (item?: any, index?: number, ev?: Event) => void; /** * If provided, will allow the caller to override the default row rendering. */ onRenderRow?: (props: IDetailsRowProps, defaultRender?: (props: IDetailsRowProps) => JSX.Element) => JSX.Element; /** * If provided, will be the "default" item column renderer method. This affects cells within the rows; not the rows themselves. * If a column definition provides its own onRender method, that will be used instead of this. */ onRenderItemColumn?: (item?: any, index?: number, column?: IColumn) => any; /** Map of callback functions related to drag and drop functionality. */ dragDropEvents?: IDragDropEvents; /** Callback for what to render when the item is missing. */ onRenderMissingItem?: (index?: number) => React.ReactNode; /** Viewport, provided by the withViewport decorator. */ viewport?: IViewport; /** Callback for when an item in the list becomes active by clicking anywhere inside the row or navigating to it with keyboard. */ onActiveItemChanged?: (item?: any, index?: number, ev?: React.FocusEvent<HTMLElement>) => void; /** The aria-label attribute to stamp out on the list header */ ariaLabelForListHeader?: string; /** The aria-label attribute to stamp out on select all checkbox for the list */ ariaLabelForSelectAllCheckbox?: string; /** Optional callback to get the aria-label string for a given item. */ getRowAriaLabel?: (item: any) => string; /** Optional callback to get the item key that will be used in the selection. */ getKey?: (item: any, index?: number) => string; /** A text summary of the table set via aria-label. */ ariaLabel?: string; /** Check button aria label for details list. */ checkButtonAriaLabel?: string; /** Aria label for grid in details list. */ ariaLabelForGrid?: string; /** Boolean value to indicate if the role application should be applied on details list. Set to false by default */ shouldApplyApplicationRole?: boolean; } export interface IColumn { /** * A unique key for identifying the column. */ key: string; /** * Name to render on the column header. */ name: string; /** * The field to pull the text value from for the column. This can be null if a custom * onRender method is provided. */ fieldName: string; /** * An optional class name to stick on the column cell within each row. */ className?: string; /** * Minimum width for the column. */ minWidth: number; /** * Optional accessibility label (aria-label) attribute that will be stamped on to the element. * If none is specified, the arai-label attribute will contain the column name */ ariaLabel?: string; /** * Optional flag on whether the column is a header for the given row. There should be only one column with * row header set to true. * @default false */ isRowHeader?: boolean; /** * Maximum width for the column, if stretching is allowed in justified scenarios. */ maxWidth?: number; /** * Defines how the column's header should render. * @default ColumnActionsMode.clickable */ columnActionsMode?: ColumnActionsMode; /** * Icon name to show in addition to the text. */ iconClassName?: string; /** * If specified will allow the column to be collapsed when rendered in justified layout. */ isCollapsable?: boolean; /** * Determines if the column is currently sorted. Renders a sort arrow in the column header. */ isSorted?: boolean; /** * Determines if the arrow is pointed down (descending) or up. */ isSortedDescending?: boolean; /** * Determines if the column can be resized. */ isResizable?: boolean; /** * Determines if the column can render multi-line text. */ isMultiline?: boolean; /** * If provided uses this method to render custom cell content, rather than the default text rendering. */ onRender?: (item?: any, index?: number, column?: IColumn) => any; /** * Determines if the column is filtered, and if so shows a filter icon. */ isFiltered?: boolean; /** * If provided, will be executed when the user clicks on the column header. */ onColumnClick?: (ev?: React.MouseEvent<HTMLElement>, column?: IColumn) => any; /** * If provided, will be executed when the user accesses the contextmenu on a column header. */ onColumnContextMenu?: (column?: IColumn, ev?: React.MouseEvent<HTMLElement>) => any; /** * If set will show a grouped icon next to the column header name. */ isGrouped?: boolean; /** * Arbitrary data passthrough which can be used by the caller. */ data?: any; /** * Internal only value. */ calculatedWidth?: number; /** * An optional class name to stick on the column cell within each header. */ headerClassName?: string; } /** * Enum to describe how a particular column header behaves.... This enum is used to * to specify the property IColumn:columnActionsMode. * If IColumn:columnActionsMode is undefined, then it's equivalent to ColumnActionsMode.clickable */ export declare enum ColumnActionsMode { /** * Renders the column header as disabled. */ disabled = 0, /** * Renders the column header is clickable. */ clickable = 1, /** * Renders the column header ias clickable and displays the dropdown cheveron. */ hasDropdown = 2, } export declare enum ConstrainMode { /** If specified, lets the content grow which allows the page to manage scrolling. */ unconstrained = 0, /** * If specified, constrains the list to the given layout space. */ horizontalConstrained = 1, } export declare enum DetailsListLayoutMode { /** * Lets the user resize columns and makes not attempt to fit them. */ fixedColumns = 0, /** * Manages which columns are visible, tries to size them according to their min/max rules and drops * off columns that can't fit and have isCollapsable set. */ justified = 1, } export declare enum CheckboxVisibility { /** * Visible on hover. */ onHover = 0, /** * Visible always. */ always = 1, /** * Hide checkboxes. */ hidden = 2, }