downshift 7.3.4 → 7.4.1

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "downshift",
3
- "version": "7.3.4",
3
+ "version": "7.4.1",
4
4
  "description": "🏎 A set of primitives to build simple, flexible, WAI-ARIA compliant React autocomplete, combobox or select dropdown components.",
5
5
  "main": "dist/downshift.cjs.js",
6
6
  "react-native": "dist/downshift.native.cjs.js",
@@ -2711,6 +2711,7 @@ function getInitialState$1(props) {
2711
2711
  var propTypes$1 = {
2712
2712
  items: PropTypes__default["default"].array.isRequired,
2713
2713
  itemToString: PropTypes__default["default"].func,
2714
+ selectedItemChanged: PropTypes__default["default"].func,
2714
2715
  getA11yStatusMessage: PropTypes__default["default"].func,
2715
2716
  getA11ySelectionMessage: PropTypes__default["default"].func,
2716
2717
  highlightedIndex: PropTypes__default["default"].number,
@@ -2768,16 +2769,18 @@ function useControlledReducer(reducer, initialState, props) {
2768
2769
 
2769
2770
  // ToDo: if needed, make same approach as selectedItemChanged from Downshift.
2770
2771
  preact.useEffect(function () {
2771
- if (isControlledProp(props, 'selectedItem')) {
2772
- if (previousSelectedItemRef.current !== props.selectedItem) {
2773
- dispatch({
2774
- type: ControlledPropUpdatedSelectedItem,
2775
- inputValue: props.itemToString(props.selectedItem)
2776
- });
2777
- }
2778
- previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;
2772
+ if (!isControlledProp(props, 'selectedItem')) {
2773
+ return;
2779
2774
  }
2780
- }, [props.selectedItem, state.selectedItem]);
2775
+ if (props.selectedItemChanged(previousSelectedItemRef.current, props.selectedItem)) {
2776
+ dispatch({
2777
+ type: ControlledPropUpdatedSelectedItem,
2778
+ inputValue: props.itemToString(props.selectedItem)
2779
+ });
2780
+ }
2781
+ previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;
2782
+ // eslint-disable-next-line react-hooks/exhaustive-deps
2783
+ }, [state.selectedItem, props.selectedItem]);
2781
2784
  return [getState(state, props), dispatch];
2782
2785
  }
2783
2786
 
@@ -2790,6 +2793,9 @@ if (process.env.NODE_ENV !== 'production') {
2790
2793
  };
2791
2794
  }
2792
2795
  var defaultProps$1 = _extends__default["default"]({}, defaultProps$3, {
2796
+ selectedItemChanged: function selectedItemChanged(prevItem, item) {
2797
+ return prevItem !== item;
2798
+ },
2793
2799
  getA11yStatusMessage: getA11yStatusMessage$1
2794
2800
  });
2795
2801
 
@@ -3239,12 +3245,12 @@ function useCombobox(userProps) {
3239
3245
  inputValue: event.target.value
3240
3246
  });
3241
3247
  };
3242
- var inputHandleBlur = function inputHandleBlur() {
3248
+ var inputHandleBlur = function inputHandleBlur(event) {
3243
3249
  /* istanbul ignore else */
3244
3250
  if (latestState.isOpen && !mouseAndTouchTrackersRef.current.isMouseDown) {
3245
3251
  dispatch({
3246
3252
  type: InputBlur,
3247
- selectItem: true
3253
+ selectItem: event.relatedTarget !== null
3248
3254
  });
3249
3255
  }
3250
3256
  };
@@ -2698,6 +2698,7 @@ function getInitialState$1(props) {
2698
2698
  var propTypes$1 = {
2699
2699
  items: PropTypes.array.isRequired,
2700
2700
  itemToString: PropTypes.func,
2701
+ selectedItemChanged: PropTypes.func,
2701
2702
  getA11yStatusMessage: PropTypes.func,
2702
2703
  getA11ySelectionMessage: PropTypes.func,
2703
2704
  highlightedIndex: PropTypes.number,
@@ -2755,16 +2756,18 @@ function useControlledReducer(reducer, initialState, props) {
2755
2756
 
2756
2757
  // ToDo: if needed, make same approach as selectedItemChanged from Downshift.
2757
2758
  useEffect(function () {
2758
- if (isControlledProp(props, 'selectedItem')) {
2759
- if (previousSelectedItemRef.current !== props.selectedItem) {
2760
- dispatch({
2761
- type: ControlledPropUpdatedSelectedItem,
2762
- inputValue: props.itemToString(props.selectedItem)
2763
- });
2764
- }
2765
- previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;
2759
+ if (!isControlledProp(props, 'selectedItem')) {
2760
+ return;
2766
2761
  }
2767
- }, [props.selectedItem, state.selectedItem]);
2762
+ if (props.selectedItemChanged(previousSelectedItemRef.current, props.selectedItem)) {
2763
+ dispatch({
2764
+ type: ControlledPropUpdatedSelectedItem,
2765
+ inputValue: props.itemToString(props.selectedItem)
2766
+ });
2767
+ }
2768
+ previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;
2769
+ // eslint-disable-next-line react-hooks/exhaustive-deps
2770
+ }, [state.selectedItem, props.selectedItem]);
2768
2771
  return [getState(state, props), dispatch];
2769
2772
  }
2770
2773
 
@@ -2777,6 +2780,9 @@ if (process.env.NODE_ENV !== 'production') {
2777
2780
  };
2778
2781
  }
2779
2782
  var defaultProps$1 = _extends({}, defaultProps$3, {
2783
+ selectedItemChanged: function selectedItemChanged(prevItem, item) {
2784
+ return prevItem !== item;
2785
+ },
2780
2786
  getA11yStatusMessage: getA11yStatusMessage$1
2781
2787
  });
2782
2788
 
@@ -3226,12 +3232,12 @@ function useCombobox(userProps) {
3226
3232
  inputValue: event.target.value
3227
3233
  });
3228
3234
  };
3229
- var inputHandleBlur = function inputHandleBlur() {
3235
+ var inputHandleBlur = function inputHandleBlur(event) {
3230
3236
  /* istanbul ignore else */
3231
3237
  if (latestState.isOpen && !mouseAndTouchTrackersRef.current.isMouseDown) {
3232
3238
  dispatch({
3233
3239
  type: InputBlur,
3234
- selectItem: true
3240
+ selectItem: event.relatedTarget !== null
3235
3241
  });
3236
3242
  }
3237
3243
  };
@@ -3007,6 +3007,7 @@
3007
3007
  var propTypes$1 = {
3008
3008
  items: PropTypes__default["default"].array.isRequired,
3009
3009
  itemToString: PropTypes__default["default"].func,
3010
+ selectedItemChanged: PropTypes__default["default"].func,
3010
3011
  getA11yStatusMessage: PropTypes__default["default"].func,
3011
3012
  getA11ySelectionMessage: PropTypes__default["default"].func,
3012
3013
  highlightedIndex: PropTypes__default["default"].number,
@@ -3064,16 +3065,18 @@
3064
3065
 
3065
3066
  // ToDo: if needed, make same approach as selectedItemChanged from Downshift.
3066
3067
  preact.useEffect(function () {
3067
- if (isControlledProp(props, 'selectedItem')) {
3068
- if (previousSelectedItemRef.current !== props.selectedItem) {
3069
- dispatch({
3070
- type: ControlledPropUpdatedSelectedItem,
3071
- inputValue: props.itemToString(props.selectedItem)
3072
- });
3073
- }
3074
- previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;
3068
+ if (!isControlledProp(props, 'selectedItem')) {
3069
+ return;
3075
3070
  }
3076
- }, [props.selectedItem, state.selectedItem]);
3071
+ if (props.selectedItemChanged(previousSelectedItemRef.current, props.selectedItem)) {
3072
+ dispatch({
3073
+ type: ControlledPropUpdatedSelectedItem,
3074
+ inputValue: props.itemToString(props.selectedItem)
3075
+ });
3076
+ }
3077
+ previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;
3078
+ // eslint-disable-next-line react-hooks/exhaustive-deps
3079
+ }, [state.selectedItem, props.selectedItem]);
3077
3080
  return [getState(state, props), dispatch];
3078
3081
  }
3079
3082
 
@@ -3086,6 +3089,9 @@
3086
3089
  };
3087
3090
  }
3088
3091
  var defaultProps$1 = _extends({}, defaultProps$3, {
3092
+ selectedItemChanged: function selectedItemChanged(prevItem, item) {
3093
+ return prevItem !== item;
3094
+ },
3089
3095
  getA11yStatusMessage: getA11yStatusMessage$1
3090
3096
  });
3091
3097
 
@@ -3535,12 +3541,12 @@
3535
3541
  inputValue: event.target.value
3536
3542
  });
3537
3543
  };
3538
- var inputHandleBlur = function inputHandleBlur() {
3544
+ var inputHandleBlur = function inputHandleBlur(event) {
3539
3545
  /* istanbul ignore else */
3540
3546
  if (latestState.isOpen && !mouseAndTouchTrackersRef.current.isMouseDown) {
3541
3547
  dispatch({
3542
3548
  type: InputBlur,
3543
- selectItem: true
3549
+ selectItem: event.relatedTarget !== null
3544
3550
  });
3545
3551
  }
3546
3552
  };