MCPcopy Create free account
hub / github.com/adobe/react-spectrum / useSelect

Function useSelect

packages/react-aria/src/select/useSelect.ts:114–307  ·  view source on GitHub ↗
(
  props: AriaSelectOptions<T, M>,
  state: SelectState<T, M>,
  ref: RefObject<HTMLElement | null>
)

Source from the content-addressed store, hash-verified

112 * @param state - State for the select, as returned by `useListState`.
113 */
114export function useSelect<T, M extends SelectionMode = 'single'>(
115 props: AriaSelectOptions<T, M>,
116 state: SelectState<T, M>,
117 ref: RefObject<HTMLElement | null>
118): SelectAria<T, M> {
119 let {keyboardDelegate, isDisabled, isRequired, name, form, validationBehavior = 'aria'} = props;
120
121 // By default, a KeyboardDelegate is provided which uses the DOM to query layout information (e.g. for page up/page down).
122 // When virtualized, the layout object will be passed in as a prop and override this.
123 let collator = useCollator({usage: 'search', sensitivity: 'base'});
124 let delegate = useMemo(
125 () =>
126 keyboardDelegate ||
127 new ListKeyboardDelegate(state.collection, state.disabledKeys, ref, collator),
128 [keyboardDelegate, state.collection, state.disabledKeys, collator, ref]
129 );
130
131 let {menuTriggerProps, menuProps} = useMenuTrigger<T>(
132 {
133 isDisabled,
134 type: 'listbox'
135 },
136 state,
137 ref
138 );
139
140 let {keyboardProps} = useKeyboard({
141 shortcuts: {
142 ArrowLeft: () => {
143 if (state.selectionManager.selectionMode === 'multiple') {
144 return false;
145 }
146 let key =
147 state.selectedKey != null
148 ? delegate.getKeyAbove?.(state.selectedKey)
149 : delegate.getFirstKey?.();
150 if (key != null) {
151 state.setSelectedKey(key);
152 }
153 },
154 ArrowRight: () => {
155 if (state.selectionManager.selectionMode === 'multiple') {
156 return false;
157 }
158 let key =
159 state.selectedKey != null
160 ? delegate.getKeyBelow?.(state.selectedKey)
161 : delegate.getFirstKey?.();
162 if (key != null) {
163 state.setSelectedKey(key);
164 }
165 }
166 },
167 allowRepeats: true,
168 onKeyDown: props.onKeyDown,
169 onKeyUp: props.onKeyUp
170 });
171

Callers 4

SelectFunction · 0.90
SelectInnerFunction · 0.90
Picker.tsxFile · 0.90
SelectInnerFunction · 0.90

Calls 15

useCollatorFunction · 0.90
useMenuTriggerFunction · 0.90
useKeyboardFunction · 0.90
useTypeSelectFunction · 0.90
useFieldFunction · 0.90
filterDOMPropsFunction · 0.90
mergePropsFunction · 0.90
useIdFunction · 0.90
setInteractionModalityFunction · 0.90
chainFunction · 0.90
nodeContainsFunction · 0.90
focusMethod · 0.80

Tested by

no test coverage detected