/// import { IListSelection } from '../../List'; import { IListBoxItem, IListBoxSharedProps } from '../../ListBox'; import { ISelectionRange } from '../../Utilities/Selection'; import { IDropdownCalloutProps } from "./DropdownCallout.Props"; import { IDropdownExpandableProps, IDropdownExpandableTextFieldProps } from "./DropdownExpandable.Props"; export interface IDropdownProps extends IListBoxSharedProps, Pick, "actions" | "calloutContentClassName" | "filteredNoResultsText" | "filterPlaceholderText" | "noItemsText" | "showFilterBox" | "userFilteredItems" | "userFilteredItemsIndexMap" | "renderBeforeContent" | "showTree" | "portalProps" | "onFilterTextChanged">, Pick, "ariaLabel" | "ariaLabelledBy" | "ariaDescribedBy" | "className" | "disabled" | "excludeTabStop" | "inputId" | "onCollapse" | "onExpand" | "placeholder" | "required">, Pick { /** * Set to false to keep the callout open when an item is selected. * By default the callout will close on select unless multiselect or selectOnFocus is enabled on selection. */ dismissOnSelect?: boolean; /** * A custom way to force single-select options in a multi-select selection. */ enforceSingleSelect?: boolean; /** * Set to false to not do any text filtering when the user types in the filter box. Do this if you want * to control filtering through userFilteredItems. * @default: true */ filterByText?: boolean; /** * Optional method to perform a custom filter of items based on filter text. * If not provided, it will filter items based on item.text. */ filterItem?: (filterText: string, item: IListBoxItem, items: IListBoxItem[]) => boolean | number[]; /** * The throttle wait time to use when updating the filter. The text field * will still update on every keystroke, but the updating the filter * itself will be throttled by this amount. The default value is 0 ms. * Passing a value of 0 here will cause this text field not to be throttled. */ filterThrottleWait?: number; /** * This is called when updates are made to the listBox items to update the unselectbale items in the selection. */ getUnselectableRanges?: (items: IListBoxItem[]) => ISelectionRange[]; /** * Function which returns the callout for this dropdpown. */ renderCallout?: (props: IDropdownCalloutProps) => JSX.Element; /** * Function which returns the Expandable for this dropdown. */ renderExpandable?: (props: IDropdownExpandableProps) => JSX.Element; /** * Renderer for selected items in the expandable. Defaults to rendering the selected item's text. */ renderSelectedItems?: (selection: IListSelection, items: IListBoxItem[]) => JSX.Element | string; /** * Optional aria role */ role?: string; /** * Whether or not to display a column with checks or checkboxes for selected items. */ showChecksColumn?: boolean; /** * Specifies whether items should be sorted by startsWith matching when filtering. */ startsWithSort?: boolean; /** * Supply for a custom width for the callout. By default, the callout's width will be the same as the * expandable. To change the expandable width, set a className. */ width?: number; /** * Provide a minimum width for the callout */ minCalloutWidth?: number; } /** * Result from filtering a list of dropdown items */ export interface IFilterResults { /** * The array of items matching the filter */ filteredItems: IListBoxItem[]; /** * An arrary mapping each filteredItem to its index in the original items array */ filteredIndexMap: number[]; /** * An array of indices of matches within each given item (used to bold the matching text) */ filterMatches: number[][]; }