office-ui-fabric-react
Version:
Reusable React components for building experiences for Office 365.
234 lines (233 loc) • 8.81 kB
TypeScript
import * as React from 'react';
import { IRenderFunction, IStyleFunctionOrObject } from '../../Utilities';
import { IStyle, ITheme } from '../../Styling';
import { ISelectableOption } from '../../utilities/selectableOption/SelectableOption.types';
import { ISelectableDroppableTextProps } from '../../utilities/selectableOption/SelectableDroppableText.types';
import { ResponsiveMode } from '../../utilities/decorators/withResponsiveMode';
import { IKeytipProps } from '../../Keytip';
import { ILabelStyleProps } from '../../Label';
import { RectangleEdge } from '../../utilities/positioning';
import { IPanelStyleProps } from '../Panel/Panel.types';
export { SelectableOptionMenuItemType as DropdownMenuItemType } from '../../utilities/selectableOption/SelectableOption.types';
export { ResponsiveMode };
/**
* {@docCategory Dropdown}
*/
export interface IDropdown {
/**
* All selected options
*/
readonly selectedOptions: IDropdownOption[];
focus: (shouldOpenOnFocus?: boolean) => void;
}
/**
* {@docCategory Dropdown}
*/
export interface IDropdownProps extends ISelectableDroppableTextProps<IDropdown, HTMLDivElement> {
/**
* Input placeholder text. Displayed until option is selected.
* @deprecated Use `placeholder`
*/
placeHolder?: string;
/**
* Options for the dropdown. If using `defaultSelectedKey` or `defaultSelectedKeys`, options must be
* pure for correct behavior.
*/
options: IDropdownOption[];
/**
* Callback issued when the selected option changes.
*/
onChange?: (event: React.FormEvent<HTMLDivElement>, option?: IDropdownOption, index?: number) => void;
/**
* @deprecated Use `onChange` instead.
*/
onChanged?: (option: IDropdownOption, index?: number) => void;
/**
* Callback issues when the options callout is dismissed
*/
onDismiss?: () => void;
/**
* Custom render function for the label.
*/
onRenderLabel?: IRenderFunction<IDropdownProps>;
/**
* Optional custom renderer for placeholder text
*/
onRenderPlaceholder?: IRenderFunction<IDropdownProps>;
/**
* Optional custom renderer for placeholder text
* @deprecated Use `onRenderPlaceholder`
*/
onRenderPlaceHolder?: IRenderFunction<IDropdownProps>;
/**
* Optional custom renderer for selected option displayed in input
*/
onRenderTitle?: IRenderFunction<IDropdownOption[]>;
/**
* Optional custom renderer for chevron icon
*/
onRenderCaretDown?: IRenderFunction<IDropdownProps>;
/**
* Custom width for dropdown. If value is 0, width of the input field is used.
* @defaultvalue 0
*/
dropdownWidth?: number;
/**
* Pass in ResponsiveMode to manually overwrite the way the Dropdown renders.
* ResponsiveMode.Large would, for instance, disable the behavior where Dropdown options
* get rendered into a Panel while ResponsiveMode.Small would result in the Dropdown
* options always getting rendered in a Panel.
*/
responsiveMode?: ResponsiveMode;
/**
* Optional mode indicates if multi-choice selections is allowed. Default to false
*/
multiSelect?: boolean;
/**
* Keys that will be initially used to set selected items. This prop is used for `multiSelect`
* scenarios. In other cases, `defaultSelectedKey` should be used.
*/
defaultSelectedKeys?: string[] | number[];
/**
* Keys of the selected items. If you provide this, you must maintain selection
* state by observing onChange events and passing a new value in when changed.
* Passing null in will clear the selection.
*/
selectedKeys?: string[] | number[] | null;
/**
* When multiple items are selected, this still will be used to separate values in
* the dropdown title.
*
* @defaultvalue ", "
*/
multiSelectDelimiter?: string;
/**
* Optional preference to have onChanged still be called when an already selected item is
* clicked in single select mode. Default to false
*/
notifyOnReselect?: boolean;
/**
* Deprecated at v0.52.0, use `disabled` instead.
* @deprecated Use `disabled` instead.
*/
isDisabled?: boolean;
/**
* Optional keytip for this dropdown
*/
keytipProps?: IKeytipProps;
/**
* Theme provided by higher order component.
*/
theme?: ITheme;
/**
* Call to provide customized styling that will layer on top of the variant rules.
*/
styles?: IStyleFunctionOrObject<IDropdownStyleProps, IDropdownStyles>;
}
/**
* {@docCategory Dropdown}
*/
export interface IDropdownOption extends ISelectableOption {
/**
* Deprecated at v.65.1, use `selected` instead.
* @deprecated Use `selected` instead.
*/
isSelected?: boolean;
}
/**
* The props needed to construct styles. This represents the simplified set of immutable things which control the class names.
* {@docCategory Dropdown}
*/
export declare type IDropdownStyleProps = Pick<IDropdownProps, 'theme' | 'className' | 'disabled' | 'required'> & {
/**
* Whether the dropdown is in an error state.
*/
hasError: boolean;
/**
* Specifies if the dropdown has label content.
*/
hasLabel: boolean;
/**
* Whether the dropdown is in an opened state.
*/
isOpen: boolean;
/**
* Whether the dropdown is presently rendering a placeholder.
*/
isRenderingPlaceholder: boolean;
/**
* Optional custom className for the panel that displays in small viewports, hosting the Dropdown options.
* This is primarily provided for backwards compatibility.
*/
panelClassName?: string;
/**
* Optional custom className for the callout that displays in larger viewports, hosting the Dropdown options.
* This is primarily provided for backwards compatibility.
*/
calloutClassName?: string;
/**
* Prop to notify on what edge the dropdown callout was positioned respective to the title.
*/
calloutRenderEdge?: RectangleEdge;
};
/**
* Represents the stylable areas of the control.
* {@docCategory Dropdown}
*/
export interface IDropdownStyles {
/** Root element of the Dropdown (includes Label and the actual Dropdown). */
root: IStyle;
/** Refers to the label associated with the dropdown. This is enclosed by the root. */
label: IStyle;
/** Refers to the actual Dropdown element. */
dropdown: IStyle;
/** Refers to the primary title of the Dropdown (rendering the selected options/placeholder/etc.). */
title: IStyle;
/** Refers to the wrapping container around the downward pointing caret users click on to expand the Dropdown. */
caretDownWrapper: IStyle;
/** Refers to the downward pointing caret icon users click on to expand the Dropdown. */
caretDown: IStyle;
/** Refers to the error message being rendered under the Dropdown (if any). */
errorMessage: IStyle;
/** Refers to the element that wraps `dropdownItems`. */
dropdownItemsWrapper: IStyle;
/** Refers to the FocusZone wrapping the individual dropdown items. */
dropdownItems: IStyle;
/** Refers to the individual dropdown item. */
dropdownItem: IStyle;
/** Style for a dropdown item when it is being selected. */
dropdownItemSelected: IStyle;
/** Style for a dropdown item when it is disabled. */
dropdownItemDisabled: IStyle;
/** Style for a dropdown item when it is both selected and disabled. */
dropdownItemSelectedAndDisabled: IStyle;
/** Style for a dropdown item when it is hidden */
dropdownItemHidden: IStyle;
/**
* Refers to the text element that renders the actual dropdown item/option text. This would be wrapped by the element
* referred to by `dropdownItem`.
*/
dropdownOptionText: IStyle;
/** Refers to the dropdown separator. */
dropdownDivider: IStyle;
/** Refers to the individual dropdown items that are being rendered as a header. */
dropdownItemHeader: IStyle;
/**
* Refers to the panel that hosts the Dropdown options in small viewports.
* Note: This will be deprecated when Panel supports JS Styling.
*/
panel: IStyle;
/** Refers to the callout that hosts Dropdown options in larger viewports. */
callout: IStyle;
/** Subcomponent styles. */
subComponentStyles: IDropdownSubComponentStyles;
}
/**
* {@docCategory Dropdown}
*/
export interface IDropdownSubComponentStyles {
/** Refers to the panel that hosts the Dropdown options in small viewports. */
panel: IStyleFunctionOrObject<IPanelStyleProps, any>;
/** Refers to the primary label for the Dropdown. */
label: IStyleFunctionOrObject<ILabelStyleProps, any>;
}