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.
@@ -2748,6 +2748,7 @@ function getInitialState$1(props) {
2748
2748
  var propTypes$1 = {
2749
2749
  items: PropTypes__default["default"].array.isRequired,
2750
2750
  itemToString: PropTypes__default["default"].func,
2751
+ selectedItemChanged: PropTypes__default["default"].func,
2751
2752
  getA11yStatusMessage: PropTypes__default["default"].func,
2752
2753
  getA11ySelectionMessage: PropTypes__default["default"].func,
2753
2754
  highlightedIndex: PropTypes__default["default"].number,
@@ -2805,16 +2806,18 @@ function useControlledReducer(reducer, initialState, props) {
2805
2806
 
2806
2807
  // ToDo: if needed, make same approach as selectedItemChanged from Downshift.
2807
2808
  react.useEffect(function () {
2808
- if (isControlledProp(props, 'selectedItem')) {
2809
- if (previousSelectedItemRef.current !== props.selectedItem) {
2810
- dispatch({
2811
- type: ControlledPropUpdatedSelectedItem,
2812
- inputValue: props.itemToString(props.selectedItem)
2813
- });
2814
- }
2815
- previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;
2809
+ if (!isControlledProp(props, 'selectedItem')) {
2810
+ return;
2816
2811
  }
2817
- }, [props.selectedItem, state.selectedItem]);
2812
+ if (props.selectedItemChanged(previousSelectedItemRef.current, props.selectedItem)) {
2813
+ dispatch({
2814
+ type: ControlledPropUpdatedSelectedItem,
2815
+ inputValue: props.itemToString(props.selectedItem)
2816
+ });
2817
+ }
2818
+ previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;
2819
+ // eslint-disable-next-line react-hooks/exhaustive-deps
2820
+ }, [state.selectedItem, props.selectedItem]);
2818
2821
  return [getState(state, props), dispatch];
2819
2822
  }
2820
2823
 
@@ -2827,6 +2830,9 @@ if (process.env.NODE_ENV !== 'production') {
2827
2830
  };
2828
2831
  }
2829
2832
  var defaultProps$1 = _extends__default["default"]({}, defaultProps$3, {
2833
+ selectedItemChanged: function selectedItemChanged(prevItem, item) {
2834
+ return prevItem !== item;
2835
+ },
2830
2836
  getA11yStatusMessage: getA11yStatusMessage$1
2831
2837
  });
2832
2838
 
@@ -3276,12 +3282,12 @@ function useCombobox(userProps) {
3276
3282
  inputValue: event.target.value
3277
3283
  });
3278
3284
  };
3279
- var inputHandleBlur = function inputHandleBlur() {
3285
+ var inputHandleBlur = function inputHandleBlur(event) {
3280
3286
  /* istanbul ignore else */
3281
3287
  if (latestState.isOpen && !mouseAndTouchTrackersRef.current.isMouseDown) {
3282
3288
  dispatch({
3283
3289
  type: InputBlur,
3284
- selectItem: true
3290
+ selectItem: event.relatedTarget !== null
3285
3291
  });
3286
3292
  }
3287
3293
  };
@@ -2735,6 +2735,7 @@ function getInitialState$1(props) {
2735
2735
  var propTypes$1 = {
2736
2736
  items: PropTypes.array.isRequired,
2737
2737
  itemToString: PropTypes.func,
2738
+ selectedItemChanged: PropTypes.func,
2738
2739
  getA11yStatusMessage: PropTypes.func,
2739
2740
  getA11ySelectionMessage: PropTypes.func,
2740
2741
  highlightedIndex: PropTypes.number,
@@ -2792,16 +2793,18 @@ function useControlledReducer(reducer, initialState, props) {
2792
2793
 
2793
2794
  // ToDo: if needed, make same approach as selectedItemChanged from Downshift.
2794
2795
  useEffect(function () {
2795
- if (isControlledProp(props, 'selectedItem')) {
2796
- if (previousSelectedItemRef.current !== props.selectedItem) {
2797
- dispatch({
2798
- type: ControlledPropUpdatedSelectedItem,
2799
- inputValue: props.itemToString(props.selectedItem)
2800
- });
2801
- }
2802
- previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;
2796
+ if (!isControlledProp(props, 'selectedItem')) {
2797
+ return;
2803
2798
  }
2804
- }, [props.selectedItem, state.selectedItem]);
2799
+ if (props.selectedItemChanged(previousSelectedItemRef.current, props.selectedItem)) {
2800
+ dispatch({
2801
+ type: ControlledPropUpdatedSelectedItem,
2802
+ inputValue: props.itemToString(props.selectedItem)
2803
+ });
2804
+ }
2805
+ previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;
2806
+ // eslint-disable-next-line react-hooks/exhaustive-deps
2807
+ }, [state.selectedItem, props.selectedItem]);
2805
2808
  return [getState(state, props), dispatch];
2806
2809
  }
2807
2810
 
@@ -2814,6 +2817,9 @@ if (process.env.NODE_ENV !== 'production') {
2814
2817
  };
2815
2818
  }
2816
2819
  var defaultProps$1 = _extends({}, defaultProps$3, {
2820
+ selectedItemChanged: function selectedItemChanged(prevItem, item) {
2821
+ return prevItem !== item;
2822
+ },
2817
2823
  getA11yStatusMessage: getA11yStatusMessage$1
2818
2824
  });
2819
2825
 
@@ -3263,12 +3269,12 @@ function useCombobox(userProps) {
3263
3269
  inputValue: event.target.value
3264
3270
  });
3265
3271
  };
3266
- var inputHandleBlur = function inputHandleBlur() {
3272
+ var inputHandleBlur = function inputHandleBlur(event) {
3267
3273
  /* istanbul ignore else */
3268
3274
  if (latestState.isOpen && !mouseAndTouchTrackersRef.current.isMouseDown) {
3269
3275
  dispatch({
3270
3276
  type: InputBlur,
3271
- selectItem: true
3277
+ selectItem: event.relatedTarget !== null
3272
3278
  });
3273
3279
  }
3274
3280
  };
@@ -2670,6 +2670,7 @@ function getInitialState$1(props) {
2670
2670
  var propTypes$1 = {
2671
2671
  items: PropTypes__default["default"].array.isRequired,
2672
2672
  itemToString: PropTypes__default["default"].func,
2673
+ selectedItemChanged: PropTypes__default["default"].func,
2673
2674
  getA11yStatusMessage: PropTypes__default["default"].func,
2674
2675
  getA11ySelectionMessage: PropTypes__default["default"].func,
2675
2676
  highlightedIndex: PropTypes__default["default"].number,
@@ -2727,16 +2728,18 @@ function useControlledReducer(reducer, initialState, props) {
2727
2728
 
2728
2729
  // ToDo: if needed, make same approach as selectedItemChanged from Downshift.
2729
2730
  react.useEffect(function () {
2730
- if (isControlledProp(props, 'selectedItem')) {
2731
- if (previousSelectedItemRef.current !== props.selectedItem) {
2732
- dispatch({
2733
- type: ControlledPropUpdatedSelectedItem,
2734
- inputValue: props.itemToString(props.selectedItem)
2735
- });
2736
- }
2737
- previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;
2731
+ if (!isControlledProp(props, 'selectedItem')) {
2732
+ return;
2738
2733
  }
2739
- }, [props.selectedItem, state.selectedItem]);
2734
+ if (props.selectedItemChanged(previousSelectedItemRef.current, props.selectedItem)) {
2735
+ dispatch({
2736
+ type: ControlledPropUpdatedSelectedItem,
2737
+ inputValue: props.itemToString(props.selectedItem)
2738
+ });
2739
+ }
2740
+ previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;
2741
+ // eslint-disable-next-line react-hooks/exhaustive-deps
2742
+ }, [state.selectedItem, props.selectedItem]);
2740
2743
  return [getState(state, props), dispatch];
2741
2744
  }
2742
2745
 
@@ -2749,6 +2752,9 @@ if (process.env.NODE_ENV !== 'production') {
2749
2752
  };
2750
2753
  }
2751
2754
  var defaultProps$1 = _extends__default["default"]({}, defaultProps$3, {
2755
+ selectedItemChanged: function selectedItemChanged(prevItem, item) {
2756
+ return prevItem !== item;
2757
+ },
2752
2758
  getA11yStatusMessage: getA11yStatusMessage$1
2753
2759
  });
2754
2760
 
@@ -3198,12 +3204,12 @@ function useCombobox(userProps) {
3198
3204
  inputValue: /* istanbul ignore next (react-native) */event.nativeEvent.text
3199
3205
  });
3200
3206
  };
3201
- var inputHandleBlur = function inputHandleBlur() {
3207
+ var inputHandleBlur = function inputHandleBlur(event) {
3202
3208
  /* istanbul ignore else */
3203
3209
  if (latestState.isOpen && !mouseAndTouchTrackersRef.current.isMouseDown) {
3204
3210
  dispatch({
3205
3211
  type: InputBlur,
3206
- selectItem: true
3212
+ selectItem: event.relatedTarget !== null
3207
3213
  });
3208
3214
  }
3209
3215
  };
@@ -4060,6 +4060,7 @@
4060
4060
  var propTypes$1 = {
4061
4061
  items: PropTypes.array.isRequired,
4062
4062
  itemToString: PropTypes.func,
4063
+ selectedItemChanged: PropTypes.func,
4063
4064
  getA11yStatusMessage: PropTypes.func,
4064
4065
  getA11ySelectionMessage: PropTypes.func,
4065
4066
  highlightedIndex: PropTypes.number,
@@ -4117,16 +4118,18 @@
4117
4118
 
4118
4119
  // ToDo: if needed, make same approach as selectedItemChanged from Downshift.
4119
4120
  react.useEffect(function () {
4120
- if (isControlledProp(props, 'selectedItem')) {
4121
- if (previousSelectedItemRef.current !== props.selectedItem) {
4122
- dispatch({
4123
- type: ControlledPropUpdatedSelectedItem,
4124
- inputValue: props.itemToString(props.selectedItem)
4125
- });
4126
- }
4127
- previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;
4121
+ if (!isControlledProp(props, 'selectedItem')) {
4122
+ return;
4128
4123
  }
4129
- }, [props.selectedItem, state.selectedItem]);
4124
+ if (props.selectedItemChanged(previousSelectedItemRef.current, props.selectedItem)) {
4125
+ dispatch({
4126
+ type: ControlledPropUpdatedSelectedItem,
4127
+ inputValue: props.itemToString(props.selectedItem)
4128
+ });
4129
+ }
4130
+ previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;
4131
+ // eslint-disable-next-line react-hooks/exhaustive-deps
4132
+ }, [state.selectedItem, props.selectedItem]);
4130
4133
  return [getState(state, props), dispatch];
4131
4134
  }
4132
4135
 
@@ -4139,6 +4142,9 @@
4139
4142
  };
4140
4143
  }
4141
4144
  var defaultProps$1 = _extends({}, defaultProps$3, {
4145
+ selectedItemChanged: function selectedItemChanged(prevItem, item) {
4146
+ return prevItem !== item;
4147
+ },
4142
4148
  getA11yStatusMessage: getA11yStatusMessage$1
4143
4149
  });
4144
4150
 
@@ -4588,12 +4594,12 @@
4588
4594
  inputValue: event.target.value
4589
4595
  });
4590
4596
  };
4591
- var inputHandleBlur = function inputHandleBlur() {
4597
+ var inputHandleBlur = function inputHandleBlur(event) {
4592
4598
  /* istanbul ignore else */
4593
4599
  if (latestState.isOpen && !mouseAndTouchTrackersRef.current.isMouseDown) {
4594
4600
  dispatch({
4595
4601
  type: InputBlur,
4596
- selectItem: true
4602
+ selectItem: event.relatedTarget !== null
4597
4603
  });
4598
4604
  }
4599
4605
  };