downshift 7.3.2 → 7.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1603,14 +1603,19 @@ function useElementIds(_ref) {
1603
1603
  });
1604
1604
  return elementIdsRef.current;
1605
1605
  }
1606
- function getItemIndex(index, item, items) {
1607
- if (index !== undefined) {
1608
- return index;
1609
- }
1610
- if (items.length === 0) {
1611
- return -1;
1606
+ function getItemAndIndex(itemProp, indexProp, items, errorMessage) {
1607
+ var item, index;
1608
+ if (itemProp === undefined) {
1609
+ if (indexProp === undefined) {
1610
+ throw new Error(errorMessage);
1611
+ }
1612
+ item = items[indexProp];
1613
+ index = indexProp;
1614
+ } else {
1615
+ index = indexProp === undefined ? items.indexOf(itemProp) : indexProp;
1616
+ item = itemProp;
1612
1617
  }
1613
- return items.indexOf(item);
1618
+ return [item, index];
1614
1619
  }
1615
1620
  function itemToString(item) {
1616
1621
  return item ? String(item) : '';
@@ -2600,8 +2605,9 @@ function useSelect(userProps) {
2600
2605
  var _latest$current = latest.current,
2601
2606
  latestState = _latest$current.state,
2602
2607
  latestProps = _latest$current.props;
2603
- var item = itemProp != null ? itemProp : items[indexProp];
2604
- var index = getItemIndex(indexProp, item, latestProps.items);
2608
+ var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
2609
+ item = _getItemAndIndex[0],
2610
+ index = _getItemAndIndex[1];
2605
2611
  var itemHandleMouseMove = function itemHandleMouseMove() {
2606
2612
  if (index === latestState.highlightedIndex) {
2607
2613
  return;
@@ -2619,18 +2625,14 @@ function useSelect(userProps) {
2619
2625
  index: index
2620
2626
  });
2621
2627
  };
2622
- var itemIndex = getItemIndex(index, item, latestProps.items);
2623
- if (itemIndex < 0) {
2624
- throw new Error('Pass either item or item index in getItemProps!');
2625
- }
2626
2628
  var itemProps = _extends__default["default"]((_extends4 = {
2627
2629
  disabled: disabled,
2628
2630
  role: 'option',
2629
2631
  'aria-selected': "" + (item === selectedItem),
2630
- id: elementIds.getItemId(itemIndex)
2632
+ id: elementIds.getItemId(index)
2631
2633
  }, _extends4[refKey] = handleRefs(ref, function (itemNode) {
2632
2634
  if (itemNode) {
2633
- itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode;
2635
+ itemRefs.current[elementIds.getItemId(index)] = itemNode;
2634
2636
  }
2635
2637
  }), _extends4), rest);
2636
2638
  if (!disabled) {
@@ -2641,7 +2643,7 @@ function useSelect(userProps) {
2641
2643
  }
2642
2644
  itemProps.onMouseMove = callAllEventHandlers(onMouseMove, itemHandleMouseMove);
2643
2645
  return itemProps;
2644
- }, [latest, items, selectedItem, elementIds, shouldScrollRef, dispatch]);
2646
+ }, [latest, selectedItem, elementIds, shouldScrollRef, dispatch]);
2645
2647
  return {
2646
2648
  // prop getters.
2647
2649
  getToggleButtonProps: getToggleButtonProps,
@@ -3170,8 +3172,8 @@ function useCombobox(userProps) {
3170
3172
  var getItemProps = react.useCallback(function (_temp3) {
3171
3173
  var _extends3, _ref4;
3172
3174
  var _ref3 = _temp3 === void 0 ? {} : _temp3,
3173
- item = _ref3.item,
3174
- index = _ref3.index,
3175
+ itemProp = _ref3.item,
3176
+ indexProp = _ref3.index,
3175
3177
  _ref3$refKey = _ref3.refKey,
3176
3178
  refKey = _ref3$refKey === void 0 ? 'ref' : _ref3$refKey,
3177
3179
  ref = _ref3.ref,
@@ -3184,10 +3186,8 @@ function useCombobox(userProps) {
3184
3186
  var _latest$current = latest.current,
3185
3187
  latestProps = _latest$current.props,
3186
3188
  latestState = _latest$current.state;
3187
- var itemIndex = getItemIndex(index, item, latestProps.items);
3188
- if (itemIndex < 0) {
3189
- throw new Error('Pass either item or item index in getItemProps!');
3190
- }
3189
+ var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
3190
+ index = _getItemAndIndex[1];
3191
3191
  var onSelectKey = 'onClick';
3192
3192
  var customClickHandler = onClick;
3193
3193
  var itemHandleMouseMove = function itemHandleMouseMove() {
@@ -3212,9 +3212,9 @@ function useCombobox(userProps) {
3212
3212
  };
3213
3213
  return _extends__default["default"]((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function (itemNode) {
3214
3214
  if (itemNode) {
3215
- itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode;
3215
+ itemRefs.current[elementIds.getItemId(index)] = itemNode;
3216
3216
  }
3217
- }), _extends3.disabled = disabled, _extends3.role = 'option', _extends3['aria-selected'] = "" + (itemIndex === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(itemIndex), _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {
3217
+ }), _extends3.disabled = disabled, _extends3.role = 'option', _extends3['aria-selected'] = "" + (index === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(index), _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {
3218
3218
  onMouseMove: callAllEventHandlers(onMouseMove, itemHandleMouseMove),
3219
3219
  onMouseDown: callAllEventHandlers(onMouseDown, itemHandleMouseDown)
3220
3220
  }, rest);
@@ -3754,14 +3754,13 @@ function useMultipleSelection(userProps) {
3754
3754
  ref = _ref3.ref,
3755
3755
  onClick = _ref3.onClick,
3756
3756
  onKeyDown = _ref3.onKeyDown,
3757
- selectedItem = _ref3.selectedItem,
3758
- index = _ref3.index,
3757
+ selectedItemProp = _ref3.selectedItem,
3758
+ indexProp = _ref3.index,
3759
3759
  rest = _objectWithoutPropertiesLoose__default["default"](_ref3, _excluded);
3760
3760
  var latestState = latest.current.state;
3761
- var itemIndex = getItemIndex(index, selectedItem, latestState.selectedItems);
3762
- if (itemIndex < 0) {
3763
- throw new Error('Pass either selectedItem or index in getSelectedItemProps!');
3764
- }
3761
+ var _getItemAndIndex = getItemAndIndex(selectedItemProp, indexProp, latestState.selectedItems, 'Pass either item or index to getSelectedItemProps!'),
3762
+ index = _getItemAndIndex[1];
3763
+ var isFocusable = index > -1 && index === latestState.activeIndex;
3765
3764
  var selectedItemHandleClick = function selectedItemHandleClick() {
3766
3765
  dispatch({
3767
3766
  type: SelectedItemClick,
@@ -3778,7 +3777,7 @@ function useMultipleSelection(userProps) {
3778
3777
  if (selectedItemNode) {
3779
3778
  selectedItemRefs.current.push(selectedItemNode);
3780
3779
  }
3781
- }), _extends2.tabIndex = index === latestState.activeIndex ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
3780
+ }), _extends2.tabIndex = isFocusable ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
3782
3781
  }, [dispatch, latest, selectedItemKeyDownHandlers]);
3783
3782
  var getDropdownProps = react.useCallback(function (_temp2, _temp3) {
3784
3783
  var _extends3;
@@ -1590,14 +1590,19 @@ function useElementIds(_ref) {
1590
1590
  });
1591
1591
  return elementIdsRef.current;
1592
1592
  }
1593
- function getItemIndex(index, item, items) {
1594
- if (index !== undefined) {
1595
- return index;
1596
- }
1597
- if (items.length === 0) {
1598
- return -1;
1593
+ function getItemAndIndex(itemProp, indexProp, items, errorMessage) {
1594
+ var item, index;
1595
+ if (itemProp === undefined) {
1596
+ if (indexProp === undefined) {
1597
+ throw new Error(errorMessage);
1598
+ }
1599
+ item = items[indexProp];
1600
+ index = indexProp;
1601
+ } else {
1602
+ index = indexProp === undefined ? items.indexOf(itemProp) : indexProp;
1603
+ item = itemProp;
1599
1604
  }
1600
- return items.indexOf(item);
1605
+ return [item, index];
1601
1606
  }
1602
1607
  function itemToString(item) {
1603
1608
  return item ? String(item) : '';
@@ -2587,8 +2592,9 @@ function useSelect(userProps) {
2587
2592
  var _latest$current = latest.current,
2588
2593
  latestState = _latest$current.state,
2589
2594
  latestProps = _latest$current.props;
2590
- var item = itemProp != null ? itemProp : items[indexProp];
2591
- var index = getItemIndex(indexProp, item, latestProps.items);
2595
+ var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
2596
+ item = _getItemAndIndex[0],
2597
+ index = _getItemAndIndex[1];
2592
2598
  var itemHandleMouseMove = function itemHandleMouseMove() {
2593
2599
  if (index === latestState.highlightedIndex) {
2594
2600
  return;
@@ -2606,18 +2612,14 @@ function useSelect(userProps) {
2606
2612
  index: index
2607
2613
  });
2608
2614
  };
2609
- var itemIndex = getItemIndex(index, item, latestProps.items);
2610
- if (itemIndex < 0) {
2611
- throw new Error('Pass either item or item index in getItemProps!');
2612
- }
2613
2615
  var itemProps = _extends((_extends4 = {
2614
2616
  disabled: disabled,
2615
2617
  role: 'option',
2616
2618
  'aria-selected': "" + (item === selectedItem),
2617
- id: elementIds.getItemId(itemIndex)
2619
+ id: elementIds.getItemId(index)
2618
2620
  }, _extends4[refKey] = handleRefs(ref, function (itemNode) {
2619
2621
  if (itemNode) {
2620
- itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode;
2622
+ itemRefs.current[elementIds.getItemId(index)] = itemNode;
2621
2623
  }
2622
2624
  }), _extends4), rest);
2623
2625
  if (!disabled) {
@@ -2628,7 +2630,7 @@ function useSelect(userProps) {
2628
2630
  }
2629
2631
  itemProps.onMouseMove = callAllEventHandlers(onMouseMove, itemHandleMouseMove);
2630
2632
  return itemProps;
2631
- }, [latest, items, selectedItem, elementIds, shouldScrollRef, dispatch]);
2633
+ }, [latest, selectedItem, elementIds, shouldScrollRef, dispatch]);
2632
2634
  return {
2633
2635
  // prop getters.
2634
2636
  getToggleButtonProps: getToggleButtonProps,
@@ -3157,8 +3159,8 @@ function useCombobox(userProps) {
3157
3159
  var getItemProps = useCallback(function (_temp3) {
3158
3160
  var _extends3, _ref4;
3159
3161
  var _ref3 = _temp3 === void 0 ? {} : _temp3,
3160
- item = _ref3.item,
3161
- index = _ref3.index,
3162
+ itemProp = _ref3.item,
3163
+ indexProp = _ref3.index,
3162
3164
  _ref3$refKey = _ref3.refKey,
3163
3165
  refKey = _ref3$refKey === void 0 ? 'ref' : _ref3$refKey,
3164
3166
  ref = _ref3.ref,
@@ -3171,10 +3173,8 @@ function useCombobox(userProps) {
3171
3173
  var _latest$current = latest.current,
3172
3174
  latestProps = _latest$current.props,
3173
3175
  latestState = _latest$current.state;
3174
- var itemIndex = getItemIndex(index, item, latestProps.items);
3175
- if (itemIndex < 0) {
3176
- throw new Error('Pass either item or item index in getItemProps!');
3177
- }
3176
+ var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
3177
+ index = _getItemAndIndex[1];
3178
3178
  var onSelectKey = 'onClick';
3179
3179
  var customClickHandler = onClick;
3180
3180
  var itemHandleMouseMove = function itemHandleMouseMove() {
@@ -3199,9 +3199,9 @@ function useCombobox(userProps) {
3199
3199
  };
3200
3200
  return _extends((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function (itemNode) {
3201
3201
  if (itemNode) {
3202
- itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode;
3202
+ itemRefs.current[elementIds.getItemId(index)] = itemNode;
3203
3203
  }
3204
- }), _extends3.disabled = disabled, _extends3.role = 'option', _extends3['aria-selected'] = "" + (itemIndex === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(itemIndex), _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {
3204
+ }), _extends3.disabled = disabled, _extends3.role = 'option', _extends3['aria-selected'] = "" + (index === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(index), _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {
3205
3205
  onMouseMove: callAllEventHandlers(onMouseMove, itemHandleMouseMove),
3206
3206
  onMouseDown: callAllEventHandlers(onMouseDown, itemHandleMouseDown)
3207
3207
  }, rest);
@@ -3741,14 +3741,13 @@ function useMultipleSelection(userProps) {
3741
3741
  ref = _ref3.ref,
3742
3742
  onClick = _ref3.onClick,
3743
3743
  onKeyDown = _ref3.onKeyDown,
3744
- selectedItem = _ref3.selectedItem,
3745
- index = _ref3.index,
3744
+ selectedItemProp = _ref3.selectedItem,
3745
+ indexProp = _ref3.index,
3746
3746
  rest = _objectWithoutPropertiesLoose(_ref3, _excluded);
3747
3747
  var latestState = latest.current.state;
3748
- var itemIndex = getItemIndex(index, selectedItem, latestState.selectedItems);
3749
- if (itemIndex < 0) {
3750
- throw new Error('Pass either selectedItem or index in getSelectedItemProps!');
3751
- }
3748
+ var _getItemAndIndex = getItemAndIndex(selectedItemProp, indexProp, latestState.selectedItems, 'Pass either item or index to getSelectedItemProps!'),
3749
+ index = _getItemAndIndex[1];
3750
+ var isFocusable = index > -1 && index === latestState.activeIndex;
3752
3751
  var selectedItemHandleClick = function selectedItemHandleClick() {
3753
3752
  dispatch({
3754
3753
  type: SelectedItemClick,
@@ -3765,7 +3764,7 @@ function useMultipleSelection(userProps) {
3765
3764
  if (selectedItemNode) {
3766
3765
  selectedItemRefs.current.push(selectedItemNode);
3767
3766
  }
3768
- }), _extends2.tabIndex = index === latestState.activeIndex ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
3767
+ }), _extends2.tabIndex = isFocusable ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
3769
3768
  }, [dispatch, latest, selectedItemKeyDownHandlers]);
3770
3769
  var getDropdownProps = useCallback(function (_temp2, _temp3) {
3771
3770
  var _extends3;
@@ -1541,14 +1541,19 @@ function useElementIds(_ref) {
1541
1541
  });
1542
1542
  return elementIdsRef.current;
1543
1543
  }
1544
- function getItemIndex(index, item, items) {
1545
- if (index !== undefined) {
1546
- return index;
1547
- }
1548
- if (items.length === 0) {
1549
- return -1;
1544
+ function getItemAndIndex(itemProp, indexProp, items, errorMessage) {
1545
+ var item, index;
1546
+ if (itemProp === undefined) {
1547
+ if (indexProp === undefined) {
1548
+ throw new Error(errorMessage);
1549
+ }
1550
+ item = items[indexProp];
1551
+ index = indexProp;
1552
+ } else {
1553
+ index = indexProp === undefined ? items.indexOf(itemProp) : indexProp;
1554
+ item = itemProp;
1550
1555
  }
1551
- return items.indexOf(item);
1556
+ return [item, index];
1552
1557
  }
1553
1558
  function itemToString(item) {
1554
1559
  return item ? String(item) : '';
@@ -2522,8 +2527,9 @@ function useSelect(userProps) {
2522
2527
  var _latest$current = latest.current,
2523
2528
  latestState = _latest$current.state,
2524
2529
  latestProps = _latest$current.props;
2525
- var item = itemProp != null ? itemProp : items[indexProp];
2526
- var index = getItemIndex(indexProp, item, latestProps.items);
2530
+ var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
2531
+ item = _getItemAndIndex[0],
2532
+ index = _getItemAndIndex[1];
2527
2533
  var itemHandleMouseMove = function itemHandleMouseMove() {
2528
2534
  if (index === latestState.highlightedIndex) {
2529
2535
  return;
@@ -2541,18 +2547,14 @@ function useSelect(userProps) {
2541
2547
  index: index
2542
2548
  });
2543
2549
  };
2544
- var itemIndex = getItemIndex(index, item, latestProps.items);
2545
- if (itemIndex < 0) {
2546
- throw new Error('Pass either item or item index in getItemProps!');
2547
- }
2548
2550
  var itemProps = _extends__default["default"]((_extends4 = {
2549
2551
  disabled: disabled,
2550
2552
  role: 'option',
2551
2553
  'aria-selected': "" + (item === selectedItem),
2552
- id: elementIds.getItemId(itemIndex)
2554
+ id: elementIds.getItemId(index)
2553
2555
  }, _extends4[refKey] = handleRefs(ref, function (itemNode) {
2554
2556
  if (itemNode) {
2555
- itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode;
2557
+ itemRefs.current[elementIds.getItemId(index)] = itemNode;
2556
2558
  }
2557
2559
  }), _extends4), rest);
2558
2560
  if (!disabled) {
@@ -2563,7 +2565,7 @@ function useSelect(userProps) {
2563
2565
  }
2564
2566
  itemProps.onMouseMove = callAllEventHandlers(onMouseMove, itemHandleMouseMove);
2565
2567
  return itemProps;
2566
- }, [latest, items, selectedItem, elementIds, shouldScrollRef, dispatch]);
2568
+ }, [latest, selectedItem, elementIds, shouldScrollRef, dispatch]);
2567
2569
  return {
2568
2570
  // prop getters.
2569
2571
  getToggleButtonProps: getToggleButtonProps,
@@ -3092,8 +3094,8 @@ function useCombobox(userProps) {
3092
3094
  var getItemProps = react.useCallback(function (_temp3) {
3093
3095
  var _extends3, _ref4;
3094
3096
  var _ref3 = _temp3 === void 0 ? {} : _temp3,
3095
- item = _ref3.item,
3096
- index = _ref3.index,
3097
+ itemProp = _ref3.item,
3098
+ indexProp = _ref3.index,
3097
3099
  _ref3$refKey = _ref3.refKey,
3098
3100
  refKey = _ref3$refKey === void 0 ? 'ref' : _ref3$refKey,
3099
3101
  ref = _ref3.ref,
@@ -3106,10 +3108,8 @@ function useCombobox(userProps) {
3106
3108
  var _latest$current = latest.current,
3107
3109
  latestProps = _latest$current.props,
3108
3110
  latestState = _latest$current.state;
3109
- var itemIndex = getItemIndex(index, item, latestProps.items);
3110
- if (itemIndex < 0) {
3111
- throw new Error('Pass either item or item index in getItemProps!');
3112
- }
3111
+ var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
3112
+ index = _getItemAndIndex[1];
3113
3113
  var onSelectKey = /* istanbul ignore next (react-native) */'onPress' ;
3114
3114
  var customClickHandler = /* istanbul ignore next (react-native) */onPress ;
3115
3115
  var itemHandleMouseMove = function itemHandleMouseMove() {
@@ -3134,9 +3134,9 @@ function useCombobox(userProps) {
3134
3134
  };
3135
3135
  return _extends__default["default"]((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function (itemNode) {
3136
3136
  if (itemNode) {
3137
- itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode;
3137
+ itemRefs.current[elementIds.getItemId(index)] = itemNode;
3138
3138
  }
3139
- }), _extends3.disabled = disabled, _extends3.role = 'option', _extends3['aria-selected'] = "" + (itemIndex === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(itemIndex), _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {
3139
+ }), _extends3.disabled = disabled, _extends3.role = 'option', _extends3['aria-selected'] = "" + (index === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(index), _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {
3140
3140
  onMouseMove: callAllEventHandlers(onMouseMove, itemHandleMouseMove),
3141
3141
  onMouseDown: callAllEventHandlers(onMouseDown, itemHandleMouseDown)
3142
3142
  }, rest);
@@ -3688,14 +3688,13 @@ function useMultipleSelection(userProps) {
3688
3688
  ref = _ref3.ref,
3689
3689
  onClick = _ref3.onClick,
3690
3690
  onKeyDown = _ref3.onKeyDown,
3691
- selectedItem = _ref3.selectedItem,
3692
- index = _ref3.index,
3691
+ selectedItemProp = _ref3.selectedItem,
3692
+ indexProp = _ref3.index,
3693
3693
  rest = _objectWithoutPropertiesLoose__default["default"](_ref3, _excluded);
3694
3694
  var latestState = latest.current.state;
3695
- var itemIndex = getItemIndex(index, selectedItem, latestState.selectedItems);
3696
- if (itemIndex < 0) {
3697
- throw new Error('Pass either selectedItem or index in getSelectedItemProps!');
3698
- }
3695
+ var _getItemAndIndex = getItemAndIndex(selectedItemProp, indexProp, latestState.selectedItems, 'Pass either item or index to getSelectedItemProps!'),
3696
+ index = _getItemAndIndex[1];
3697
+ var isFocusable = index > -1 && index === latestState.activeIndex;
3699
3698
  var selectedItemHandleClick = function selectedItemHandleClick() {
3700
3699
  dispatch({
3701
3700
  type: SelectedItemClick,
@@ -3712,7 +3711,7 @@ function useMultipleSelection(userProps) {
3712
3711
  if (selectedItemNode) {
3713
3712
  selectedItemRefs.current.push(selectedItemNode);
3714
3713
  }
3715
- }), _extends2.tabIndex = index === latestState.activeIndex ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
3714
+ }), _extends2.tabIndex = isFocusable ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
3716
3715
  }, [dispatch, latest, selectedItemKeyDownHandlers]);
3717
3716
  var getDropdownProps = react.useCallback(function (_temp2, _temp3) {
3718
3717
  var _extends3;
@@ -2889,14 +2889,19 @@
2889
2889
  });
2890
2890
  return elementIdsRef.current;
2891
2891
  }
2892
- function getItemIndex(index, item, items) {
2893
- if (index !== undefined) {
2894
- return index;
2895
- }
2896
- if (items.length === 0) {
2897
- return -1;
2892
+ function getItemAndIndex(itemProp, indexProp, items, errorMessage) {
2893
+ var item, index;
2894
+ if (itemProp === undefined) {
2895
+ if (indexProp === undefined) {
2896
+ throw new Error(errorMessage);
2897
+ }
2898
+ item = items[indexProp];
2899
+ index = indexProp;
2900
+ } else {
2901
+ index = indexProp === undefined ? items.indexOf(itemProp) : indexProp;
2902
+ item = itemProp;
2898
2903
  }
2899
- return items.indexOf(item);
2904
+ return [item, index];
2900
2905
  }
2901
2906
  function itemToString(item) {
2902
2907
  return item ? String(item) : '';
@@ -3912,8 +3917,9 @@
3912
3917
  var _latest$current = latest.current,
3913
3918
  latestState = _latest$current.state,
3914
3919
  latestProps = _latest$current.props;
3915
- var item = itemProp != null ? itemProp : items[indexProp];
3916
- var index = getItemIndex(indexProp, item, latestProps.items);
3920
+ var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
3921
+ item = _getItemAndIndex[0],
3922
+ index = _getItemAndIndex[1];
3917
3923
  var itemHandleMouseMove = function itemHandleMouseMove() {
3918
3924
  if (index === latestState.highlightedIndex) {
3919
3925
  return;
@@ -3931,18 +3937,14 @@
3931
3937
  index: index
3932
3938
  });
3933
3939
  };
3934
- var itemIndex = getItemIndex(index, item, latestProps.items);
3935
- if (itemIndex < 0) {
3936
- throw new Error('Pass either item or item index in getItemProps!');
3937
- }
3938
3940
  var itemProps = _extends((_extends4 = {
3939
3941
  disabled: disabled,
3940
3942
  role: 'option',
3941
3943
  'aria-selected': "" + (item === selectedItem),
3942
- id: elementIds.getItemId(itemIndex)
3944
+ id: elementIds.getItemId(index)
3943
3945
  }, _extends4[refKey] = handleRefs(ref, function (itemNode) {
3944
3946
  if (itemNode) {
3945
- itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode;
3947
+ itemRefs.current[elementIds.getItemId(index)] = itemNode;
3946
3948
  }
3947
3949
  }), _extends4), rest);
3948
3950
  if (!disabled) {
@@ -3953,7 +3955,7 @@
3953
3955
  }
3954
3956
  itemProps.onMouseMove = callAllEventHandlers(onMouseMove, itemHandleMouseMove);
3955
3957
  return itemProps;
3956
- }, [latest, items, selectedItem, elementIds, shouldScrollRef, dispatch]);
3958
+ }, [latest, selectedItem, elementIds, shouldScrollRef, dispatch]);
3957
3959
  return {
3958
3960
  // prop getters.
3959
3961
  getToggleButtonProps: getToggleButtonProps,
@@ -4482,8 +4484,8 @@
4482
4484
  var getItemProps = react.useCallback(function (_temp3) {
4483
4485
  var _extends3, _ref4;
4484
4486
  var _ref3 = _temp3 === void 0 ? {} : _temp3,
4485
- item = _ref3.item,
4486
- index = _ref3.index,
4487
+ itemProp = _ref3.item,
4488
+ indexProp = _ref3.index,
4487
4489
  _ref3$refKey = _ref3.refKey,
4488
4490
  refKey = _ref3$refKey === void 0 ? 'ref' : _ref3$refKey,
4489
4491
  ref = _ref3.ref,
@@ -4496,10 +4498,8 @@
4496
4498
  var _latest$current = latest.current,
4497
4499
  latestProps = _latest$current.props,
4498
4500
  latestState = _latest$current.state;
4499
- var itemIndex = getItemIndex(index, item, latestProps.items);
4500
- if (itemIndex < 0) {
4501
- throw new Error('Pass either item or item index in getItemProps!');
4502
- }
4501
+ var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
4502
+ index = _getItemAndIndex[1];
4503
4503
  var onSelectKey = 'onClick';
4504
4504
  var customClickHandler = onClick;
4505
4505
  var itemHandleMouseMove = function itemHandleMouseMove() {
@@ -4524,9 +4524,9 @@
4524
4524
  };
4525
4525
  return _extends((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function (itemNode) {
4526
4526
  if (itemNode) {
4527
- itemRefs.current[elementIds.getItemId(itemIndex)] = itemNode;
4527
+ itemRefs.current[elementIds.getItemId(index)] = itemNode;
4528
4528
  }
4529
- }), _extends3.disabled = disabled, _extends3.role = 'option', _extends3['aria-selected'] = "" + (itemIndex === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(itemIndex), _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {
4529
+ }), _extends3.disabled = disabled, _extends3.role = 'option', _extends3['aria-selected'] = "" + (index === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(index), _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {
4530
4530
  onMouseMove: callAllEventHandlers(onMouseMove, itemHandleMouseMove),
4531
4531
  onMouseDown: callAllEventHandlers(onMouseDown, itemHandleMouseDown)
4532
4532
  }, rest);
@@ -5066,14 +5066,13 @@
5066
5066
  ref = _ref3.ref,
5067
5067
  onClick = _ref3.onClick,
5068
5068
  onKeyDown = _ref3.onKeyDown,
5069
- selectedItem = _ref3.selectedItem,
5070
- index = _ref3.index,
5069
+ selectedItemProp = _ref3.selectedItem,
5070
+ indexProp = _ref3.index,
5071
5071
  rest = _objectWithoutPropertiesLoose(_ref3, _excluded);
5072
5072
  var latestState = latest.current.state;
5073
- var itemIndex = getItemIndex(index, selectedItem, latestState.selectedItems);
5074
- if (itemIndex < 0) {
5075
- throw new Error('Pass either selectedItem or index in getSelectedItemProps!');
5076
- }
5073
+ var _getItemAndIndex = getItemAndIndex(selectedItemProp, indexProp, latestState.selectedItems, 'Pass either item or index to getSelectedItemProps!'),
5074
+ index = _getItemAndIndex[1];
5075
+ var isFocusable = index > -1 && index === latestState.activeIndex;
5077
5076
  var selectedItemHandleClick = function selectedItemHandleClick() {
5078
5077
  dispatch({
5079
5078
  type: SelectedItemClick,
@@ -5090,7 +5089,7 @@
5090
5089
  if (selectedItemNode) {
5091
5090
  selectedItemRefs.current.push(selectedItemNode);
5092
5091
  }
5093
- }), _extends2.tabIndex = index === latestState.activeIndex ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
5092
+ }), _extends2.tabIndex = isFocusable ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
5094
5093
  }, [dispatch, latest, selectedItemKeyDownHandlers]);
5095
5094
  var getDropdownProps = react.useCallback(function (_temp2, _temp3) {
5096
5095
  var _extends3;