UNPKG

downshift

Version:

🏎 A set of primitives to build simple, flexible, WAI-ARIA compliant React autocomplete, combobox or select dropdown components.

118 lines (117 loc) 6.24 kB
import * as React from 'react'; import { AnyRef, Environment, GetPropsCommonOptions, Overwrite } from '../../downshift.types'; export interface UseMultipleSelectionState<Item> { selectedItems: Item[]; activeIndex: number; } export declare enum UseMultipleSelectionStateChangeTypes { SelectedItemClick = "__selected_item_click__", SelectedItemKeyDownDelete = "__selected_item_keydown_delete__", SelectedItemKeyDownBackspace = "__selected_item_keydown_backspace__", SelectedItemKeyDownNavigationNext = "__selected_item_keydown_navigation_next__", SelectedItemKeyDownNavigationPrevious = "__selected_item_keydown_navigation_previous__", DropdownKeyDownNavigationPrevious = "__dropdown_keydown_navigation_previous__", DropdownKeyDownBackspace = "__dropdown_keydown_backspace__", DropdownClick = "__dropdown_click__", FunctionAddSelectedItem = "__function_add_selected_item__", FunctionRemoveSelectedItem = "__function_remove_selected_item__", FunctionSetSelectedItems = "__function_set_selected_items__", FunctionSetActiveIndex = "__function_set_active_index__", FunctionReset = "__function_reset__" } export interface UseMultipleSelectionProps<Item> { selectedItems?: Item[]; initialSelectedItems?: Item[]; defaultSelectedItems?: Item[]; itemToKey?: (item: Item | null) => any; getA11yStatusMessage?: (options: UseMultipleSelectionState<Item>) => string; stateReducer?: (state: UseMultipleSelectionState<Item>, actionAndChanges: UseMultipleSelectionStateChangeOptions<Item>) => Partial<UseMultipleSelectionState<Item>>; activeIndex?: number; initialActiveIndex?: number; defaultActiveIndex?: number; onActiveIndexChange?: (changes: UseMultipleSelectionActiveIndexChange<Item>) => void; onSelectedItemsChange?: (changes: UseMultipleSelectionSelectedItemsChange<Item>) => void; onStateChange?: (changes: UseMultipleSelectionStateChange<Item>) => void; keyNavigationNext?: string; keyNavigationPrevious?: string; environment?: Environment; } export interface UseMultipleSelectionStateChangeOptions<Item> extends UseMultipleSelectionDispatchAction<Item> { changes: Partial<UseMultipleSelectionState<Item>>; } export interface UseMultipleSelectionDispatchAction<Item> { type: UseMultipleSelectionStateChangeTypes; index?: number; selectedItem?: Item | null; selectedItems?: Item[]; activeIndex?: number; } export interface UseMultipleSelectionStateChange<Item> extends Partial<UseMultipleSelectionState<Item>> { type: UseMultipleSelectionStateChangeTypes; } export interface UseMultipleSelectionActiveIndexChange<Item> extends UseMultipleSelectionStateChange<Item> { activeIndex: number; } export interface UseMultipleSelectionSelectedItemsChange<Item> extends UseMultipleSelectionStateChange<Item> { selectedItems: Item[]; } export interface A11yRemovalMessage<Item> { itemToString: (item: Item) => string; resultCount: number; activeSelectedItem: Item; removedSelectedItem: Item; activeIndex: number; } export interface UseMultipleSelectionGetSelectedItemPropsOptions<Item> extends React.HTMLProps<HTMLElement> { refKey?: string; ref?: AnyRef; index?: number; selectedItem: Item; } export interface UseMultipleSelectionGetSelectedItemReturnValue { ref?: AnyRef; tabIndex: 0 | -1; onClick: React.MouseEventHandler; onKeyDown: React.KeyboardEventHandler; } export interface UseMultipleSelectionGetDropdownPropsOptions extends React.HTMLProps<HTMLElement> { preventKeyAction?: boolean; refKey?: string; ref?: AnyRef; } export interface UseMultipleSelectionGetDropdownReturnValue { ref?: AnyRef; onClick?: React.MouseEventHandler; onKeyDown?: React.KeyboardEventHandler; } export interface UseMultipleSelectionPropGetters<Item> { getDropdownProps: <Options>(options?: UseMultipleSelectionGetDropdownPropsOptions & Options, extraOptions?: GetPropsCommonOptions) => Omit<Overwrite<UseMultipleSelectionGetDropdownReturnValue, Options>, 'preventKeyAction'>; getSelectedItemProps: <Options>(options: UseMultipleSelectionGetSelectedItemPropsOptions<Item> & Options) => Omit<Overwrite<UseMultipleSelectionGetSelectedItemReturnValue, Options>, 'index' | 'selectedItem'>; } export interface UseMultipleSelectionActions<Item> { reset: () => void; addSelectedItem: (item: Item) => void; removeSelectedItem: (item: Item) => void; setSelectedItems: (items: Item[]) => void; setActiveIndex: (index: number) => void; } export type UseMultipleSelectionReturnValue<Item> = UseMultipleSelectionState<Item> & UseMultipleSelectionPropGetters<Item> & UseMultipleSelectionActions<Item>; export interface UseMultipleSelectionInterface { <Item>(props?: UseMultipleSelectionProps<Item>): UseMultipleSelectionReturnValue<Item>; stateChangeTypes: { SelectedItemClick: UseMultipleSelectionStateChangeTypes.SelectedItemClick; SelectedItemKeyDownDelete: UseMultipleSelectionStateChangeTypes.SelectedItemKeyDownDelete; SelectedItemKeyDownBackspace: UseMultipleSelectionStateChangeTypes.SelectedItemKeyDownBackspace; SelectedItemKeyDownNavigationNext: UseMultipleSelectionStateChangeTypes.SelectedItemKeyDownNavigationNext; SelectedItemKeyDownNavigationPrevious: UseMultipleSelectionStateChangeTypes.SelectedItemKeyDownNavigationPrevious; DropdownKeyDownNavigationPrevious: UseMultipleSelectionStateChangeTypes.DropdownKeyDownNavigationPrevious; DropdownKeyDownBackspace: UseMultipleSelectionStateChangeTypes.DropdownKeyDownBackspace; DropdownClick: UseMultipleSelectionStateChangeTypes.DropdownClick; FunctionAddSelectedItem: UseMultipleSelectionStateChangeTypes.FunctionAddSelectedItem; FunctionRemoveSelectedItem: UseMultipleSelectionStateChangeTypes.FunctionRemoveSelectedItem; FunctionSetSelectedItems: UseMultipleSelectionStateChangeTypes.FunctionSetSelectedItems; FunctionSetActiveIndex: UseMultipleSelectionStateChangeTypes.FunctionSetActiveIndex; FunctionReset: UseMultipleSelectionStateChangeTypes.FunctionReset; }; } export declare const useMultipleSelection: UseMultipleSelectionInterface;