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
TypeScript
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;