downshift 7.6.0 → 8.0.0-beta.0
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/README.md +12 -2
- package/dist/downshift.cjs.js +348 -355
- package/dist/downshift.esm.js +260 -268
- package/dist/downshift.native.cjs.js +333 -339
- package/dist/downshift.nativeweb.cjs.js +348 -354
- package/dist/downshift.umd.js +351 -355
- package/dist/downshift.umd.js.map +1 -1
- package/dist/downshift.umd.min.js +1 -1
- package/dist/downshift.umd.min.js.map +1 -1
- package/dist/src/hooks/useSelect/types.d.ts +1 -1
- package/dist/src/hooks/useSelect/utils.d.ts +2 -1
- package/dist/src/hooks/utils.d.ts +60 -5
- package/dist/src/utils.d.ts +22 -23
- package/dist/test/downshift.test.d.ts +3 -0
- package/dist/test/useCombobox.test.d.ts +3 -0
- package/dist/test/useMultipleSelect.test.d.ts +3 -0
- package/dist/test/useSelect.test.d.ts +3 -0
- package/package.json +4 -1
- package/preact/dist/downshift.cjs.js +341 -350
- package/preact/dist/downshift.esm.js +253 -263
- package/preact/dist/downshift.umd.js +340 -349
- package/preact/dist/downshift.umd.js.map +1 -1
- package/preact/dist/downshift.umd.min.js +2 -2
- package/preact/dist/downshift.umd.min.js.map +1 -1
- package/typings/index.d.ts +203 -52
- package/CHANGELOG.md +0 -5
|
@@ -6,11 +6,11 @@ var _objectWithoutPropertiesLoose = require('@babel/runtime/helpers/objectWithou
|
|
|
6
6
|
var _extends = require('@babel/runtime/helpers/extends');
|
|
7
7
|
var _assertThisInitialized = require('@babel/runtime/helpers/assertThisInitialized');
|
|
8
8
|
var _inheritsLoose = require('@babel/runtime/helpers/inheritsLoose');
|
|
9
|
-
var
|
|
9
|
+
var React = require('preact');
|
|
10
10
|
var reactIs = require('react-is');
|
|
11
11
|
var compute = require('compute-scroll-into-view');
|
|
12
|
-
var tslib = require('tslib');
|
|
13
12
|
var PropTypes = require('prop-types');
|
|
13
|
+
var tslib = require('tslib');
|
|
14
14
|
|
|
15
15
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
16
16
|
|
|
@@ -18,6 +18,7 @@ var _objectWithoutPropertiesLoose__default = /*#__PURE__*/_interopDefaultLegacy(
|
|
|
18
18
|
var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
|
|
19
19
|
var _assertThisInitialized__default = /*#__PURE__*/_interopDefaultLegacy(_assertThisInitialized);
|
|
20
20
|
var _inheritsLoose__default = /*#__PURE__*/_interopDefaultLegacy(_inheritsLoose);
|
|
21
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
21
22
|
var compute__default = /*#__PURE__*/_interopDefaultLegacy(compute);
|
|
22
23
|
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
23
24
|
|
|
@@ -149,6 +150,11 @@ function generateId() {
|
|
|
149
150
|
* Resets idCounter to 0. Used for SSR.
|
|
150
151
|
*/
|
|
151
152
|
function resetIdCounter() {
|
|
153
|
+
// istanbul ignore next
|
|
154
|
+
if ('useId' in React__default["default"]) {
|
|
155
|
+
console.warn("It is not necessary to call resetIdCounter when using React 18+");
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
152
158
|
idCounter = 0;
|
|
153
159
|
}
|
|
154
160
|
|
|
@@ -301,70 +307,70 @@ function isPlainObject(obj) {
|
|
|
301
307
|
}
|
|
302
308
|
|
|
303
309
|
/**
|
|
304
|
-
* Returns the
|
|
305
|
-
* it will wrap to either 0 or itemCount - 1.
|
|
310
|
+
* Returns the next non-disabled highlightedIndex value.
|
|
306
311
|
*
|
|
307
|
-
* @param {number}
|
|
308
|
-
* @param {number}
|
|
309
|
-
* @param {
|
|
310
|
-
* @param {
|
|
311
|
-
* @param {boolean} circular
|
|
312
|
-
* @returns {number} The
|
|
312
|
+
* @param {number} start The current highlightedIndex.
|
|
313
|
+
* @param {number} offset The offset from the current highlightedIndex to start searching.
|
|
314
|
+
* @param {unknown[]} items The items array.
|
|
315
|
+
* @param {(item: unknown, index: number) => boolean} isItemDisabled Function that tells if an item is disabled or not.
|
|
316
|
+
* @param {boolean?} circular If the search reaches the end, if it can search again starting from the other end.
|
|
317
|
+
* @returns {number} The next highlightedIndex.
|
|
313
318
|
*/
|
|
314
|
-
function
|
|
319
|
+
function getHighlightedIndex(start, offset, items, isItemDisabled, circular) {
|
|
315
320
|
if (circular === void 0) {
|
|
316
|
-
circular =
|
|
321
|
+
circular = false;
|
|
317
322
|
}
|
|
318
|
-
|
|
323
|
+
var count = items.length;
|
|
324
|
+
if (count === 0) {
|
|
319
325
|
return -1;
|
|
320
326
|
}
|
|
321
|
-
var itemsLastIndex =
|
|
322
|
-
if (typeof
|
|
323
|
-
|
|
327
|
+
var itemsLastIndex = count - 1;
|
|
328
|
+
if (typeof start !== 'number' || start < 0 || start > itemsLastIndex) {
|
|
329
|
+
start = offset > 0 ? -1 : itemsLastIndex + 1;
|
|
324
330
|
}
|
|
325
|
-
var
|
|
326
|
-
if (
|
|
327
|
-
|
|
328
|
-
} else if (
|
|
329
|
-
|
|
331
|
+
var current = start + offset;
|
|
332
|
+
if (current < 0) {
|
|
333
|
+
current = circular ? itemsLastIndex : 0;
|
|
334
|
+
} else if (current > itemsLastIndex) {
|
|
335
|
+
current = circular ? 0 : itemsLastIndex;
|
|
330
336
|
}
|
|
331
|
-
var
|
|
332
|
-
if (
|
|
333
|
-
return
|
|
337
|
+
var highlightedIndex = getNonDisabledIndex(current, offset < 0, items, isItemDisabled, circular);
|
|
338
|
+
if (highlightedIndex === -1) {
|
|
339
|
+
return start >= count ? -1 : start;
|
|
334
340
|
}
|
|
335
|
-
return
|
|
341
|
+
return highlightedIndex;
|
|
336
342
|
}
|
|
337
343
|
|
|
338
344
|
/**
|
|
339
|
-
* Returns the next
|
|
345
|
+
* Returns the next non-disabled highlightedIndex value.
|
|
340
346
|
*
|
|
341
|
-
* @param {number}
|
|
342
|
-
* @param {
|
|
343
|
-
* @param {
|
|
344
|
-
* @param {
|
|
345
|
-
* @param {boolean} circular
|
|
346
|
-
* @returns {number} The
|
|
347
|
+
* @param {number} start The current highlightedIndex.
|
|
348
|
+
* @param {boolean} backwards If true, it will search backwards from the start.
|
|
349
|
+
* @param {unknown[]} items The items array.
|
|
350
|
+
* @param {(item: unknown, index: number) => boolean} isItemDisabled Function that tells if an item is disabled or not.
|
|
351
|
+
* @param {boolean} circular If the search reaches the end, if it can search again starting from the other end.
|
|
352
|
+
* @returns {number} The next non-disabled index.
|
|
347
353
|
*/
|
|
348
|
-
function
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
return baseIndex;
|
|
354
|
+
function getNonDisabledIndex(start, backwards, items, isItemDisabled, circular) {
|
|
355
|
+
if (circular === void 0) {
|
|
356
|
+
circular = false;
|
|
352
357
|
}
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
358
|
+
var count = items.length;
|
|
359
|
+
if (backwards) {
|
|
360
|
+
for (var index = start; index >= 0; index--) {
|
|
361
|
+
if (!isItemDisabled(items[index], index)) {
|
|
356
362
|
return index;
|
|
357
363
|
}
|
|
358
364
|
}
|
|
359
365
|
} else {
|
|
360
|
-
for (var _index =
|
|
361
|
-
if (!
|
|
366
|
+
for (var _index = start; _index < count; _index++) {
|
|
367
|
+
if (!isItemDisabled(items[_index], _index)) {
|
|
362
368
|
return _index;
|
|
363
369
|
}
|
|
364
370
|
}
|
|
365
371
|
}
|
|
366
372
|
if (circular) {
|
|
367
|
-
return
|
|
373
|
+
return getNonDisabledIndex(backwards ? count - 1 : 0, backwards, items, isItemDisabled);
|
|
368
374
|
}
|
|
369
375
|
return -1;
|
|
370
376
|
}
|
|
@@ -544,6 +550,10 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
544
550
|
_this.unsetItemCount = function () {
|
|
545
551
|
_this.itemCount = null;
|
|
546
552
|
};
|
|
553
|
+
_this.isItemDisabled = function (_item, index) {
|
|
554
|
+
var currentElementNode = _this.getItemNodeFromIndex(index);
|
|
555
|
+
return currentElementNode && currentElementNode.hasAttribute('disabled');
|
|
556
|
+
};
|
|
547
557
|
_this.setHighlightedIndex = function (highlightedIndex, otherStateToSet) {
|
|
548
558
|
if (highlightedIndex === void 0) {
|
|
549
559
|
highlightedIndex = _this.props.defaultHighlightedIndex;
|
|
@@ -694,7 +704,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
694
704
|
_this.getRootProps.suppressRefError = suppressRefError;
|
|
695
705
|
var _this$getState = _this.getState(),
|
|
696
706
|
isOpen = _this$getState.isOpen;
|
|
697
|
-
return _extends__default["default"]((_extends2 = {}, _extends2[refKey] = handleRefs(ref, _this.rootRef), _extends2.role = 'combobox', _extends2['aria-expanded'] = isOpen, _extends2['aria-haspopup'] = 'listbox', _extends2['aria-owns'] = isOpen ? _this.menuId :
|
|
707
|
+
return _extends__default["default"]((_extends2 = {}, _extends2[refKey] = handleRefs(ref, _this.rootRef), _extends2.role = 'combobox', _extends2['aria-expanded'] = isOpen, _extends2['aria-haspopup'] = 'listbox', _extends2['aria-owns'] = isOpen ? _this.menuId : undefined, _extends2['aria-labelledby'] = _this.labelId, _extends2), rest);
|
|
698
708
|
};
|
|
699
709
|
//\\\\\\\\\\\\\\\\\\\\\\\\\\ ROOT
|
|
700
710
|
_this.keyDownHandlers = {
|
|
@@ -715,9 +725,9 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
715
725
|
if (itemCount > 0) {
|
|
716
726
|
var _this2$getState = _this2.getState(),
|
|
717
727
|
highlightedIndex = _this2$getState.highlightedIndex;
|
|
718
|
-
var nextHighlightedIndex =
|
|
719
|
-
|
|
720
|
-
});
|
|
728
|
+
var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, 1, {
|
|
729
|
+
length: itemCount
|
|
730
|
+
}, _this2.isItemDisabled, true);
|
|
721
731
|
_this2.setHighlightedIndex(nextHighlightedIndex, {
|
|
722
732
|
type: keyDownArrowDown
|
|
723
733
|
});
|
|
@@ -742,9 +752,9 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
742
752
|
if (itemCount > 0) {
|
|
743
753
|
var _this3$getState = _this3.getState(),
|
|
744
754
|
highlightedIndex = _this3$getState.highlightedIndex;
|
|
745
|
-
var nextHighlightedIndex =
|
|
746
|
-
|
|
747
|
-
});
|
|
755
|
+
var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, -1, {
|
|
756
|
+
length: itemCount
|
|
757
|
+
}, _this3.isItemDisabled, true);
|
|
748
758
|
_this3.setHighlightedIndex(nextHighlightedIndex, {
|
|
749
759
|
type: keyDownArrowUp
|
|
750
760
|
});
|
|
@@ -792,7 +802,6 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
792
802
|
});
|
|
793
803
|
_this.inputKeyDownHandlers = _extends__default["default"]({}, _this.keyDownHandlers, {
|
|
794
804
|
Home: function Home(event) {
|
|
795
|
-
var _this4 = this;
|
|
796
805
|
var _this$getState3 = this.getState(),
|
|
797
806
|
isOpen = _this$getState3.isOpen;
|
|
798
807
|
if (!isOpen) {
|
|
@@ -805,15 +814,14 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
805
814
|
}
|
|
806
815
|
|
|
807
816
|
// get next non-disabled starting downwards from 0 if that's disabled.
|
|
808
|
-
var newHighlightedIndex =
|
|
809
|
-
|
|
810
|
-
},
|
|
817
|
+
var newHighlightedIndex = getNonDisabledIndex(0, false, {
|
|
818
|
+
length: itemCount
|
|
819
|
+
}, this.isItemDisabled);
|
|
811
820
|
this.setHighlightedIndex(newHighlightedIndex, {
|
|
812
821
|
type: keyDownHome
|
|
813
822
|
});
|
|
814
823
|
},
|
|
815
824
|
End: function End(event) {
|
|
816
|
-
var _this5 = this;
|
|
817
825
|
var _this$getState4 = this.getState(),
|
|
818
826
|
isOpen = _this$getState4.isOpen;
|
|
819
827
|
if (!isOpen) {
|
|
@@ -826,9 +834,9 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
826
834
|
}
|
|
827
835
|
|
|
828
836
|
// get next non-disabled starting upwards from last index if that's disabled.
|
|
829
|
-
var newHighlightedIndex =
|
|
830
|
-
|
|
831
|
-
},
|
|
837
|
+
var newHighlightedIndex = getNonDisabledIndex(itemCount - 1, true, {
|
|
838
|
+
length: itemCount
|
|
839
|
+
}, this.isItemDisabled);
|
|
832
840
|
this.setHighlightedIndex(newHighlightedIndex, {
|
|
833
841
|
type: keyDownEnd
|
|
834
842
|
});
|
|
@@ -940,8 +948,8 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
940
948
|
}
|
|
941
949
|
return _extends__default["default"]({
|
|
942
950
|
'aria-autocomplete': 'list',
|
|
943
|
-
'aria-activedescendant': isOpen && typeof highlightedIndex === 'number' && highlightedIndex >= 0 ? _this.getItemId(highlightedIndex) :
|
|
944
|
-
'aria-controls': isOpen ? _this.menuId :
|
|
951
|
+
'aria-activedescendant': isOpen && typeof highlightedIndex === 'number' && highlightedIndex >= 0 ? _this.getItemId(highlightedIndex) : undefined,
|
|
952
|
+
'aria-controls': isOpen ? _this.menuId : undefined,
|
|
945
953
|
'aria-labelledby': rest && rest['aria-label'] ? undefined : _this.labelId,
|
|
946
954
|
// https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
|
|
947
955
|
// revert back since autocomplete="nope" is ignored on latest Chrome and Opera
|
|
@@ -993,7 +1001,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
993
1001
|
_this.getMenuProps.called = true;
|
|
994
1002
|
_this.getMenuProps.refKey = refKey;
|
|
995
1003
|
_this.getMenuProps.suppressRefError = suppressRefError;
|
|
996
|
-
return _extends__default["default"]((_extends3 = {}, _extends3[refKey] = handleRefs(ref, _this.menuRef), _extends3.role = 'listbox', _extends3['aria-labelledby'] = props && props['aria-label'] ?
|
|
1004
|
+
return _extends__default["default"]((_extends3 = {}, _extends3[refKey] = handleRefs(ref, _this.menuRef), _extends3.role = 'listbox', _extends3['aria-labelledby'] = props && props['aria-label'] ? undefined : _this.labelId, _extends3.id = _this.menuId, _extends3), props);
|
|
997
1005
|
};
|
|
998
1006
|
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ MENU
|
|
999
1007
|
/////////////////////////////// ITEM
|
|
@@ -1198,14 +1206,13 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1198
1206
|
}
|
|
1199
1207
|
};
|
|
1200
1208
|
_proto.moveHighlightedIndex = function moveHighlightedIndex(amount, otherStateToSet) {
|
|
1201
|
-
var _this6 = this;
|
|
1202
1209
|
var itemCount = this.getItemCount();
|
|
1203
1210
|
var _this$getState8 = this.getState(),
|
|
1204
1211
|
highlightedIndex = _this$getState8.highlightedIndex;
|
|
1205
1212
|
if (itemCount > 0) {
|
|
1206
|
-
var nextHighlightedIndex =
|
|
1207
|
-
|
|
1208
|
-
});
|
|
1213
|
+
var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, amount, {
|
|
1214
|
+
length: itemCount
|
|
1215
|
+
}, this.isItemDisabled, true);
|
|
1209
1216
|
this.setHighlightedIndex(nextHighlightedIndex, otherStateToSet);
|
|
1210
1217
|
}
|
|
1211
1218
|
};
|
|
@@ -1270,7 +1277,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1270
1277
|
};
|
|
1271
1278
|
};
|
|
1272
1279
|
_proto.componentDidMount = function componentDidMount() {
|
|
1273
|
-
var
|
|
1280
|
+
var _this4 = this;
|
|
1274
1281
|
/* istanbul ignore if (react-native) */
|
|
1275
1282
|
if (process.env.NODE_ENV !== 'production' && !false && this.getMenuProps.called && !this.getMenuProps.suppressRefError) {
|
|
1276
1283
|
validateGetMenuPropsCalledCorrectly(this._menuNode, this.getMenuProps);
|
|
@@ -1284,18 +1291,18 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1284
1291
|
// this.isMouseDown is used in the blur handler on the input to determine whether the blur event should
|
|
1285
1292
|
// trigger hiding the menu.
|
|
1286
1293
|
var onMouseDown = function onMouseDown() {
|
|
1287
|
-
|
|
1294
|
+
_this4.isMouseDown = true;
|
|
1288
1295
|
};
|
|
1289
1296
|
var onMouseUp = function onMouseUp(event) {
|
|
1290
|
-
|
|
1297
|
+
_this4.isMouseDown = false;
|
|
1291
1298
|
// if the target element or the activeElement is within a downshift node
|
|
1292
1299
|
// then we don't want to reset downshift
|
|
1293
|
-
var contextWithinDownshift = targetWithinDownshift(event.target, [
|
|
1294
|
-
if (!contextWithinDownshift &&
|
|
1295
|
-
|
|
1300
|
+
var contextWithinDownshift = targetWithinDownshift(event.target, [_this4._rootNode, _this4._menuNode], _this4.props.environment);
|
|
1301
|
+
if (!contextWithinDownshift && _this4.getState().isOpen) {
|
|
1302
|
+
_this4.reset({
|
|
1296
1303
|
type: mouseUp
|
|
1297
1304
|
}, function () {
|
|
1298
|
-
return
|
|
1305
|
+
return _this4.props.onOuterClick(_this4.getStateAndHelpers());
|
|
1299
1306
|
});
|
|
1300
1307
|
}
|
|
1301
1308
|
};
|
|
@@ -1306,18 +1313,18 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1306
1313
|
// If the user taps outside of Downshift, the component should be reset,
|
|
1307
1314
|
// but not if the user is swiping
|
|
1308
1315
|
var onTouchStart = function onTouchStart() {
|
|
1309
|
-
|
|
1316
|
+
_this4.isTouchMove = false;
|
|
1310
1317
|
};
|
|
1311
1318
|
var onTouchMove = function onTouchMove() {
|
|
1312
|
-
|
|
1319
|
+
_this4.isTouchMove = true;
|
|
1313
1320
|
};
|
|
1314
1321
|
var onTouchEnd = function onTouchEnd(event) {
|
|
1315
|
-
var contextWithinDownshift = targetWithinDownshift(event.target, [
|
|
1316
|
-
if (!
|
|
1317
|
-
|
|
1322
|
+
var contextWithinDownshift = targetWithinDownshift(event.target, [_this4._rootNode, _this4._menuNode], _this4.props.environment, false);
|
|
1323
|
+
if (!_this4.isTouchMove && !contextWithinDownshift && _this4.getState().isOpen) {
|
|
1324
|
+
_this4.reset({
|
|
1318
1325
|
type: touchEnd
|
|
1319
1326
|
}, function () {
|
|
1320
|
-
return
|
|
1327
|
+
return _this4.props.onOuterClick(_this4.getStateAndHelpers());
|
|
1321
1328
|
});
|
|
1322
1329
|
}
|
|
1323
1330
|
};
|
|
@@ -1328,8 +1335,8 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1328
1335
|
environment.addEventListener('touchmove', onTouchMove);
|
|
1329
1336
|
environment.addEventListener('touchend', onTouchEnd);
|
|
1330
1337
|
this.cleanup = function () {
|
|
1331
|
-
|
|
1332
|
-
|
|
1338
|
+
_this4.internalClearTimeouts();
|
|
1339
|
+
_this4.updateStatus.cancel();
|
|
1333
1340
|
environment.removeEventListener('mousedown', onMouseDown);
|
|
1334
1341
|
environment.removeEventListener('mouseup', onMouseUp);
|
|
1335
1342
|
environment.removeEventListener('touchstart', onTouchStart);
|
|
@@ -1406,7 +1413,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1406
1413
|
} else if (isDOMElement(element)) {
|
|
1407
1414
|
// they didn't apply the root props, but we can clone
|
|
1408
1415
|
// this and apply the props ourselves
|
|
1409
|
-
return
|
|
1416
|
+
return React.cloneElement(element, this.getRootProps(getElementProps(element)));
|
|
1410
1417
|
}
|
|
1411
1418
|
|
|
1412
1419
|
/* istanbul ignore else */
|
|
@@ -1421,7 +1428,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1421
1428
|
return undefined;
|
|
1422
1429
|
};
|
|
1423
1430
|
return Downshift;
|
|
1424
|
-
}(
|
|
1431
|
+
}(React.Component);
|
|
1425
1432
|
Downshift.defaultProps = {
|
|
1426
1433
|
defaultHighlightedIndex: null,
|
|
1427
1434
|
defaultIsOpen: false,
|
|
@@ -1546,16 +1553,23 @@ var updateA11yStatus = debounce(function (getA11yMessage, document) {
|
|
|
1546
1553
|
}, 200);
|
|
1547
1554
|
|
|
1548
1555
|
// istanbul ignore next
|
|
1549
|
-
var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ?
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1556
|
+
var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? React.useLayoutEffect : React.useEffect;
|
|
1557
|
+
|
|
1558
|
+
// istanbul ignore next
|
|
1559
|
+
var useElementIds = 'useId' in React__default["default"] // Avoid conditional useId call
|
|
1560
|
+
? function useElementIds(_ref) {
|
|
1561
|
+
var id = _ref.id,
|
|
1553
1562
|
labelId = _ref.labelId,
|
|
1554
1563
|
menuId = _ref.menuId,
|
|
1555
1564
|
getItemId = _ref.getItemId,
|
|
1556
1565
|
toggleButtonId = _ref.toggleButtonId,
|
|
1557
1566
|
inputId = _ref.inputId;
|
|
1558
|
-
|
|
1567
|
+
// Avoid conditional useId call
|
|
1568
|
+
var reactId = "downshift-" + React__default["default"].useId();
|
|
1569
|
+
if (!id) {
|
|
1570
|
+
id = reactId;
|
|
1571
|
+
}
|
|
1572
|
+
var elementIdsRef = React.useRef({
|
|
1559
1573
|
labelId: labelId || id + "-label",
|
|
1560
1574
|
menuId: menuId || id + "-menu",
|
|
1561
1575
|
getItemId: getItemId || function (index) {
|
|
@@ -1565,7 +1579,25 @@ function useElementIds(_ref) {
|
|
|
1565
1579
|
inputId: inputId || id + "-input"
|
|
1566
1580
|
});
|
|
1567
1581
|
return elementIdsRef.current;
|
|
1568
|
-
}
|
|
1582
|
+
} : function useElementIds(_ref2) {
|
|
1583
|
+
var _ref2$id = _ref2.id,
|
|
1584
|
+
id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
|
|
1585
|
+
labelId = _ref2.labelId,
|
|
1586
|
+
menuId = _ref2.menuId,
|
|
1587
|
+
getItemId = _ref2.getItemId,
|
|
1588
|
+
toggleButtonId = _ref2.toggleButtonId,
|
|
1589
|
+
inputId = _ref2.inputId;
|
|
1590
|
+
var elementIdsRef = React.useRef({
|
|
1591
|
+
labelId: labelId || id + "-label",
|
|
1592
|
+
menuId: menuId || id + "-menu",
|
|
1593
|
+
getItemId: getItemId || function (index) {
|
|
1594
|
+
return id + "-item-" + index;
|
|
1595
|
+
},
|
|
1596
|
+
toggleButtonId: toggleButtonId || id + "-toggle-button",
|
|
1597
|
+
inputId: inputId || id + "-input"
|
|
1598
|
+
});
|
|
1599
|
+
return elementIdsRef.current;
|
|
1600
|
+
};
|
|
1569
1601
|
function getItemAndIndex(itemProp, indexProp, items, errorMessage) {
|
|
1570
1602
|
var item, index;
|
|
1571
1603
|
if (itemProp === undefined) {
|
|
@@ -1590,7 +1622,7 @@ function capitalizeString(string) {
|
|
|
1590
1622
|
return "" + string.slice(0, 1).toUpperCase() + string.slice(1);
|
|
1591
1623
|
}
|
|
1592
1624
|
function useLatestRef(val) {
|
|
1593
|
-
var ref =
|
|
1625
|
+
var ref = React.useRef(val);
|
|
1594
1626
|
// technically this is not "concurrent mode safe" because we're manipulating
|
|
1595
1627
|
// the value during render (so it's not idempotent). However, the places this
|
|
1596
1628
|
// hook is used is to support memoizing callbacks which will be called
|
|
@@ -1611,9 +1643,9 @@ function useLatestRef(val) {
|
|
|
1611
1643
|
* @returns {Array} An array with the state and an action dispatcher.
|
|
1612
1644
|
*/
|
|
1613
1645
|
function useEnhancedReducer(reducer, initialState, props) {
|
|
1614
|
-
var prevStateRef =
|
|
1615
|
-
var actionRef =
|
|
1616
|
-
var enhancedReducer =
|
|
1646
|
+
var prevStateRef = React.useRef();
|
|
1647
|
+
var actionRef = React.useRef();
|
|
1648
|
+
var enhancedReducer = React.useCallback(function (state, action) {
|
|
1617
1649
|
actionRef.current = action;
|
|
1618
1650
|
state = getState(state, action.props);
|
|
1619
1651
|
var changes = reducer(state, action);
|
|
@@ -1622,17 +1654,17 @@ function useEnhancedReducer(reducer, initialState, props) {
|
|
|
1622
1654
|
}));
|
|
1623
1655
|
return newState;
|
|
1624
1656
|
}, [reducer]);
|
|
1625
|
-
var _useReducer =
|
|
1657
|
+
var _useReducer = React.useReducer(enhancedReducer, initialState),
|
|
1626
1658
|
state = _useReducer[0],
|
|
1627
1659
|
dispatch = _useReducer[1];
|
|
1628
1660
|
var propsRef = useLatestRef(props);
|
|
1629
|
-
var dispatchWithProps =
|
|
1661
|
+
var dispatchWithProps = React.useCallback(function (action) {
|
|
1630
1662
|
return dispatch(_extends__default["default"]({
|
|
1631
1663
|
props: propsRef.current
|
|
1632
1664
|
}, action));
|
|
1633
1665
|
}, [propsRef]);
|
|
1634
1666
|
var action = actionRef.current;
|
|
1635
|
-
|
|
1667
|
+
React.useEffect(function () {
|
|
1636
1668
|
if (action && prevStateRef.current && prevStateRef.current !== state) {
|
|
1637
1669
|
callOnChangeProps(action, getState(prevStateRef.current, action.props), state);
|
|
1638
1670
|
}
|
|
@@ -1736,11 +1768,11 @@ function getHighlightedIndexOnOpen(props, state, offset) {
|
|
|
1736
1768
|
* @returns {Object} Ref containing whether mouseDown or touchMove event is happening
|
|
1737
1769
|
*/
|
|
1738
1770
|
function useMouseAndTouchTracker(isOpen, downshiftElementRefs, environment, handleBlur) {
|
|
1739
|
-
var mouseAndTouchTrackersRef =
|
|
1771
|
+
var mouseAndTouchTrackersRef = React.useRef({
|
|
1740
1772
|
isMouseDown: false,
|
|
1741
1773
|
isTouchMove: false
|
|
1742
1774
|
});
|
|
1743
|
-
|
|
1775
|
+
React.useEffect(function () {
|
|
1744
1776
|
if ((environment == null ? void 0 : environment.addEventListener) == null) {
|
|
1745
1777
|
return;
|
|
1746
1778
|
}
|
|
@@ -1804,15 +1836,15 @@ var useGetterPropsCalledChecker = function useGetterPropsCalledChecker() {
|
|
|
1804
1836
|
/* istanbul ignore next */
|
|
1805
1837
|
if (process.env.NODE_ENV !== 'production') {
|
|
1806
1838
|
useGetterPropsCalledChecker = function useGetterPropsCalledChecker() {
|
|
1807
|
-
var isInitialMountRef =
|
|
1839
|
+
var isInitialMountRef = React.useRef(true);
|
|
1808
1840
|
for (var _len = arguments.length, propKeys = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
1809
1841
|
propKeys[_key] = arguments[_key];
|
|
1810
1842
|
}
|
|
1811
|
-
var getterPropsCalledRef =
|
|
1843
|
+
var getterPropsCalledRef = React.useRef(propKeys.reduce(function (acc, propKey) {
|
|
1812
1844
|
acc[propKey] = {};
|
|
1813
1845
|
return acc;
|
|
1814
1846
|
}, {}));
|
|
1815
|
-
|
|
1847
|
+
React.useEffect(function () {
|
|
1816
1848
|
Object.keys(getterPropsCalledRef.current).forEach(function (propKey) {
|
|
1817
1849
|
var propCallInfo = getterPropsCalledRef.current[propKey];
|
|
1818
1850
|
if (isInitialMountRef.current) {
|
|
@@ -1832,7 +1864,7 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
1832
1864
|
});
|
|
1833
1865
|
isInitialMountRef.current = false;
|
|
1834
1866
|
});
|
|
1835
|
-
var setGetterPropCallInfo =
|
|
1867
|
+
var setGetterPropCallInfo = React.useCallback(function (propKey, suppressRefError, refKey, elementRef) {
|
|
1836
1868
|
getterPropsCalledRef.current[propKey] = {
|
|
1837
1869
|
suppressRefError: suppressRefError,
|
|
1838
1870
|
refKey: refKey,
|
|
@@ -1842,14 +1874,14 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
1842
1874
|
return setGetterPropCallInfo;
|
|
1843
1875
|
};
|
|
1844
1876
|
}
|
|
1845
|
-
function useA11yMessageSetter(getA11yMessage, dependencyArray,
|
|
1846
|
-
var isInitialMount =
|
|
1847
|
-
highlightedIndex =
|
|
1848
|
-
items =
|
|
1849
|
-
environment =
|
|
1850
|
-
rest = _objectWithoutPropertiesLoose__default["default"](
|
|
1877
|
+
function useA11yMessageSetter(getA11yMessage, dependencyArray, _ref3) {
|
|
1878
|
+
var isInitialMount = _ref3.isInitialMount,
|
|
1879
|
+
highlightedIndex = _ref3.highlightedIndex,
|
|
1880
|
+
items = _ref3.items,
|
|
1881
|
+
environment = _ref3.environment,
|
|
1882
|
+
rest = _objectWithoutPropertiesLoose__default["default"](_ref3, _excluded$3);
|
|
1851
1883
|
// Sets a11y status message on changes in state.
|
|
1852
|
-
|
|
1884
|
+
React.useEffect(function () {
|
|
1853
1885
|
if (isInitialMount || false) {
|
|
1854
1886
|
return;
|
|
1855
1887
|
}
|
|
@@ -1863,15 +1895,15 @@ function useA11yMessageSetter(getA11yMessage, dependencyArray, _ref2) {
|
|
|
1863
1895
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1864
1896
|
}, dependencyArray);
|
|
1865
1897
|
}
|
|
1866
|
-
function useScrollIntoView(
|
|
1867
|
-
var highlightedIndex =
|
|
1868
|
-
isOpen =
|
|
1869
|
-
itemRefs =
|
|
1870
|
-
getItemNodeFromIndex =
|
|
1871
|
-
menuElement =
|
|
1872
|
-
scrollIntoViewProp =
|
|
1898
|
+
function useScrollIntoView(_ref4) {
|
|
1899
|
+
var highlightedIndex = _ref4.highlightedIndex,
|
|
1900
|
+
isOpen = _ref4.isOpen,
|
|
1901
|
+
itemRefs = _ref4.itemRefs,
|
|
1902
|
+
getItemNodeFromIndex = _ref4.getItemNodeFromIndex,
|
|
1903
|
+
menuElement = _ref4.menuElement,
|
|
1904
|
+
scrollIntoViewProp = _ref4.scrollIntoView;
|
|
1873
1905
|
// used not to scroll on highlight by mouse.
|
|
1874
|
-
var shouldScrollRef =
|
|
1906
|
+
var shouldScrollRef = React.useRef(true);
|
|
1875
1907
|
// Scroll on highlighted item if change comes from keyboard.
|
|
1876
1908
|
useIsomorphicLayoutEffect(function () {
|
|
1877
1909
|
if (highlightedIndex < 0 || !isOpen || !Object.keys(itemRefs.current).length) {
|
|
@@ -1891,13 +1923,13 @@ function useScrollIntoView(_ref3) {
|
|
|
1891
1923
|
var useControlPropsValidator = noop;
|
|
1892
1924
|
/* istanbul ignore next */
|
|
1893
1925
|
if (process.env.NODE_ENV !== 'production') {
|
|
1894
|
-
useControlPropsValidator = function useControlPropsValidator(
|
|
1895
|
-
var isInitialMount =
|
|
1896
|
-
props =
|
|
1897
|
-
state =
|
|
1926
|
+
useControlPropsValidator = function useControlPropsValidator(_ref5) {
|
|
1927
|
+
var isInitialMount = _ref5.isInitialMount,
|
|
1928
|
+
props = _ref5.props,
|
|
1929
|
+
state = _ref5.state;
|
|
1898
1930
|
// used for checking when props are moving from controlled to uncontrolled.
|
|
1899
|
-
var prevPropsRef =
|
|
1900
|
-
|
|
1931
|
+
var prevPropsRef = React.useRef(props);
|
|
1932
|
+
React.useEffect(function () {
|
|
1901
1933
|
if (isInitialMount) {
|
|
1902
1934
|
return;
|
|
1903
1935
|
}
|
|
@@ -1933,6 +1965,47 @@ function getChangesOnSelection(props, highlightedIndex, inputValue) {
|
|
|
1933
1965
|
}));
|
|
1934
1966
|
}
|
|
1935
1967
|
|
|
1968
|
+
// Shared between all exports.
|
|
1969
|
+
var commonPropTypes = {
|
|
1970
|
+
environment: PropTypes__default["default"].shape({
|
|
1971
|
+
addEventListener: PropTypes__default["default"].func.isRequired,
|
|
1972
|
+
removeEventListener: PropTypes__default["default"].func.isRequired,
|
|
1973
|
+
document: PropTypes__default["default"].shape({
|
|
1974
|
+
createElement: PropTypes__default["default"].func.isRequired,
|
|
1975
|
+
getElementById: PropTypes__default["default"].func.isRequired,
|
|
1976
|
+
activeElement: PropTypes__default["default"].any.isRequired,
|
|
1977
|
+
body: PropTypes__default["default"].any.isRequired
|
|
1978
|
+
}).isRequired,
|
|
1979
|
+
Node: PropTypes__default["default"].func.isRequired
|
|
1980
|
+
}),
|
|
1981
|
+
itemToString: PropTypes__default["default"].func,
|
|
1982
|
+
stateReducer: PropTypes__default["default"].func
|
|
1983
|
+
};
|
|
1984
|
+
|
|
1985
|
+
// Shared between useSelect, useCombobox, Downshift.
|
|
1986
|
+
var commonDropdownPropTypes = _extends__default["default"]({}, commonPropTypes, {
|
|
1987
|
+
getA11yStatusMessage: PropTypes__default["default"].func,
|
|
1988
|
+
highlightedIndex: PropTypes__default["default"].number,
|
|
1989
|
+
defaultHighlightedIndex: PropTypes__default["default"].number,
|
|
1990
|
+
initialHighlightedIndex: PropTypes__default["default"].number,
|
|
1991
|
+
isOpen: PropTypes__default["default"].bool,
|
|
1992
|
+
defaultIsOpen: PropTypes__default["default"].bool,
|
|
1993
|
+
initialIsOpen: PropTypes__default["default"].bool,
|
|
1994
|
+
selectedItem: PropTypes__default["default"].any,
|
|
1995
|
+
initialSelectedItem: PropTypes__default["default"].any,
|
|
1996
|
+
defaultSelectedItem: PropTypes__default["default"].any,
|
|
1997
|
+
id: PropTypes__default["default"].string,
|
|
1998
|
+
labelId: PropTypes__default["default"].string,
|
|
1999
|
+
menuId: PropTypes__default["default"].string,
|
|
2000
|
+
getItemId: PropTypes__default["default"].func,
|
|
2001
|
+
toggleButtonId: PropTypes__default["default"].string,
|
|
2002
|
+
onSelectedItemChange: PropTypes__default["default"].func,
|
|
2003
|
+
onHighlightedIndexChange: PropTypes__default["default"].func,
|
|
2004
|
+
onStateChange: PropTypes__default["default"].func,
|
|
2005
|
+
onIsOpenChange: PropTypes__default["default"].func,
|
|
2006
|
+
scrollIntoView: PropTypes__default["default"].func
|
|
2007
|
+
});
|
|
2008
|
+
|
|
1936
2009
|
function downshiftCommonReducer(state, action, stateChangeTypes) {
|
|
1937
2010
|
var type = action.type,
|
|
1938
2011
|
props = action.props;
|
|
@@ -1992,56 +2065,22 @@ function downshiftCommonReducer(state, action, stateChangeTypes) {
|
|
|
1992
2065
|
/* eslint-enable complexity */
|
|
1993
2066
|
|
|
1994
2067
|
function getItemIndexByCharacterKey(_a) {
|
|
1995
|
-
var keysSoFar = _a.keysSoFar, highlightedIndex = _a.highlightedIndex, items = _a.items, itemToString = _a.itemToString,
|
|
2068
|
+
var keysSoFar = _a.keysSoFar, highlightedIndex = _a.highlightedIndex, items = _a.items, itemToString = _a.itemToString, isItemDisabled = _a.isItemDisabled;
|
|
1996
2069
|
var lowerCasedKeysSoFar = keysSoFar.toLowerCase();
|
|
1997
2070
|
for (var index = 0; index < items.length; index++) {
|
|
1998
2071
|
// if we already have a search query in progress, we also consider the current highlighted item.
|
|
1999
2072
|
var offsetIndex = (index + highlightedIndex + (keysSoFar.length < 2 ? 1 : 0)) % items.length;
|
|
2000
2073
|
var item = items[offsetIndex];
|
|
2001
2074
|
if (item !== undefined &&
|
|
2002
|
-
itemToString(item).toLowerCase().startsWith(lowerCasedKeysSoFar)
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
return offsetIndex;
|
|
2006
|
-
}
|
|
2075
|
+
itemToString(item).toLowerCase().startsWith(lowerCasedKeysSoFar) &&
|
|
2076
|
+
!isItemDisabled(item, offsetIndex)) {
|
|
2077
|
+
return offsetIndex;
|
|
2007
2078
|
}
|
|
2008
2079
|
}
|
|
2009
2080
|
return highlightedIndex;
|
|
2010
2081
|
}
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
itemToString: PropTypes__default["default"].func,
|
|
2014
|
-
getA11yStatusMessage: PropTypes__default["default"].func,
|
|
2015
|
-
getA11ySelectionMessage: PropTypes__default["default"].func,
|
|
2016
|
-
highlightedIndex: PropTypes__default["default"].number,
|
|
2017
|
-
defaultHighlightedIndex: PropTypes__default["default"].number,
|
|
2018
|
-
initialHighlightedIndex: PropTypes__default["default"].number,
|
|
2019
|
-
isOpen: PropTypes__default["default"].bool,
|
|
2020
|
-
defaultIsOpen: PropTypes__default["default"].bool,
|
|
2021
|
-
initialIsOpen: PropTypes__default["default"].bool,
|
|
2022
|
-
selectedItem: PropTypes__default["default"].any,
|
|
2023
|
-
initialSelectedItem: PropTypes__default["default"].any,
|
|
2024
|
-
defaultSelectedItem: PropTypes__default["default"].any,
|
|
2025
|
-
id: PropTypes__default["default"].string,
|
|
2026
|
-
labelId: PropTypes__default["default"].string,
|
|
2027
|
-
menuId: PropTypes__default["default"].string,
|
|
2028
|
-
getItemId: PropTypes__default["default"].func,
|
|
2029
|
-
toggleButtonId: PropTypes__default["default"].string,
|
|
2030
|
-
stateReducer: PropTypes__default["default"].func,
|
|
2031
|
-
onSelectedItemChange: PropTypes__default["default"].func,
|
|
2032
|
-
onHighlightedIndexChange: PropTypes__default["default"].func,
|
|
2033
|
-
onStateChange: PropTypes__default["default"].func,
|
|
2034
|
-
onIsOpenChange: PropTypes__default["default"].func,
|
|
2035
|
-
environment: PropTypes__default["default"].shape({
|
|
2036
|
-
addEventListener: PropTypes__default["default"].func,
|
|
2037
|
-
removeEventListener: PropTypes__default["default"].func,
|
|
2038
|
-
document: PropTypes__default["default"].shape({
|
|
2039
|
-
getElementById: PropTypes__default["default"].func,
|
|
2040
|
-
activeElement: PropTypes__default["default"].any,
|
|
2041
|
-
body: PropTypes__default["default"].any
|
|
2042
|
-
})
|
|
2043
|
-
})
|
|
2044
|
-
};
|
|
2082
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
2083
|
+
var propTypes$2 = tslib.__assign(tslib.__assign({}, commonDropdownPropTypes), { items: PropTypes__default["default"].array.isRequired, isItemDisabled: PropTypes__default["default"].func, getA11ySelectionMessage: PropTypes__default["default"].func });
|
|
2045
2084
|
/**
|
|
2046
2085
|
* Default implementation for status message. Only added when menu is open.
|
|
2047
2086
|
* Will specift if there are results in the list, and if so, how many,
|
|
@@ -2063,7 +2102,9 @@ function getA11yStatusMessage(_a) {
|
|
|
2063
2102
|
}
|
|
2064
2103
|
return '';
|
|
2065
2104
|
}
|
|
2066
|
-
var defaultProps$2 = tslib.__assign(tslib.__assign({}, defaultProps$3), { getA11yStatusMessage: getA11yStatusMessage
|
|
2105
|
+
var defaultProps$2 = tslib.__assign(tslib.__assign({}, defaultProps$3), { getA11yStatusMessage: getA11yStatusMessage, isItemDisabled: function () {
|
|
2106
|
+
return false;
|
|
2107
|
+
} });
|
|
2067
2108
|
// eslint-disable-next-line import/no-mutable-exports
|
|
2068
2109
|
var validatePropTypes$2 = noop;
|
|
2069
2110
|
/* istanbul ignore next */
|
|
@@ -2147,7 +2188,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2147
2188
|
highlightedIndex: prevHighlightedIndex,
|
|
2148
2189
|
items: props.items,
|
|
2149
2190
|
itemToString: props.itemToString,
|
|
2150
|
-
|
|
2191
|
+
isItemDisabled: props.isItemDisabled
|
|
2151
2192
|
});
|
|
2152
2193
|
changes = {
|
|
2153
2194
|
inputValue: inputValue,
|
|
@@ -2158,7 +2199,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2158
2199
|
break;
|
|
2159
2200
|
case ToggleButtonKeyDownArrowDown:
|
|
2160
2201
|
{
|
|
2161
|
-
var _highlightedIndex = state.isOpen ?
|
|
2202
|
+
var _highlightedIndex = state.isOpen ? getHighlightedIndex(state.highlightedIndex, 1, props.items, props.isItemDisabled) : altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1);
|
|
2162
2203
|
changes = {
|
|
2163
2204
|
highlightedIndex: _highlightedIndex,
|
|
2164
2205
|
isOpen: true
|
|
@@ -2169,7 +2210,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2169
2210
|
if (state.isOpen && altKey) {
|
|
2170
2211
|
changes = getChangesOnSelection(props, state.highlightedIndex, false);
|
|
2171
2212
|
} else {
|
|
2172
|
-
var _highlightedIndex2 = state.isOpen ?
|
|
2213
|
+
var _highlightedIndex2 = state.isOpen ? getHighlightedIndex(state.highlightedIndex, -1, props.items, props.isItemDisabled) : getHighlightedIndexOnOpen(props, state, -1);
|
|
2173
2214
|
changes = {
|
|
2174
2215
|
highlightedIndex: _highlightedIndex2,
|
|
2175
2216
|
isOpen: true
|
|
@@ -2183,24 +2224,24 @@ function downshiftSelectReducer(state, action) {
|
|
|
2183
2224
|
break;
|
|
2184
2225
|
case ToggleButtonKeyDownHome:
|
|
2185
2226
|
changes = {
|
|
2186
|
-
highlightedIndex:
|
|
2227
|
+
highlightedIndex: getNonDisabledIndex(0, false, props.items, props.isItemDisabled),
|
|
2187
2228
|
isOpen: true
|
|
2188
2229
|
};
|
|
2189
2230
|
break;
|
|
2190
2231
|
case ToggleButtonKeyDownEnd:
|
|
2191
2232
|
changes = {
|
|
2192
|
-
highlightedIndex:
|
|
2233
|
+
highlightedIndex: getNonDisabledIndex(props.items.length - 1, true, props.items, props.isItemDisabled),
|
|
2193
2234
|
isOpen: true
|
|
2194
2235
|
};
|
|
2195
2236
|
break;
|
|
2196
2237
|
case ToggleButtonKeyDownPageUp:
|
|
2197
2238
|
changes = {
|
|
2198
|
-
highlightedIndex:
|
|
2239
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, -10, props.items, props.isItemDisabled)
|
|
2199
2240
|
};
|
|
2200
2241
|
break;
|
|
2201
2242
|
case ToggleButtonKeyDownPageDown:
|
|
2202
2243
|
changes = {
|
|
2203
|
-
highlightedIndex:
|
|
2244
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, 10, props.items, props.isItemDisabled)
|
|
2204
2245
|
};
|
|
2205
2246
|
break;
|
|
2206
2247
|
case ToggleButtonKeyDownEscape:
|
|
@@ -2231,7 +2272,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2231
2272
|
|
|
2232
2273
|
var _excluded$2 = ["onMouseLeave", "refKey", "onKeyDown", "onBlur", "ref"],
|
|
2233
2274
|
_excluded2$2 = ["onBlur", "onClick", "onPress", "onKeyDown", "refKey", "ref"],
|
|
2234
|
-
_excluded3$1 = ["item", "index", "onMouseMove", "onClick", "onPress", "refKey", "
|
|
2275
|
+
_excluded3$1 = ["item", "index", "onMouseMove", "onClick", "onPress", "refKey", "disabled", "ref"];
|
|
2235
2276
|
useSelect.stateChangeTypes = stateChangeTypes$2;
|
|
2236
2277
|
function useSelect(userProps) {
|
|
2237
2278
|
if (userProps === void 0) {
|
|
@@ -2257,16 +2298,16 @@ function useSelect(userProps) {
|
|
|
2257
2298
|
inputValue = state.inputValue;
|
|
2258
2299
|
|
|
2259
2300
|
// Element efs.
|
|
2260
|
-
var toggleButtonRef =
|
|
2261
|
-
var menuRef =
|
|
2262
|
-
var itemRefs =
|
|
2301
|
+
var toggleButtonRef = React.useRef(null);
|
|
2302
|
+
var menuRef = React.useRef(null);
|
|
2303
|
+
var itemRefs = React.useRef({});
|
|
2263
2304
|
// used to keep the inputValue clearTimeout object between renders.
|
|
2264
|
-
var clearTimeoutRef =
|
|
2305
|
+
var clearTimeoutRef = React.useRef(null);
|
|
2265
2306
|
// prevent id re-generation between renders.
|
|
2266
2307
|
var elementIds = useElementIds(props);
|
|
2267
2308
|
// used to keep track of how many items we had on previous cycle.
|
|
2268
|
-
var previousResultCountRef =
|
|
2269
|
-
var isInitialMountRef =
|
|
2309
|
+
var previousResultCountRef = React.useRef();
|
|
2310
|
+
var isInitialMountRef = React.useRef(true);
|
|
2270
2311
|
// utility callback to get item element.
|
|
2271
2312
|
var latest = useLatestRef({
|
|
2272
2313
|
state: state,
|
|
@@ -2274,7 +2315,7 @@ function useSelect(userProps) {
|
|
|
2274
2315
|
});
|
|
2275
2316
|
|
|
2276
2317
|
// Some utils.
|
|
2277
|
-
var getItemNodeFromIndex =
|
|
2318
|
+
var getItemNodeFromIndex = React.useCallback(function (index) {
|
|
2278
2319
|
return itemRefs.current[elementIds.getItemId(index)];
|
|
2279
2320
|
}, [elementIds]);
|
|
2280
2321
|
|
|
@@ -2306,7 +2347,7 @@ function useSelect(userProps) {
|
|
|
2306
2347
|
});
|
|
2307
2348
|
|
|
2308
2349
|
// Sets cleanup for the keysSoFar callback, debounded after 500ms.
|
|
2309
|
-
|
|
2350
|
+
React.useEffect(function () {
|
|
2310
2351
|
// init the clean function here as we need access to dispatch.
|
|
2311
2352
|
clearTimeoutRef.current = debounce(function (outerDispatch) {
|
|
2312
2353
|
outerDispatch({
|
|
@@ -2322,7 +2363,7 @@ function useSelect(userProps) {
|
|
|
2322
2363
|
}, []);
|
|
2323
2364
|
|
|
2324
2365
|
// Invokes the keysSoFar callback set up above.
|
|
2325
|
-
|
|
2366
|
+
React.useEffect(function () {
|
|
2326
2367
|
if (!inputValue) {
|
|
2327
2368
|
return;
|
|
2328
2369
|
}
|
|
@@ -2333,7 +2374,7 @@ function useSelect(userProps) {
|
|
|
2333
2374
|
props: props,
|
|
2334
2375
|
state: state
|
|
2335
2376
|
});
|
|
2336
|
-
|
|
2377
|
+
React.useEffect(function () {
|
|
2337
2378
|
if (isInitialMountRef.current) {
|
|
2338
2379
|
return;
|
|
2339
2380
|
}
|
|
@@ -2347,27 +2388,26 @@ function useSelect(userProps) {
|
|
|
2347
2388
|
});
|
|
2348
2389
|
var setGetterPropCallInfo = useGetterPropsCalledChecker('getMenuProps', 'getToggleButtonProps');
|
|
2349
2390
|
// Make initial ref false.
|
|
2350
|
-
|
|
2391
|
+
React.useEffect(function () {
|
|
2351
2392
|
isInitialMountRef.current = false;
|
|
2352
2393
|
return function () {
|
|
2353
2394
|
isInitialMountRef.current = true;
|
|
2354
2395
|
};
|
|
2355
2396
|
}, []);
|
|
2356
2397
|
// Reset itemRefs on close.
|
|
2357
|
-
|
|
2398
|
+
React.useEffect(function () {
|
|
2358
2399
|
if (!isOpen) {
|
|
2359
2400
|
itemRefs.current = {};
|
|
2360
2401
|
}
|
|
2361
2402
|
}, [isOpen]);
|
|
2362
2403
|
|
|
2363
2404
|
// Event handler functions.
|
|
2364
|
-
var toggleButtonKeyDownHandlers =
|
|
2405
|
+
var toggleButtonKeyDownHandlers = React.useMemo(function () {
|
|
2365
2406
|
return {
|
|
2366
2407
|
ArrowDown: function ArrowDown(event) {
|
|
2367
2408
|
event.preventDefault();
|
|
2368
2409
|
dispatch({
|
|
2369
2410
|
type: ToggleButtonKeyDownArrowDown,
|
|
2370
|
-
getItemNodeFromIndex: getItemNodeFromIndex,
|
|
2371
2411
|
altKey: event.altKey
|
|
2372
2412
|
});
|
|
2373
2413
|
},
|
|
@@ -2375,22 +2415,19 @@ function useSelect(userProps) {
|
|
|
2375
2415
|
event.preventDefault();
|
|
2376
2416
|
dispatch({
|
|
2377
2417
|
type: ToggleButtonKeyDownArrowUp,
|
|
2378
|
-
getItemNodeFromIndex: getItemNodeFromIndex,
|
|
2379
2418
|
altKey: event.altKey
|
|
2380
2419
|
});
|
|
2381
2420
|
},
|
|
2382
2421
|
Home: function Home(event) {
|
|
2383
2422
|
event.preventDefault();
|
|
2384
2423
|
dispatch({
|
|
2385
|
-
type: ToggleButtonKeyDownHome
|
|
2386
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2424
|
+
type: ToggleButtonKeyDownHome
|
|
2387
2425
|
});
|
|
2388
2426
|
},
|
|
2389
2427
|
End: function End(event) {
|
|
2390
2428
|
event.preventDefault();
|
|
2391
2429
|
dispatch({
|
|
2392
|
-
type: ToggleButtonKeyDownEnd
|
|
2393
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2430
|
+
type: ToggleButtonKeyDownEnd
|
|
2394
2431
|
});
|
|
2395
2432
|
},
|
|
2396
2433
|
Escape: function Escape() {
|
|
@@ -2410,8 +2447,7 @@ function useSelect(userProps) {
|
|
|
2410
2447
|
if (latest.current.state.isOpen) {
|
|
2411
2448
|
event.preventDefault();
|
|
2412
2449
|
dispatch({
|
|
2413
|
-
type: ToggleButtonKeyDownPageUp
|
|
2414
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2450
|
+
type: ToggleButtonKeyDownPageUp
|
|
2415
2451
|
});
|
|
2416
2452
|
}
|
|
2417
2453
|
},
|
|
@@ -2419,8 +2455,7 @@ function useSelect(userProps) {
|
|
|
2419
2455
|
if (latest.current.state.isOpen) {
|
|
2420
2456
|
event.preventDefault();
|
|
2421
2457
|
dispatch({
|
|
2422
|
-
type: ToggleButtonKeyDownPageDown
|
|
2423
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2458
|
+
type: ToggleButtonKeyDownPageDown
|
|
2424
2459
|
});
|
|
2425
2460
|
}
|
|
2426
2461
|
},
|
|
@@ -2436,8 +2471,7 @@ function useSelect(userProps) {
|
|
|
2436
2471
|
if (currentState.inputValue) {
|
|
2437
2472
|
dispatch({
|
|
2438
2473
|
type: ToggleButtonKeyDownCharacter,
|
|
2439
|
-
key: ' '
|
|
2440
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2474
|
+
key: ' '
|
|
2441
2475
|
});
|
|
2442
2476
|
} else {
|
|
2443
2477
|
dispatch({
|
|
@@ -2446,55 +2480,55 @@ function useSelect(userProps) {
|
|
|
2446
2480
|
}
|
|
2447
2481
|
}
|
|
2448
2482
|
};
|
|
2449
|
-
}, [dispatch,
|
|
2483
|
+
}, [dispatch, latest]);
|
|
2450
2484
|
|
|
2451
2485
|
// Action functions.
|
|
2452
|
-
var toggleMenu =
|
|
2486
|
+
var toggleMenu = React.useCallback(function () {
|
|
2453
2487
|
dispatch({
|
|
2454
2488
|
type: FunctionToggleMenu$1
|
|
2455
2489
|
});
|
|
2456
2490
|
}, [dispatch]);
|
|
2457
|
-
var closeMenu =
|
|
2491
|
+
var closeMenu = React.useCallback(function () {
|
|
2458
2492
|
dispatch({
|
|
2459
2493
|
type: FunctionCloseMenu$1
|
|
2460
2494
|
});
|
|
2461
2495
|
}, [dispatch]);
|
|
2462
|
-
var openMenu =
|
|
2496
|
+
var openMenu = React.useCallback(function () {
|
|
2463
2497
|
dispatch({
|
|
2464
2498
|
type: FunctionOpenMenu$1
|
|
2465
2499
|
});
|
|
2466
2500
|
}, [dispatch]);
|
|
2467
|
-
var setHighlightedIndex =
|
|
2501
|
+
var setHighlightedIndex = React.useCallback(function (newHighlightedIndex) {
|
|
2468
2502
|
dispatch({
|
|
2469
2503
|
type: FunctionSetHighlightedIndex$1,
|
|
2470
2504
|
highlightedIndex: newHighlightedIndex
|
|
2471
2505
|
});
|
|
2472
2506
|
}, [dispatch]);
|
|
2473
|
-
var selectItem =
|
|
2507
|
+
var selectItem = React.useCallback(function (newSelectedItem) {
|
|
2474
2508
|
dispatch({
|
|
2475
2509
|
type: FunctionSelectItem$1,
|
|
2476
2510
|
selectedItem: newSelectedItem
|
|
2477
2511
|
});
|
|
2478
2512
|
}, [dispatch]);
|
|
2479
|
-
var reset =
|
|
2513
|
+
var reset = React.useCallback(function () {
|
|
2480
2514
|
dispatch({
|
|
2481
2515
|
type: FunctionReset$2
|
|
2482
2516
|
});
|
|
2483
2517
|
}, [dispatch]);
|
|
2484
|
-
var setInputValue =
|
|
2518
|
+
var setInputValue = React.useCallback(function (newInputValue) {
|
|
2485
2519
|
dispatch({
|
|
2486
2520
|
type: FunctionSetInputValue$1,
|
|
2487
2521
|
inputValue: newInputValue
|
|
2488
2522
|
});
|
|
2489
2523
|
}, [dispatch]);
|
|
2490
2524
|
// Getter functions.
|
|
2491
|
-
var getLabelProps =
|
|
2525
|
+
var getLabelProps = React.useCallback(function (labelProps) {
|
|
2492
2526
|
return _extends__default["default"]({
|
|
2493
2527
|
id: elementIds.labelId,
|
|
2494
2528
|
htmlFor: elementIds.toggleButtonId
|
|
2495
2529
|
}, labelProps);
|
|
2496
2530
|
}, [elementIds]);
|
|
2497
|
-
var getMenuProps =
|
|
2531
|
+
var getMenuProps = React.useCallback(function (_temp, _temp2) {
|
|
2498
2532
|
var _extends2;
|
|
2499
2533
|
var _ref = _temp === void 0 ? {} : _temp,
|
|
2500
2534
|
onMouseLeave = _ref.onMouseLeave,
|
|
@@ -2517,7 +2551,7 @@ function useSelect(userProps) {
|
|
|
2517
2551
|
menuRef.current = menuNode;
|
|
2518
2552
|
}), _extends2.id = elementIds.menuId, _extends2.role = 'listbox', _extends2['aria-labelledby'] = rest && rest['aria-label'] ? undefined : "" + elementIds.labelId, _extends2.onMouseLeave = callAllEventHandlers(onMouseLeave, menuHandleMouseLeave), _extends2), rest);
|
|
2519
2553
|
}, [dispatch, setGetterPropCallInfo, elementIds]);
|
|
2520
|
-
var getToggleButtonProps =
|
|
2554
|
+
var getToggleButtonProps = React.useCallback(function (_temp3, _temp4) {
|
|
2521
2555
|
var _extends3;
|
|
2522
2556
|
var _ref3 = _temp3 === void 0 ? {} : _temp3,
|
|
2523
2557
|
onBlur = _ref3.onBlur,
|
|
@@ -2551,8 +2585,7 @@ function useSelect(userProps) {
|
|
|
2551
2585
|
} else if (isAcceptedCharacterKey(key)) {
|
|
2552
2586
|
dispatch({
|
|
2553
2587
|
type: ToggleButtonKeyDownCharacter,
|
|
2554
|
-
key: key
|
|
2555
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2588
|
+
key: key
|
|
2556
2589
|
});
|
|
2557
2590
|
}
|
|
2558
2591
|
};
|
|
@@ -2568,8 +2601,8 @@ function useSelect(userProps) {
|
|
|
2568
2601
|
}
|
|
2569
2602
|
setGetterPropCallInfo('getToggleButtonProps', suppressRefError, refKey, toggleButtonRef);
|
|
2570
2603
|
return toggleProps;
|
|
2571
|
-
}, [latest, elementIds, setGetterPropCallInfo, dispatch, mouseAndTouchTrackersRef, toggleButtonKeyDownHandlers
|
|
2572
|
-
var getItemProps =
|
|
2604
|
+
}, [latest, elementIds, setGetterPropCallInfo, dispatch, mouseAndTouchTrackersRef, toggleButtonKeyDownHandlers]);
|
|
2605
|
+
var getItemProps = React.useCallback(function (_temp5) {
|
|
2573
2606
|
var _extends4;
|
|
2574
2607
|
var _ref5 = _temp5 === void 0 ? {} : _temp5,
|
|
2575
2608
|
itemProp = _ref5.item,
|
|
@@ -2579,15 +2612,19 @@ function useSelect(userProps) {
|
|
|
2579
2612
|
_ref5.onPress;
|
|
2580
2613
|
var _ref5$refKey = _ref5.refKey,
|
|
2581
2614
|
refKey = _ref5$refKey === void 0 ? 'ref' : _ref5$refKey,
|
|
2615
|
+
disabledProp = _ref5.disabled,
|
|
2582
2616
|
ref = _ref5.ref,
|
|
2583
|
-
disabled = _ref5.disabled,
|
|
2584
2617
|
rest = _objectWithoutPropertiesLoose__default["default"](_ref5, _excluded3$1);
|
|
2618
|
+
if (disabledProp !== undefined) {
|
|
2619
|
+
console.warn('Passing "disabled" as an argument to getItemProps is not supported anymore. Please use the isItemDisabled prop from useSelect.');
|
|
2620
|
+
}
|
|
2585
2621
|
var _latest$current = latest.current,
|
|
2586
2622
|
latestState = _latest$current.state,
|
|
2587
2623
|
latestProps = _latest$current.props;
|
|
2588
2624
|
var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
|
|
2589
2625
|
item = _getItemAndIndex[0],
|
|
2590
2626
|
index = _getItemAndIndex[1];
|
|
2627
|
+
var disabled = latestProps.isItemDisabled(item, index);
|
|
2591
2628
|
var itemHandleMouseMove = function itemHandleMouseMove() {
|
|
2592
2629
|
if (index === latestState.highlightedIndex) {
|
|
2593
2630
|
return;
|
|
@@ -2605,16 +2642,11 @@ function useSelect(userProps) {
|
|
|
2605
2642
|
index: index
|
|
2606
2643
|
});
|
|
2607
2644
|
};
|
|
2608
|
-
var itemProps = _extends__default["default"]((_extends4 = {
|
|
2609
|
-
disabled: disabled,
|
|
2610
|
-
role: 'option',
|
|
2611
|
-
'aria-selected': "" + (item === selectedItem),
|
|
2612
|
-
id: elementIds.getItemId(index)
|
|
2613
|
-
}, _extends4[refKey] = handleRefs(ref, function (itemNode) {
|
|
2645
|
+
var itemProps = _extends__default["default"]((_extends4 = {}, _extends4[refKey] = handleRefs(ref, function (itemNode) {
|
|
2614
2646
|
if (itemNode) {
|
|
2615
2647
|
itemRefs.current[elementIds.getItemId(index)] = itemNode;
|
|
2616
2648
|
}
|
|
2617
|
-
}), _extends4), rest);
|
|
2649
|
+
}), _extends4['aria-disabled'] = disabled, _extends4['aria-selected'] = "" + (item === latestState.selectedItem), _extends4.id = elementIds.getItemId(index), _extends4.role = 'option', _extends4), rest);
|
|
2618
2650
|
if (!disabled) {
|
|
2619
2651
|
/* istanbul ignore next (react-native) */
|
|
2620
2652
|
{
|
|
@@ -2623,7 +2655,7 @@ function useSelect(userProps) {
|
|
|
2623
2655
|
}
|
|
2624
2656
|
itemProps.onMouseMove = callAllEventHandlers(onMouseMove, itemHandleMouseMove);
|
|
2625
2657
|
return itemProps;
|
|
2626
|
-
}, [latest,
|
|
2658
|
+
}, [latest, elementIds, shouldScrollRef, dispatch]);
|
|
2627
2659
|
return {
|
|
2628
2660
|
// prop getters.
|
|
2629
2661
|
getToggleButtonProps: getToggleButtonProps,
|
|
@@ -2656,7 +2688,7 @@ var InputKeyDownPageDown = process.env.NODE_ENV !== "production" ? '__input_keyd
|
|
|
2656
2688
|
var InputKeyDownEnter = process.env.NODE_ENV !== "production" ? '__input_keydown_enter__' : 7;
|
|
2657
2689
|
var InputChange = process.env.NODE_ENV !== "production" ? '__input_change__' : 8;
|
|
2658
2690
|
var InputBlur = process.env.NODE_ENV !== "production" ? '__input_blur__' : 9;
|
|
2659
|
-
var
|
|
2691
|
+
var InputClick = process.env.NODE_ENV !== "production" ? '__input_click__' : 10;
|
|
2660
2692
|
var MenuMouseLeave = process.env.NODE_ENV !== "production" ? '__menu_mouse_leave__' : 11;
|
|
2661
2693
|
var ItemMouseMove = process.env.NODE_ENV !== "production" ? '__item_mouse_move__' : 12;
|
|
2662
2694
|
var ItemClick = process.env.NODE_ENV !== "production" ? '__item_click__' : 13;
|
|
@@ -2682,7 +2714,7 @@ var stateChangeTypes$1 = /*#__PURE__*/Object.freeze({
|
|
|
2682
2714
|
InputKeyDownEnter: InputKeyDownEnter,
|
|
2683
2715
|
InputChange: InputChange,
|
|
2684
2716
|
InputBlur: InputBlur,
|
|
2685
|
-
|
|
2717
|
+
InputClick: InputClick,
|
|
2686
2718
|
MenuMouseLeave: MenuMouseLeave,
|
|
2687
2719
|
ItemMouseMove: ItemMouseMove,
|
|
2688
2720
|
ItemClick: ItemClick,
|
|
@@ -2708,46 +2740,17 @@ function getInitialState$1(props) {
|
|
|
2708
2740
|
inputValue: inputValue
|
|
2709
2741
|
});
|
|
2710
2742
|
}
|
|
2711
|
-
var propTypes$1 = {
|
|
2743
|
+
var propTypes$1 = _extends__default["default"]({}, commonDropdownPropTypes, {
|
|
2712
2744
|
items: PropTypes__default["default"].array.isRequired,
|
|
2713
|
-
|
|
2745
|
+
isItemDisabled: PropTypes__default["default"].func,
|
|
2714
2746
|
selectedItemChanged: PropTypes__default["default"].func,
|
|
2715
|
-
getA11yStatusMessage: PropTypes__default["default"].func,
|
|
2716
2747
|
getA11ySelectionMessage: PropTypes__default["default"].func,
|
|
2717
|
-
highlightedIndex: PropTypes__default["default"].number,
|
|
2718
|
-
defaultHighlightedIndex: PropTypes__default["default"].number,
|
|
2719
|
-
initialHighlightedIndex: PropTypes__default["default"].number,
|
|
2720
|
-
isOpen: PropTypes__default["default"].bool,
|
|
2721
|
-
defaultIsOpen: PropTypes__default["default"].bool,
|
|
2722
|
-
initialIsOpen: PropTypes__default["default"].bool,
|
|
2723
|
-
selectedItem: PropTypes__default["default"].any,
|
|
2724
|
-
initialSelectedItem: PropTypes__default["default"].any,
|
|
2725
|
-
defaultSelectedItem: PropTypes__default["default"].any,
|
|
2726
2748
|
inputValue: PropTypes__default["default"].string,
|
|
2727
2749
|
defaultInputValue: PropTypes__default["default"].string,
|
|
2728
2750
|
initialInputValue: PropTypes__default["default"].string,
|
|
2729
|
-
id: PropTypes__default["default"].string,
|
|
2730
|
-
labelId: PropTypes__default["default"].string,
|
|
2731
|
-
menuId: PropTypes__default["default"].string,
|
|
2732
|
-
getItemId: PropTypes__default["default"].func,
|
|
2733
2751
|
inputId: PropTypes__default["default"].string,
|
|
2734
|
-
|
|
2735
|
-
|
|
2736
|
-
onSelectedItemChange: PropTypes__default["default"].func,
|
|
2737
|
-
onHighlightedIndexChange: PropTypes__default["default"].func,
|
|
2738
|
-
onStateChange: PropTypes__default["default"].func,
|
|
2739
|
-
onIsOpenChange: PropTypes__default["default"].func,
|
|
2740
|
-
onInputValueChange: PropTypes__default["default"].func,
|
|
2741
|
-
environment: PropTypes__default["default"].shape({
|
|
2742
|
-
addEventListener: PropTypes__default["default"].func,
|
|
2743
|
-
removeEventListener: PropTypes__default["default"].func,
|
|
2744
|
-
document: PropTypes__default["default"].shape({
|
|
2745
|
-
getElementById: PropTypes__default["default"].func,
|
|
2746
|
-
activeElement: PropTypes__default["default"].any,
|
|
2747
|
-
body: PropTypes__default["default"].any
|
|
2748
|
-
})
|
|
2749
|
-
})
|
|
2750
|
-
};
|
|
2752
|
+
onInputValueChange: PropTypes__default["default"].func
|
|
2753
|
+
});
|
|
2751
2754
|
|
|
2752
2755
|
/**
|
|
2753
2756
|
* The useCombobox version of useControlledReducer, which also
|
|
@@ -2762,13 +2765,13 @@ var propTypes$1 = {
|
|
|
2762
2765
|
* @returns {Array} An array with the state and an action dispatcher.
|
|
2763
2766
|
*/
|
|
2764
2767
|
function useControlledReducer(reducer, initialState, props) {
|
|
2765
|
-
var previousSelectedItemRef =
|
|
2768
|
+
var previousSelectedItemRef = React.useRef();
|
|
2766
2769
|
var _useEnhancedReducer = useEnhancedReducer(reducer, initialState, props),
|
|
2767
2770
|
state = _useEnhancedReducer[0],
|
|
2768
2771
|
dispatch = _useEnhancedReducer[1];
|
|
2769
2772
|
|
|
2770
2773
|
// ToDo: if needed, make same approach as selectedItemChanged from Downshift.
|
|
2771
|
-
|
|
2774
|
+
React.useEffect(function () {
|
|
2772
2775
|
if (!isControlledProp(props, 'selectedItem')) {
|
|
2773
2776
|
return;
|
|
2774
2777
|
}
|
|
@@ -2796,7 +2799,10 @@ var defaultProps$1 = _extends__default["default"]({}, defaultProps$3, {
|
|
|
2796
2799
|
selectedItemChanged: function selectedItemChanged(prevItem, item) {
|
|
2797
2800
|
return prevItem !== item;
|
|
2798
2801
|
},
|
|
2799
|
-
getA11yStatusMessage: getA11yStatusMessage$1
|
|
2802
|
+
getA11yStatusMessage: getA11yStatusMessage$1,
|
|
2803
|
+
isItemDisabled: function isItemDisabled() {
|
|
2804
|
+
return false;
|
|
2805
|
+
}
|
|
2800
2806
|
});
|
|
2801
2807
|
|
|
2802
2808
|
/* eslint-disable complexity */
|
|
@@ -2818,11 +2824,11 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2818
2824
|
case InputKeyDownArrowDown:
|
|
2819
2825
|
if (state.isOpen) {
|
|
2820
2826
|
changes = {
|
|
2821
|
-
highlightedIndex:
|
|
2827
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, 1, props.items, props.isItemDisabled, true)
|
|
2822
2828
|
};
|
|
2823
2829
|
} else {
|
|
2824
2830
|
changes = {
|
|
2825
|
-
highlightedIndex: altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1
|
|
2831
|
+
highlightedIndex: altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1),
|
|
2826
2832
|
isOpen: props.items.length >= 0
|
|
2827
2833
|
};
|
|
2828
2834
|
}
|
|
@@ -2833,12 +2839,12 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2833
2839
|
changes = getChangesOnSelection(props, state.highlightedIndex);
|
|
2834
2840
|
} else {
|
|
2835
2841
|
changes = {
|
|
2836
|
-
highlightedIndex:
|
|
2842
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, -1, props.items, props.isItemDisabled, true)
|
|
2837
2843
|
};
|
|
2838
2844
|
}
|
|
2839
2845
|
} else {
|
|
2840
2846
|
changes = {
|
|
2841
|
-
highlightedIndex: getHighlightedIndexOnOpen(props, state, -1
|
|
2847
|
+
highlightedIndex: getHighlightedIndexOnOpen(props, state, -1),
|
|
2842
2848
|
isOpen: props.items.length >= 0
|
|
2843
2849
|
};
|
|
2844
2850
|
}
|
|
@@ -2857,22 +2863,22 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2857
2863
|
break;
|
|
2858
2864
|
case InputKeyDownPageUp:
|
|
2859
2865
|
changes = {
|
|
2860
|
-
highlightedIndex:
|
|
2866
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, -10, props.items, props.isItemDisabled, true)
|
|
2861
2867
|
};
|
|
2862
2868
|
break;
|
|
2863
2869
|
case InputKeyDownPageDown:
|
|
2864
2870
|
changes = {
|
|
2865
|
-
highlightedIndex:
|
|
2871
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, 10, props.items, props.isItemDisabled, true)
|
|
2866
2872
|
};
|
|
2867
2873
|
break;
|
|
2868
2874
|
case InputKeyDownHome:
|
|
2869
2875
|
changes = {
|
|
2870
|
-
highlightedIndex:
|
|
2876
|
+
highlightedIndex: getNonDisabledIndex(0, false, props.items, props.isItemDisabled)
|
|
2871
2877
|
};
|
|
2872
2878
|
break;
|
|
2873
2879
|
case InputKeyDownEnd:
|
|
2874
2880
|
changes = {
|
|
2875
|
-
highlightedIndex:
|
|
2881
|
+
highlightedIndex: getNonDisabledIndex(props.items.length - 1, true, props.items, props.isItemDisabled)
|
|
2876
2882
|
};
|
|
2877
2883
|
break;
|
|
2878
2884
|
case InputBlur:
|
|
@@ -2891,10 +2897,10 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2891
2897
|
inputValue: action.inputValue
|
|
2892
2898
|
};
|
|
2893
2899
|
break;
|
|
2894
|
-
case
|
|
2900
|
+
case InputClick:
|
|
2895
2901
|
changes = {
|
|
2896
|
-
isOpen:
|
|
2897
|
-
highlightedIndex: getHighlightedIndexOnOpen(props, state, 0)
|
|
2902
|
+
isOpen: !state.isOpen,
|
|
2903
|
+
highlightedIndex: state.isOpen ? -1 : getHighlightedIndexOnOpen(props, state, 0)
|
|
2898
2904
|
};
|
|
2899
2905
|
break;
|
|
2900
2906
|
case FunctionSelectItem:
|
|
@@ -2918,7 +2924,7 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2918
2924
|
var _excluded$1 = ["onMouseLeave", "refKey", "ref"],
|
|
2919
2925
|
_excluded2$1 = ["item", "index", "refKey", "ref", "onMouseMove", "onMouseDown", "onClick", "onPress", "disabled"],
|
|
2920
2926
|
_excluded3 = ["onClick", "onPress", "refKey", "ref"],
|
|
2921
|
-
_excluded4 = ["onKeyDown", "onChange", "onInput", "
|
|
2927
|
+
_excluded4 = ["onKeyDown", "onChange", "onInput", "onBlur", "onChangeText", "onClick", "refKey", "ref"];
|
|
2922
2928
|
useCombobox.stateChangeTypes = stateChangeTypes$1;
|
|
2923
2929
|
function useCombobox(userProps) {
|
|
2924
2930
|
if (userProps === void 0) {
|
|
@@ -2946,21 +2952,21 @@ function useCombobox(userProps) {
|
|
|
2946
2952
|
inputValue = state.inputValue;
|
|
2947
2953
|
|
|
2948
2954
|
// Element refs.
|
|
2949
|
-
var menuRef =
|
|
2950
|
-
var itemRefs =
|
|
2951
|
-
var inputRef =
|
|
2952
|
-
var toggleButtonRef =
|
|
2953
|
-
var isInitialMountRef =
|
|
2955
|
+
var menuRef = React.useRef(null);
|
|
2956
|
+
var itemRefs = React.useRef({});
|
|
2957
|
+
var inputRef = React.useRef(null);
|
|
2958
|
+
var toggleButtonRef = React.useRef(null);
|
|
2959
|
+
var isInitialMountRef = React.useRef(true);
|
|
2954
2960
|
// prevent id re-generation between renders.
|
|
2955
2961
|
var elementIds = useElementIds(props);
|
|
2956
2962
|
// used to keep track of how many items we had on previous cycle.
|
|
2957
|
-
var previousResultCountRef =
|
|
2963
|
+
var previousResultCountRef = React.useRef();
|
|
2958
2964
|
// utility callback to get item element.
|
|
2959
2965
|
var latest = useLatestRef({
|
|
2960
2966
|
state: state,
|
|
2961
2967
|
props: props
|
|
2962
2968
|
});
|
|
2963
|
-
var getItemNodeFromIndex =
|
|
2969
|
+
var getItemNodeFromIndex = React.useCallback(function (index) {
|
|
2964
2970
|
return itemRefs.current[elementIds.getItemId(index)];
|
|
2965
2971
|
}, [elementIds]);
|
|
2966
2972
|
|
|
@@ -2996,14 +3002,14 @@ function useCombobox(userProps) {
|
|
|
2996
3002
|
state: state
|
|
2997
3003
|
});
|
|
2998
3004
|
// Focus the input on first render if required.
|
|
2999
|
-
|
|
3005
|
+
React.useEffect(function () {
|
|
3000
3006
|
var focusOnOpen = initialIsOpen || defaultIsOpen || isOpen;
|
|
3001
3007
|
if (focusOnOpen && inputRef.current) {
|
|
3002
3008
|
inputRef.current.focus();
|
|
3003
3009
|
}
|
|
3004
3010
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
3005
3011
|
}, []);
|
|
3006
|
-
|
|
3012
|
+
React.useEffect(function () {
|
|
3007
3013
|
if (isInitialMountRef.current) {
|
|
3008
3014
|
return;
|
|
3009
3015
|
}
|
|
@@ -3018,14 +3024,14 @@ function useCombobox(userProps) {
|
|
|
3018
3024
|
});
|
|
3019
3025
|
var setGetterPropCallInfo = useGetterPropsCalledChecker('getInputProps', 'getMenuProps');
|
|
3020
3026
|
// Make initial ref false.
|
|
3021
|
-
|
|
3027
|
+
React.useEffect(function () {
|
|
3022
3028
|
isInitialMountRef.current = false;
|
|
3023
3029
|
return function () {
|
|
3024
3030
|
isInitialMountRef.current = true;
|
|
3025
3031
|
};
|
|
3026
3032
|
}, []);
|
|
3027
3033
|
// Reset itemRefs on close.
|
|
3028
|
-
|
|
3034
|
+
React.useEffect(function () {
|
|
3029
3035
|
var _environment$document;
|
|
3030
3036
|
if (!isOpen) {
|
|
3031
3037
|
itemRefs.current = {};
|
|
@@ -3036,22 +3042,20 @@ function useCombobox(userProps) {
|
|
|
3036
3042
|
}, [isOpen, environment]);
|
|
3037
3043
|
|
|
3038
3044
|
/* Event handler functions */
|
|
3039
|
-
var inputKeyDownHandlers =
|
|
3045
|
+
var inputKeyDownHandlers = React.useMemo(function () {
|
|
3040
3046
|
return {
|
|
3041
3047
|
ArrowDown: function ArrowDown(event) {
|
|
3042
3048
|
event.preventDefault();
|
|
3043
3049
|
dispatch({
|
|
3044
3050
|
type: InputKeyDownArrowDown,
|
|
3045
|
-
altKey: event.altKey
|
|
3046
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3051
|
+
altKey: event.altKey
|
|
3047
3052
|
});
|
|
3048
3053
|
},
|
|
3049
3054
|
ArrowUp: function ArrowUp(event) {
|
|
3050
3055
|
event.preventDefault();
|
|
3051
3056
|
dispatch({
|
|
3052
3057
|
type: InputKeyDownArrowUp,
|
|
3053
|
-
altKey: event.altKey
|
|
3054
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3058
|
+
altKey: event.altKey
|
|
3055
3059
|
});
|
|
3056
3060
|
},
|
|
3057
3061
|
Home: function Home(event) {
|
|
@@ -3060,8 +3064,7 @@ function useCombobox(userProps) {
|
|
|
3060
3064
|
}
|
|
3061
3065
|
event.preventDefault();
|
|
3062
3066
|
dispatch({
|
|
3063
|
-
type: InputKeyDownHome
|
|
3064
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3067
|
+
type: InputKeyDownHome
|
|
3065
3068
|
});
|
|
3066
3069
|
},
|
|
3067
3070
|
End: function End(event) {
|
|
@@ -3070,8 +3073,7 @@ function useCombobox(userProps) {
|
|
|
3070
3073
|
}
|
|
3071
3074
|
event.preventDefault();
|
|
3072
3075
|
dispatch({
|
|
3073
|
-
type: InputKeyDownEnd
|
|
3074
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3076
|
+
type: InputKeyDownEnd
|
|
3075
3077
|
});
|
|
3076
3078
|
},
|
|
3077
3079
|
Escape: function Escape(event) {
|
|
@@ -3092,16 +3094,14 @@ function useCombobox(userProps) {
|
|
|
3092
3094
|
}
|
|
3093
3095
|
event.preventDefault();
|
|
3094
3096
|
dispatch({
|
|
3095
|
-
type: InputKeyDownEnter
|
|
3096
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3097
|
+
type: InputKeyDownEnter
|
|
3097
3098
|
});
|
|
3098
3099
|
},
|
|
3099
3100
|
PageUp: function PageUp(event) {
|
|
3100
3101
|
if (latest.current.state.isOpen) {
|
|
3101
3102
|
event.preventDefault();
|
|
3102
3103
|
dispatch({
|
|
3103
|
-
type: InputKeyDownPageUp
|
|
3104
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3104
|
+
type: InputKeyDownPageUp
|
|
3105
3105
|
});
|
|
3106
3106
|
}
|
|
3107
3107
|
},
|
|
@@ -3109,22 +3109,21 @@ function useCombobox(userProps) {
|
|
|
3109
3109
|
if (latest.current.state.isOpen) {
|
|
3110
3110
|
event.preventDefault();
|
|
3111
3111
|
dispatch({
|
|
3112
|
-
type: InputKeyDownPageDown
|
|
3113
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3112
|
+
type: InputKeyDownPageDown
|
|
3114
3113
|
});
|
|
3115
3114
|
}
|
|
3116
3115
|
}
|
|
3117
3116
|
};
|
|
3118
|
-
}, [dispatch, latest
|
|
3117
|
+
}, [dispatch, latest]);
|
|
3119
3118
|
|
|
3120
3119
|
// Getter props.
|
|
3121
|
-
var getLabelProps =
|
|
3120
|
+
var getLabelProps = React.useCallback(function (labelProps) {
|
|
3122
3121
|
return _extends__default["default"]({
|
|
3123
3122
|
id: elementIds.labelId,
|
|
3124
3123
|
htmlFor: elementIds.inputId
|
|
3125
3124
|
}, labelProps);
|
|
3126
3125
|
}, [elementIds]);
|
|
3127
|
-
var getMenuProps =
|
|
3126
|
+
var getMenuProps = React.useCallback(function (_temp, _temp2) {
|
|
3128
3127
|
var _extends2;
|
|
3129
3128
|
var _ref = _temp === void 0 ? {} : _temp,
|
|
3130
3129
|
onMouseLeave = _ref.onMouseLeave,
|
|
@@ -3144,7 +3143,7 @@ function useCombobox(userProps) {
|
|
|
3144
3143
|
});
|
|
3145
3144
|
}), _extends2), rest);
|
|
3146
3145
|
}, [dispatch, setGetterPropCallInfo, elementIds]);
|
|
3147
|
-
var getItemProps =
|
|
3146
|
+
var getItemProps = React.useCallback(function (_temp3) {
|
|
3148
3147
|
var _extends3, _ref4;
|
|
3149
3148
|
var _ref3 = _temp3 === void 0 ? {} : _temp3,
|
|
3150
3149
|
itemProp = _ref3.item,
|
|
@@ -3156,13 +3155,18 @@ function useCombobox(userProps) {
|
|
|
3156
3155
|
onMouseDown = _ref3.onMouseDown,
|
|
3157
3156
|
onClick = _ref3.onClick;
|
|
3158
3157
|
_ref3.onPress;
|
|
3159
|
-
var
|
|
3158
|
+
var disabledProp = _ref3.disabled,
|
|
3160
3159
|
rest = _objectWithoutPropertiesLoose__default["default"](_ref3, _excluded2$1);
|
|
3160
|
+
if (disabledProp !== undefined) {
|
|
3161
|
+
console.warn('Passing "disabled" as an argument to getItemProps is not supported anymore. Please use the isItemDisabled prop from useCombobox.');
|
|
3162
|
+
}
|
|
3161
3163
|
var _latest$current = latest.current,
|
|
3162
3164
|
latestProps = _latest$current.props,
|
|
3163
3165
|
latestState = _latest$current.state;
|
|
3164
3166
|
var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
|
|
3167
|
+
item = _getItemAndIndex[0],
|
|
3165
3168
|
index = _getItemAndIndex[1];
|
|
3169
|
+
var disabled = latestProps.isItemDisabled(item, index);
|
|
3166
3170
|
var onSelectKey = 'onClick';
|
|
3167
3171
|
var customClickHandler = onClick;
|
|
3168
3172
|
var itemHandleMouseMove = function itemHandleMouseMove() {
|
|
@@ -3189,12 +3193,12 @@ function useCombobox(userProps) {
|
|
|
3189
3193
|
if (itemNode) {
|
|
3190
3194
|
itemRefs.current[elementIds.getItemId(index)] = itemNode;
|
|
3191
3195
|
}
|
|
3192
|
-
}), _extends3
|
|
3196
|
+
}), _extends3['aria-disabled'] = disabled, _extends3['aria-selected'] = "" + (index === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(index), _extends3.role = 'option', _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {
|
|
3193
3197
|
onMouseMove: callAllEventHandlers(onMouseMove, itemHandleMouseMove),
|
|
3194
3198
|
onMouseDown: callAllEventHandlers(onMouseDown, itemHandleMouseDown)
|
|
3195
3199
|
}, rest);
|
|
3196
3200
|
}, [dispatch, latest, shouldScrollRef, elementIds]);
|
|
3197
|
-
var getToggleButtonProps =
|
|
3201
|
+
var getToggleButtonProps = React.useCallback(function (_temp4) {
|
|
3198
3202
|
var _extends4;
|
|
3199
3203
|
var _ref5 = _temp4 === void 0 ? {} : _temp4,
|
|
3200
3204
|
onClick = _ref5.onClick;
|
|
@@ -3215,16 +3219,16 @@ function useCombobox(userProps) {
|
|
|
3215
3219
|
onClick: callAllEventHandlers(onClick, toggleButtonHandleClick)
|
|
3216
3220
|
}), rest);
|
|
3217
3221
|
}, [dispatch, latest, elementIds]);
|
|
3218
|
-
var getInputProps =
|
|
3222
|
+
var getInputProps = React.useCallback(function (_temp5, _temp6) {
|
|
3219
3223
|
var _extends5;
|
|
3220
3224
|
var _ref6 = _temp5 === void 0 ? {} : _temp5,
|
|
3221
3225
|
onKeyDown = _ref6.onKeyDown,
|
|
3222
3226
|
onChange = _ref6.onChange,
|
|
3223
3227
|
onInput = _ref6.onInput,
|
|
3224
|
-
onFocus = _ref6.onFocus,
|
|
3225
3228
|
onBlur = _ref6.onBlur;
|
|
3226
3229
|
_ref6.onChangeText;
|
|
3227
|
-
var
|
|
3230
|
+
var onClick = _ref6.onClick,
|
|
3231
|
+
_ref6$refKey = _ref6.refKey,
|
|
3228
3232
|
refKey = _ref6$refKey === void 0 ? 'ref' : _ref6$refKey,
|
|
3229
3233
|
ref = _ref6.ref,
|
|
3230
3234
|
rest = _objectWithoutPropertiesLoose__default["default"](_ref6, _excluded4);
|
|
@@ -3254,12 +3258,10 @@ function useCombobox(userProps) {
|
|
|
3254
3258
|
});
|
|
3255
3259
|
}
|
|
3256
3260
|
};
|
|
3257
|
-
var
|
|
3258
|
-
|
|
3259
|
-
|
|
3260
|
-
|
|
3261
|
-
});
|
|
3262
|
-
}
|
|
3261
|
+
var inputHandleClick = function inputHandleClick() {
|
|
3262
|
+
dispatch({
|
|
3263
|
+
type: InputClick
|
|
3264
|
+
});
|
|
3263
3265
|
};
|
|
3264
3266
|
|
|
3265
3267
|
/* istanbul ignore next (preact) */
|
|
@@ -3267,48 +3269,48 @@ function useCombobox(userProps) {
|
|
|
3267
3269
|
var eventHandlers = {};
|
|
3268
3270
|
if (!rest.disabled) {
|
|
3269
3271
|
var _eventHandlers;
|
|
3270
|
-
eventHandlers = (_eventHandlers = {}, _eventHandlers[onChangeKey] = callAllEventHandlers(onChange, onInput, inputHandleChange), _eventHandlers.onKeyDown = callAllEventHandlers(onKeyDown, inputHandleKeyDown), _eventHandlers.onBlur = callAllEventHandlers(onBlur, inputHandleBlur), _eventHandlers.
|
|
3272
|
+
eventHandlers = (_eventHandlers = {}, _eventHandlers[onChangeKey] = callAllEventHandlers(onChange, onInput, inputHandleChange), _eventHandlers.onKeyDown = callAllEventHandlers(onKeyDown, inputHandleKeyDown), _eventHandlers.onBlur = callAllEventHandlers(onBlur, inputHandleBlur), _eventHandlers.onClick = callAllEventHandlers(onClick, inputHandleClick), _eventHandlers);
|
|
3271
3273
|
}
|
|
3272
3274
|
return _extends__default["default"]((_extends5 = {}, _extends5[refKey] = handleRefs(ref, function (inputNode) {
|
|
3273
3275
|
inputRef.current = inputNode;
|
|
3274
|
-
}), _extends5['aria-activedescendant'] = latestState.isOpen && latestState.highlightedIndex > -1 ? elementIds.getItemId(latestState.highlightedIndex) : '', _extends5['aria-autocomplete'] = 'list', _extends5['aria-controls'] = elementIds.menuId, _extends5['aria-expanded'] = latestState.isOpen, _extends5['aria-labelledby'] = rest && rest['aria-label'] ? undefined :
|
|
3276
|
+
}), _extends5['aria-activedescendant'] = latestState.isOpen && latestState.highlightedIndex > -1 ? elementIds.getItemId(latestState.highlightedIndex) : '', _extends5['aria-autocomplete'] = 'list', _extends5['aria-controls'] = elementIds.menuId, _extends5['aria-expanded'] = latestState.isOpen, _extends5['aria-labelledby'] = rest && rest['aria-label'] ? undefined : elementIds.labelId, _extends5.autoComplete = 'off', _extends5.id = elementIds.inputId, _extends5.role = 'combobox', _extends5.value = latestState.inputValue, _extends5), eventHandlers, rest);
|
|
3275
3277
|
}, [dispatch, inputKeyDownHandlers, latest, mouseAndTouchTrackersRef, setGetterPropCallInfo, elementIds]);
|
|
3276
3278
|
|
|
3277
3279
|
// returns
|
|
3278
|
-
var toggleMenu =
|
|
3280
|
+
var toggleMenu = React.useCallback(function () {
|
|
3279
3281
|
dispatch({
|
|
3280
3282
|
type: FunctionToggleMenu
|
|
3281
3283
|
});
|
|
3282
3284
|
}, [dispatch]);
|
|
3283
|
-
var closeMenu =
|
|
3285
|
+
var closeMenu = React.useCallback(function () {
|
|
3284
3286
|
dispatch({
|
|
3285
3287
|
type: FunctionCloseMenu
|
|
3286
3288
|
});
|
|
3287
3289
|
}, [dispatch]);
|
|
3288
|
-
var openMenu =
|
|
3290
|
+
var openMenu = React.useCallback(function () {
|
|
3289
3291
|
dispatch({
|
|
3290
3292
|
type: FunctionOpenMenu
|
|
3291
3293
|
});
|
|
3292
3294
|
}, [dispatch]);
|
|
3293
|
-
var setHighlightedIndex =
|
|
3295
|
+
var setHighlightedIndex = React.useCallback(function (newHighlightedIndex) {
|
|
3294
3296
|
dispatch({
|
|
3295
3297
|
type: FunctionSetHighlightedIndex,
|
|
3296
3298
|
highlightedIndex: newHighlightedIndex
|
|
3297
3299
|
});
|
|
3298
3300
|
}, [dispatch]);
|
|
3299
|
-
var selectItem =
|
|
3301
|
+
var selectItem = React.useCallback(function (newSelectedItem) {
|
|
3300
3302
|
dispatch({
|
|
3301
3303
|
type: FunctionSelectItem,
|
|
3302
3304
|
selectedItem: newSelectedItem
|
|
3303
3305
|
});
|
|
3304
3306
|
}, [dispatch]);
|
|
3305
|
-
var setInputValue =
|
|
3307
|
+
var setInputValue = React.useCallback(function (newInputValue) {
|
|
3306
3308
|
dispatch({
|
|
3307
3309
|
type: FunctionSetInputValue,
|
|
3308
3310
|
inputValue: newInputValue
|
|
3309
3311
|
});
|
|
3310
3312
|
}, [dispatch]);
|
|
3311
|
-
var reset =
|
|
3313
|
+
var reset = React.useCallback(function () {
|
|
3312
3314
|
dispatch({
|
|
3313
3315
|
type: FunctionReset$1
|
|
3314
3316
|
});
|
|
@@ -3418,30 +3420,19 @@ function getA11yRemovalMessage(selectionParameters) {
|
|
|
3418
3420
|
itemToStringLocal = selectionParameters.itemToString;
|
|
3419
3421
|
return itemToStringLocal(removedSelectedItem) + " has been removed.";
|
|
3420
3422
|
}
|
|
3421
|
-
var propTypes = {
|
|
3423
|
+
var propTypes = _extends__default["default"]({}, commonPropTypes, {
|
|
3422
3424
|
selectedItems: PropTypes__default["default"].array,
|
|
3423
3425
|
initialSelectedItems: PropTypes__default["default"].array,
|
|
3424
3426
|
defaultSelectedItems: PropTypes__default["default"].array,
|
|
3425
|
-
itemToString: PropTypes__default["default"].func,
|
|
3426
3427
|
getA11yRemovalMessage: PropTypes__default["default"].func,
|
|
3427
|
-
stateReducer: PropTypes__default["default"].func,
|
|
3428
3428
|
activeIndex: PropTypes__default["default"].number,
|
|
3429
3429
|
initialActiveIndex: PropTypes__default["default"].number,
|
|
3430
3430
|
defaultActiveIndex: PropTypes__default["default"].number,
|
|
3431
3431
|
onActiveIndexChange: PropTypes__default["default"].func,
|
|
3432
3432
|
onSelectedItemsChange: PropTypes__default["default"].func,
|
|
3433
3433
|
keyNavigationNext: PropTypes__default["default"].string,
|
|
3434
|
-
keyNavigationPrevious: PropTypes__default["default"].string
|
|
3435
|
-
|
|
3436
|
-
addEventListener: PropTypes__default["default"].func,
|
|
3437
|
-
removeEventListener: PropTypes__default["default"].func,
|
|
3438
|
-
document: PropTypes__default["default"].shape({
|
|
3439
|
-
getElementById: PropTypes__default["default"].func,
|
|
3440
|
-
activeElement: PropTypes__default["default"].any,
|
|
3441
|
-
body: PropTypes__default["default"].any
|
|
3442
|
-
})
|
|
3443
|
-
})
|
|
3444
|
-
};
|
|
3434
|
+
keyNavigationPrevious: PropTypes__default["default"].string
|
|
3435
|
+
});
|
|
3445
3436
|
var defaultProps = {
|
|
3446
3437
|
itemToString: defaultProps$3.itemToString,
|
|
3447
3438
|
stateReducer: defaultProps$3.stateReducer,
|
|
@@ -3625,10 +3616,10 @@ function useMultipleSelection(userProps) {
|
|
|
3625
3616
|
selectedItems = state.selectedItems;
|
|
3626
3617
|
|
|
3627
3618
|
// Refs.
|
|
3628
|
-
var isInitialMountRef =
|
|
3629
|
-
var dropdownRef =
|
|
3630
|
-
var previousSelectedItemsRef =
|
|
3631
|
-
var selectedItemRefs =
|
|
3619
|
+
var isInitialMountRef = React.useRef(true);
|
|
3620
|
+
var dropdownRef = React.useRef(null);
|
|
3621
|
+
var previousSelectedItemsRef = React.useRef(selectedItems);
|
|
3622
|
+
var selectedItemRefs = React.useRef();
|
|
3632
3623
|
selectedItemRefs.current = [];
|
|
3633
3624
|
var latest = useLatestRef({
|
|
3634
3625
|
state: state,
|
|
@@ -3637,7 +3628,7 @@ function useMultipleSelection(userProps) {
|
|
|
3637
3628
|
|
|
3638
3629
|
// Effects.
|
|
3639
3630
|
/* Sets a11y status message on changes in selectedItem. */
|
|
3640
|
-
|
|
3631
|
+
React.useEffect(function () {
|
|
3641
3632
|
if (isInitialMountRef.current || false) {
|
|
3642
3633
|
return;
|
|
3643
3634
|
}
|
|
@@ -3658,7 +3649,7 @@ function useMultipleSelection(userProps) {
|
|
|
3658
3649
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
3659
3650
|
}, [selectedItems.length]);
|
|
3660
3651
|
// Sets focus on active item.
|
|
3661
|
-
|
|
3652
|
+
React.useEffect(function () {
|
|
3662
3653
|
if (isInitialMountRef.current) {
|
|
3663
3654
|
return;
|
|
3664
3655
|
}
|
|
@@ -3675,7 +3666,7 @@ function useMultipleSelection(userProps) {
|
|
|
3675
3666
|
});
|
|
3676
3667
|
var setGetterPropCallInfo = useGetterPropsCalledChecker('getDropdownProps');
|
|
3677
3668
|
// Make initial ref false.
|
|
3678
|
-
|
|
3669
|
+
React.useEffect(function () {
|
|
3679
3670
|
isInitialMountRef.current = false;
|
|
3680
3671
|
return function () {
|
|
3681
3672
|
isInitialMountRef.current = true;
|
|
@@ -3683,7 +3674,7 @@ function useMultipleSelection(userProps) {
|
|
|
3683
3674
|
}, []);
|
|
3684
3675
|
|
|
3685
3676
|
// Event handler functions.
|
|
3686
|
-
var selectedItemKeyDownHandlers =
|
|
3677
|
+
var selectedItemKeyDownHandlers = React.useMemo(function () {
|
|
3687
3678
|
var _ref;
|
|
3688
3679
|
return _ref = {}, _ref[keyNavigationPrevious] = function () {
|
|
3689
3680
|
dispatch({
|
|
@@ -3703,7 +3694,7 @@ function useMultipleSelection(userProps) {
|
|
|
3703
3694
|
});
|
|
3704
3695
|
}, _ref;
|
|
3705
3696
|
}, [dispatch, keyNavigationNext, keyNavigationPrevious]);
|
|
3706
|
-
var dropdownKeyDownHandlers =
|
|
3697
|
+
var dropdownKeyDownHandlers = React.useMemo(function () {
|
|
3707
3698
|
var _ref2;
|
|
3708
3699
|
return _ref2 = {}, _ref2[keyNavigationPrevious] = function (event) {
|
|
3709
3700
|
if (isKeyDownOperationPermitted(event)) {
|
|
@@ -3721,7 +3712,7 @@ function useMultipleSelection(userProps) {
|
|
|
3721
3712
|
}, [dispatch, keyNavigationPrevious]);
|
|
3722
3713
|
|
|
3723
3714
|
// Getter props.
|
|
3724
|
-
var getSelectedItemProps =
|
|
3715
|
+
var getSelectedItemProps = React.useCallback(function (_temp) {
|
|
3725
3716
|
var _extends2;
|
|
3726
3717
|
var _ref3 = _temp === void 0 ? {} : _temp,
|
|
3727
3718
|
_ref3$refKey = _ref3.refKey,
|
|
@@ -3754,7 +3745,7 @@ function useMultipleSelection(userProps) {
|
|
|
3754
3745
|
}
|
|
3755
3746
|
}), _extends2.tabIndex = isFocusable ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
|
|
3756
3747
|
}, [dispatch, latest, selectedItemKeyDownHandlers]);
|
|
3757
|
-
var getDropdownProps =
|
|
3748
|
+
var getDropdownProps = React.useCallback(function (_temp2, _temp3) {
|
|
3758
3749
|
var _extends3;
|
|
3759
3750
|
var _ref4 = _temp2 === void 0 ? {} : _temp2,
|
|
3760
3751
|
_ref4$refKey = _ref4.refKey,
|
|
@@ -3791,31 +3782,31 @@ function useMultipleSelection(userProps) {
|
|
|
3791
3782
|
}, [dispatch, dropdownKeyDownHandlers, setGetterPropCallInfo]);
|
|
3792
3783
|
|
|
3793
3784
|
// returns
|
|
3794
|
-
var addSelectedItem =
|
|
3785
|
+
var addSelectedItem = React.useCallback(function (selectedItem) {
|
|
3795
3786
|
dispatch({
|
|
3796
3787
|
type: FunctionAddSelectedItem,
|
|
3797
3788
|
selectedItem: selectedItem
|
|
3798
3789
|
});
|
|
3799
3790
|
}, [dispatch]);
|
|
3800
|
-
var removeSelectedItem =
|
|
3791
|
+
var removeSelectedItem = React.useCallback(function (selectedItem) {
|
|
3801
3792
|
dispatch({
|
|
3802
3793
|
type: FunctionRemoveSelectedItem,
|
|
3803
3794
|
selectedItem: selectedItem
|
|
3804
3795
|
});
|
|
3805
3796
|
}, [dispatch]);
|
|
3806
|
-
var setSelectedItems =
|
|
3797
|
+
var setSelectedItems = React.useCallback(function (newSelectedItems) {
|
|
3807
3798
|
dispatch({
|
|
3808
3799
|
type: FunctionSetSelectedItems,
|
|
3809
3800
|
selectedItems: newSelectedItems
|
|
3810
3801
|
});
|
|
3811
3802
|
}, [dispatch]);
|
|
3812
|
-
var setActiveIndex =
|
|
3803
|
+
var setActiveIndex = React.useCallback(function (newActiveIndex) {
|
|
3813
3804
|
dispatch({
|
|
3814
3805
|
type: FunctionSetActiveIndex,
|
|
3815
3806
|
activeIndex: newActiveIndex
|
|
3816
3807
|
});
|
|
3817
3808
|
}, [dispatch]);
|
|
3818
|
-
var reset =
|
|
3809
|
+
var reset = React.useCallback(function () {
|
|
3819
3810
|
dispatch({
|
|
3820
3811
|
type: FunctionReset
|
|
3821
3812
|
});
|