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
|
@@ -7,7 +7,7 @@ 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
9
|
var PropTypes = require('prop-types');
|
|
10
|
-
var
|
|
10
|
+
var React = require('react');
|
|
11
11
|
var reactIs = require('react-is');
|
|
12
12
|
var compute = require('compute-scroll-into-view');
|
|
13
13
|
var tslib = require('tslib');
|
|
@@ -19,6 +19,7 @@ var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
|
|
|
19
19
|
var _assertThisInitialized__default = /*#__PURE__*/_interopDefaultLegacy(_assertThisInitialized);
|
|
20
20
|
var _inheritsLoose__default = /*#__PURE__*/_interopDefaultLegacy(_inheritsLoose);
|
|
21
21
|
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
22
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
22
23
|
var compute__default = /*#__PURE__*/_interopDefaultLegacy(compute);
|
|
23
24
|
|
|
24
25
|
var idCounter = 0;
|
|
@@ -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
|
|
|
@@ -294,70 +300,70 @@ function isPlainObject(obj) {
|
|
|
294
300
|
}
|
|
295
301
|
|
|
296
302
|
/**
|
|
297
|
-
* Returns the
|
|
298
|
-
* it will wrap to either 0 or itemCount - 1.
|
|
303
|
+
* Returns the next non-disabled highlightedIndex value.
|
|
299
304
|
*
|
|
300
|
-
* @param {number}
|
|
301
|
-
* @param {number}
|
|
302
|
-
* @param {
|
|
303
|
-
* @param {
|
|
304
|
-
* @param {boolean} circular
|
|
305
|
-
* @returns {number} The
|
|
305
|
+
* @param {number} start The current highlightedIndex.
|
|
306
|
+
* @param {number} offset The offset from the current highlightedIndex to start searching.
|
|
307
|
+
* @param {unknown[]} items The items array.
|
|
308
|
+
* @param {(item: unknown, index: number) => boolean} isItemDisabled Function that tells if an item is disabled or not.
|
|
309
|
+
* @param {boolean?} circular If the search reaches the end, if it can search again starting from the other end.
|
|
310
|
+
* @returns {number} The next highlightedIndex.
|
|
306
311
|
*/
|
|
307
|
-
function
|
|
312
|
+
function getHighlightedIndex(start, offset, items, isItemDisabled, circular) {
|
|
308
313
|
if (circular === void 0) {
|
|
309
|
-
circular =
|
|
314
|
+
circular = false;
|
|
310
315
|
}
|
|
311
|
-
|
|
316
|
+
var count = items.length;
|
|
317
|
+
if (count === 0) {
|
|
312
318
|
return -1;
|
|
313
319
|
}
|
|
314
|
-
var itemsLastIndex =
|
|
315
|
-
if (typeof
|
|
316
|
-
|
|
320
|
+
var itemsLastIndex = count - 1;
|
|
321
|
+
if (typeof start !== 'number' || start < 0 || start > itemsLastIndex) {
|
|
322
|
+
start = offset > 0 ? -1 : itemsLastIndex + 1;
|
|
317
323
|
}
|
|
318
|
-
var
|
|
319
|
-
if (
|
|
320
|
-
|
|
321
|
-
} else if (
|
|
322
|
-
|
|
324
|
+
var current = start + offset;
|
|
325
|
+
if (current < 0) {
|
|
326
|
+
current = circular ? itemsLastIndex : 0;
|
|
327
|
+
} else if (current > itemsLastIndex) {
|
|
328
|
+
current = circular ? 0 : itemsLastIndex;
|
|
323
329
|
}
|
|
324
|
-
var
|
|
325
|
-
if (
|
|
326
|
-
return
|
|
330
|
+
var highlightedIndex = getNonDisabledIndex(current, offset < 0, items, isItemDisabled, circular);
|
|
331
|
+
if (highlightedIndex === -1) {
|
|
332
|
+
return start >= count ? -1 : start;
|
|
327
333
|
}
|
|
328
|
-
return
|
|
334
|
+
return highlightedIndex;
|
|
329
335
|
}
|
|
330
336
|
|
|
331
337
|
/**
|
|
332
|
-
* Returns the next
|
|
338
|
+
* Returns the next non-disabled highlightedIndex value.
|
|
333
339
|
*
|
|
334
|
-
* @param {number}
|
|
335
|
-
* @param {
|
|
336
|
-
* @param {
|
|
337
|
-
* @param {
|
|
338
|
-
* @param {boolean} circular
|
|
339
|
-
* @returns {number} The
|
|
340
|
+
* @param {number} start The current highlightedIndex.
|
|
341
|
+
* @param {boolean} backwards If true, it will search backwards from the start.
|
|
342
|
+
* @param {unknown[]} items The items array.
|
|
343
|
+
* @param {(item: unknown, index: number) => boolean} isItemDisabled Function that tells if an item is disabled or not.
|
|
344
|
+
* @param {boolean} circular If the search reaches the end, if it can search again starting from the other end.
|
|
345
|
+
* @returns {number} The next non-disabled index.
|
|
340
346
|
*/
|
|
341
|
-
function
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
return baseIndex;
|
|
347
|
+
function getNonDisabledIndex(start, backwards, items, isItemDisabled, circular) {
|
|
348
|
+
if (circular === void 0) {
|
|
349
|
+
circular = false;
|
|
345
350
|
}
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
351
|
+
var count = items.length;
|
|
352
|
+
if (backwards) {
|
|
353
|
+
for (var index = start; index >= 0; index--) {
|
|
354
|
+
if (!isItemDisabled(items[index], index)) {
|
|
349
355
|
return index;
|
|
350
356
|
}
|
|
351
357
|
}
|
|
352
358
|
} else {
|
|
353
|
-
for (var _index =
|
|
354
|
-
if (!
|
|
359
|
+
for (var _index = start; _index < count; _index++) {
|
|
360
|
+
if (!isItemDisabled(items[_index], _index)) {
|
|
355
361
|
return _index;
|
|
356
362
|
}
|
|
357
363
|
}
|
|
358
364
|
}
|
|
359
365
|
if (circular) {
|
|
360
|
-
return
|
|
366
|
+
return getNonDisabledIndex(backwards ? count - 1 : 0, backwards, items, isItemDisabled);
|
|
361
367
|
}
|
|
362
368
|
return -1;
|
|
363
369
|
}
|
|
@@ -537,6 +543,10 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
537
543
|
_this.unsetItemCount = function () {
|
|
538
544
|
_this.itemCount = null;
|
|
539
545
|
};
|
|
546
|
+
_this.isItemDisabled = function (_item, index) {
|
|
547
|
+
var currentElementNode = _this.getItemNodeFromIndex(index);
|
|
548
|
+
return currentElementNode && currentElementNode.hasAttribute('disabled');
|
|
549
|
+
};
|
|
540
550
|
_this.setHighlightedIndex = function (highlightedIndex, otherStateToSet) {
|
|
541
551
|
if (highlightedIndex === void 0) {
|
|
542
552
|
highlightedIndex = _this.props.defaultHighlightedIndex;
|
|
@@ -687,7 +697,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
687
697
|
_this.getRootProps.suppressRefError = suppressRefError;
|
|
688
698
|
var _this$getState = _this.getState(),
|
|
689
699
|
isOpen = _this$getState.isOpen;
|
|
690
|
-
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 :
|
|
700
|
+
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);
|
|
691
701
|
};
|
|
692
702
|
//\\\\\\\\\\\\\\\\\\\\\\\\\\ ROOT
|
|
693
703
|
_this.keyDownHandlers = {
|
|
@@ -708,9 +718,9 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
708
718
|
if (itemCount > 0) {
|
|
709
719
|
var _this2$getState = _this2.getState(),
|
|
710
720
|
highlightedIndex = _this2$getState.highlightedIndex;
|
|
711
|
-
var nextHighlightedIndex =
|
|
712
|
-
|
|
713
|
-
});
|
|
721
|
+
var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, 1, {
|
|
722
|
+
length: itemCount
|
|
723
|
+
}, _this2.isItemDisabled, true);
|
|
714
724
|
_this2.setHighlightedIndex(nextHighlightedIndex, {
|
|
715
725
|
type: keyDownArrowDown
|
|
716
726
|
});
|
|
@@ -735,9 +745,9 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
735
745
|
if (itemCount > 0) {
|
|
736
746
|
var _this3$getState = _this3.getState(),
|
|
737
747
|
highlightedIndex = _this3$getState.highlightedIndex;
|
|
738
|
-
var nextHighlightedIndex =
|
|
739
|
-
|
|
740
|
-
});
|
|
748
|
+
var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, -1, {
|
|
749
|
+
length: itemCount
|
|
750
|
+
}, _this3.isItemDisabled, true);
|
|
741
751
|
_this3.setHighlightedIndex(nextHighlightedIndex, {
|
|
742
752
|
type: keyDownArrowUp
|
|
743
753
|
});
|
|
@@ -785,7 +795,6 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
785
795
|
});
|
|
786
796
|
_this.inputKeyDownHandlers = _extends__default["default"]({}, _this.keyDownHandlers, {
|
|
787
797
|
Home: function Home(event) {
|
|
788
|
-
var _this4 = this;
|
|
789
798
|
var _this$getState3 = this.getState(),
|
|
790
799
|
isOpen = _this$getState3.isOpen;
|
|
791
800
|
if (!isOpen) {
|
|
@@ -798,15 +807,14 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
798
807
|
}
|
|
799
808
|
|
|
800
809
|
// get next non-disabled starting downwards from 0 if that's disabled.
|
|
801
|
-
var newHighlightedIndex =
|
|
802
|
-
|
|
803
|
-
},
|
|
810
|
+
var newHighlightedIndex = getNonDisabledIndex(0, false, {
|
|
811
|
+
length: itemCount
|
|
812
|
+
}, this.isItemDisabled);
|
|
804
813
|
this.setHighlightedIndex(newHighlightedIndex, {
|
|
805
814
|
type: keyDownHome
|
|
806
815
|
});
|
|
807
816
|
},
|
|
808
817
|
End: function End(event) {
|
|
809
|
-
var _this5 = this;
|
|
810
818
|
var _this$getState4 = this.getState(),
|
|
811
819
|
isOpen = _this$getState4.isOpen;
|
|
812
820
|
if (!isOpen) {
|
|
@@ -819,9 +827,9 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
819
827
|
}
|
|
820
828
|
|
|
821
829
|
// get next non-disabled starting upwards from last index if that's disabled.
|
|
822
|
-
var newHighlightedIndex =
|
|
823
|
-
|
|
824
|
-
},
|
|
830
|
+
var newHighlightedIndex = getNonDisabledIndex(itemCount - 1, true, {
|
|
831
|
+
length: itemCount
|
|
832
|
+
}, this.isItemDisabled);
|
|
825
833
|
this.setHighlightedIndex(newHighlightedIndex, {
|
|
826
834
|
type: keyDownEnd
|
|
827
835
|
});
|
|
@@ -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
|
|
@@ -1193,14 +1201,13 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1193
1201
|
_proto.scrollHighlightedItemIntoView = function scrollHighlightedItemIntoView() {
|
|
1194
1202
|
};
|
|
1195
1203
|
_proto.moveHighlightedIndex = function moveHighlightedIndex(amount, otherStateToSet) {
|
|
1196
|
-
var _this6 = this;
|
|
1197
1204
|
var itemCount = this.getItemCount();
|
|
1198
1205
|
var _this$getState8 = this.getState(),
|
|
1199
1206
|
highlightedIndex = _this$getState8.highlightedIndex;
|
|
1200
1207
|
if (itemCount > 0) {
|
|
1201
|
-
var nextHighlightedIndex =
|
|
1202
|
-
|
|
1203
|
-
});
|
|
1208
|
+
var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, amount, {
|
|
1209
|
+
length: itemCount
|
|
1210
|
+
}, this.isItemDisabled, true);
|
|
1204
1211
|
this.setHighlightedIndex(nextHighlightedIndex, otherStateToSet);
|
|
1205
1212
|
}
|
|
1206
1213
|
};
|
|
@@ -1265,7 +1272,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1265
1272
|
};
|
|
1266
1273
|
};
|
|
1267
1274
|
_proto.componentDidMount = function componentDidMount() {
|
|
1268
|
-
var
|
|
1275
|
+
var _this4 = this;
|
|
1269
1276
|
/* istanbul ignore if (react-native) */
|
|
1270
1277
|
if (process.env.NODE_ENV !== 'production' && !true && this.getMenuProps.called && !this.getMenuProps.suppressRefError) {
|
|
1271
1278
|
validateGetMenuPropsCalledCorrectly(this._menuNode, this.getMenuProps);
|
|
@@ -1274,7 +1281,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1274
1281
|
/* istanbul ignore if (react-native) */
|
|
1275
1282
|
{
|
|
1276
1283
|
this.cleanup = function () {
|
|
1277
|
-
|
|
1284
|
+
_this4.internalClearTimeouts();
|
|
1278
1285
|
};
|
|
1279
1286
|
}
|
|
1280
1287
|
};
|
|
@@ -1337,7 +1344,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1337
1344
|
} else if (isDOMElement(element)) {
|
|
1338
1345
|
// they didn't apply the root props, but we can clone
|
|
1339
1346
|
// this and apply the props ourselves
|
|
1340
|
-
return /*#__PURE__*/
|
|
1347
|
+
return /*#__PURE__*/React.cloneElement(element, this.getRootProps(getElementProps(element)));
|
|
1341
1348
|
}
|
|
1342
1349
|
|
|
1343
1350
|
/* istanbul ignore else */
|
|
@@ -1352,7 +1359,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1352
1359
|
return undefined;
|
|
1353
1360
|
};
|
|
1354
1361
|
return Downshift;
|
|
1355
|
-
}(
|
|
1362
|
+
}(React.Component);
|
|
1356
1363
|
Downshift.defaultProps = {
|
|
1357
1364
|
defaultHighlightedIndex: null,
|
|
1358
1365
|
defaultIsOpen: false,
|
|
@@ -1408,13 +1415,15 @@ process.env.NODE_ENV !== "production" ? Downshift.propTypes = {
|
|
|
1408
1415
|
itemCount: PropTypes__default["default"].number,
|
|
1409
1416
|
id: PropTypes__default["default"].string,
|
|
1410
1417
|
environment: PropTypes__default["default"].shape({
|
|
1411
|
-
addEventListener: PropTypes__default["default"].func,
|
|
1412
|
-
removeEventListener: PropTypes__default["default"].func,
|
|
1418
|
+
addEventListener: PropTypes__default["default"].func.isRequired,
|
|
1419
|
+
removeEventListener: PropTypes__default["default"].func.isRequired,
|
|
1413
1420
|
document: PropTypes__default["default"].shape({
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1421
|
+
createElement: PropTypes__default["default"].func.isRequired,
|
|
1422
|
+
getElementById: PropTypes__default["default"].func.isRequired,
|
|
1423
|
+
activeElement: PropTypes__default["default"].any.isRequired,
|
|
1424
|
+
body: PropTypes__default["default"].any.isRequired
|
|
1425
|
+
}).isRequired,
|
|
1426
|
+
Node: PropTypes__default["default"].func.isRequired
|
|
1418
1427
|
}),
|
|
1419
1428
|
suppressRefError: PropTypes__default["default"].bool,
|
|
1420
1429
|
scrollIntoView: PropTypes__default["default"].func,
|
|
@@ -1521,16 +1530,23 @@ var updateA11yStatus = debounce(function (getA11yMessage, document) {
|
|
|
1521
1530
|
}, 200);
|
|
1522
1531
|
|
|
1523
1532
|
// istanbul ignore next
|
|
1524
|
-
var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ?
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1533
|
+
var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? React.useLayoutEffect : React.useEffect;
|
|
1534
|
+
|
|
1535
|
+
// istanbul ignore next
|
|
1536
|
+
var useElementIds = 'useId' in React__default["default"] // Avoid conditional useId call
|
|
1537
|
+
? function useElementIds(_ref) {
|
|
1538
|
+
var id = _ref.id,
|
|
1528
1539
|
labelId = _ref.labelId,
|
|
1529
1540
|
menuId = _ref.menuId,
|
|
1530
1541
|
getItemId = _ref.getItemId,
|
|
1531
1542
|
toggleButtonId = _ref.toggleButtonId,
|
|
1532
1543
|
inputId = _ref.inputId;
|
|
1533
|
-
|
|
1544
|
+
// Avoid conditional useId call
|
|
1545
|
+
var reactId = "downshift-" + React__default["default"].useId();
|
|
1546
|
+
if (!id) {
|
|
1547
|
+
id = reactId;
|
|
1548
|
+
}
|
|
1549
|
+
var elementIdsRef = React.useRef({
|
|
1534
1550
|
labelId: labelId || id + "-label",
|
|
1535
1551
|
menuId: menuId || id + "-menu",
|
|
1536
1552
|
getItemId: getItemId || function (index) {
|
|
@@ -1540,7 +1556,25 @@ function useElementIds(_ref) {
|
|
|
1540
1556
|
inputId: inputId || id + "-input"
|
|
1541
1557
|
});
|
|
1542
1558
|
return elementIdsRef.current;
|
|
1543
|
-
}
|
|
1559
|
+
} : function useElementIds(_ref2) {
|
|
1560
|
+
var _ref2$id = _ref2.id,
|
|
1561
|
+
id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
|
|
1562
|
+
labelId = _ref2.labelId,
|
|
1563
|
+
menuId = _ref2.menuId,
|
|
1564
|
+
getItemId = _ref2.getItemId,
|
|
1565
|
+
toggleButtonId = _ref2.toggleButtonId,
|
|
1566
|
+
inputId = _ref2.inputId;
|
|
1567
|
+
var elementIdsRef = React.useRef({
|
|
1568
|
+
labelId: labelId || id + "-label",
|
|
1569
|
+
menuId: menuId || id + "-menu",
|
|
1570
|
+
getItemId: getItemId || function (index) {
|
|
1571
|
+
return id + "-item-" + index;
|
|
1572
|
+
},
|
|
1573
|
+
toggleButtonId: toggleButtonId || id + "-toggle-button",
|
|
1574
|
+
inputId: inputId || id + "-input"
|
|
1575
|
+
});
|
|
1576
|
+
return elementIdsRef.current;
|
|
1577
|
+
};
|
|
1544
1578
|
function getItemAndIndex(itemProp, indexProp, items, errorMessage) {
|
|
1545
1579
|
var item, index;
|
|
1546
1580
|
if (itemProp === undefined) {
|
|
@@ -1562,7 +1596,7 @@ function capitalizeString(string) {
|
|
|
1562
1596
|
return "" + string.slice(0, 1).toUpperCase() + string.slice(1);
|
|
1563
1597
|
}
|
|
1564
1598
|
function useLatestRef(val) {
|
|
1565
|
-
var ref =
|
|
1599
|
+
var ref = React.useRef(val);
|
|
1566
1600
|
// technically this is not "concurrent mode safe" because we're manipulating
|
|
1567
1601
|
// the value during render (so it's not idempotent). However, the places this
|
|
1568
1602
|
// hook is used is to support memoizing callbacks which will be called
|
|
@@ -1583,9 +1617,9 @@ function useLatestRef(val) {
|
|
|
1583
1617
|
* @returns {Array} An array with the state and an action dispatcher.
|
|
1584
1618
|
*/
|
|
1585
1619
|
function useEnhancedReducer(reducer, initialState, props) {
|
|
1586
|
-
var prevStateRef =
|
|
1587
|
-
var actionRef =
|
|
1588
|
-
var enhancedReducer =
|
|
1620
|
+
var prevStateRef = React.useRef();
|
|
1621
|
+
var actionRef = React.useRef();
|
|
1622
|
+
var enhancedReducer = React.useCallback(function (state, action) {
|
|
1589
1623
|
actionRef.current = action;
|
|
1590
1624
|
state = getState(state, action.props);
|
|
1591
1625
|
var changes = reducer(state, action);
|
|
@@ -1594,17 +1628,17 @@ function useEnhancedReducer(reducer, initialState, props) {
|
|
|
1594
1628
|
}));
|
|
1595
1629
|
return newState;
|
|
1596
1630
|
}, [reducer]);
|
|
1597
|
-
var _useReducer =
|
|
1631
|
+
var _useReducer = React.useReducer(enhancedReducer, initialState),
|
|
1598
1632
|
state = _useReducer[0],
|
|
1599
1633
|
dispatch = _useReducer[1];
|
|
1600
1634
|
var propsRef = useLatestRef(props);
|
|
1601
|
-
var dispatchWithProps =
|
|
1635
|
+
var dispatchWithProps = React.useCallback(function (action) {
|
|
1602
1636
|
return dispatch(_extends__default["default"]({
|
|
1603
1637
|
props: propsRef.current
|
|
1604
1638
|
}, action));
|
|
1605
1639
|
}, [propsRef]);
|
|
1606
1640
|
var action = actionRef.current;
|
|
1607
|
-
|
|
1641
|
+
React.useEffect(function () {
|
|
1608
1642
|
if (action && prevStateRef.current && prevStateRef.current !== state) {
|
|
1609
1643
|
callOnChangeProps(action, getState(prevStateRef.current, action.props), state);
|
|
1610
1644
|
}
|
|
@@ -1708,11 +1742,11 @@ function getHighlightedIndexOnOpen(props, state, offset) {
|
|
|
1708
1742
|
* @returns {Object} Ref containing whether mouseDown or touchMove event is happening
|
|
1709
1743
|
*/
|
|
1710
1744
|
function useMouseAndTouchTracker(isOpen, downshiftElementRefs, environment, handleBlur) {
|
|
1711
|
-
var mouseAndTouchTrackersRef =
|
|
1745
|
+
var mouseAndTouchTrackersRef = React.useRef({
|
|
1712
1746
|
isMouseDown: false,
|
|
1713
1747
|
isTouchMove: false
|
|
1714
1748
|
});
|
|
1715
|
-
|
|
1749
|
+
React.useEffect(function () {
|
|
1716
1750
|
if ((environment == null ? void 0 : environment.addEventListener) == null) {
|
|
1717
1751
|
return;
|
|
1718
1752
|
}
|
|
@@ -1776,15 +1810,15 @@ var useGetterPropsCalledChecker = function useGetterPropsCalledChecker() {
|
|
|
1776
1810
|
/* istanbul ignore next */
|
|
1777
1811
|
if (process.env.NODE_ENV !== 'production') {
|
|
1778
1812
|
useGetterPropsCalledChecker = function useGetterPropsCalledChecker() {
|
|
1779
|
-
var isInitialMountRef =
|
|
1813
|
+
var isInitialMountRef = React.useRef(true);
|
|
1780
1814
|
for (var _len = arguments.length, propKeys = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
1781
1815
|
propKeys[_key] = arguments[_key];
|
|
1782
1816
|
}
|
|
1783
|
-
var getterPropsCalledRef =
|
|
1817
|
+
var getterPropsCalledRef = React.useRef(propKeys.reduce(function (acc, propKey) {
|
|
1784
1818
|
acc[propKey] = {};
|
|
1785
1819
|
return acc;
|
|
1786
1820
|
}, {}));
|
|
1787
|
-
|
|
1821
|
+
React.useEffect(function () {
|
|
1788
1822
|
Object.keys(getterPropsCalledRef.current).forEach(function (propKey) {
|
|
1789
1823
|
var propCallInfo = getterPropsCalledRef.current[propKey];
|
|
1790
1824
|
if (isInitialMountRef.current) {
|
|
@@ -1804,7 +1838,7 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
1804
1838
|
});
|
|
1805
1839
|
isInitialMountRef.current = false;
|
|
1806
1840
|
});
|
|
1807
|
-
var setGetterPropCallInfo =
|
|
1841
|
+
var setGetterPropCallInfo = React.useCallback(function (propKey, suppressRefError, refKey, elementRef) {
|
|
1808
1842
|
getterPropsCalledRef.current[propKey] = {
|
|
1809
1843
|
suppressRefError: suppressRefError,
|
|
1810
1844
|
refKey: refKey,
|
|
@@ -1814,14 +1848,14 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
1814
1848
|
return setGetterPropCallInfo;
|
|
1815
1849
|
};
|
|
1816
1850
|
}
|
|
1817
|
-
function useA11yMessageSetter(getA11yMessage, dependencyArray,
|
|
1818
|
-
var isInitialMount =
|
|
1819
|
-
highlightedIndex =
|
|
1820
|
-
items =
|
|
1821
|
-
environment =
|
|
1822
|
-
rest = _objectWithoutPropertiesLoose__default["default"](
|
|
1851
|
+
function useA11yMessageSetter(getA11yMessage, dependencyArray, _ref3) {
|
|
1852
|
+
var isInitialMount = _ref3.isInitialMount,
|
|
1853
|
+
highlightedIndex = _ref3.highlightedIndex,
|
|
1854
|
+
items = _ref3.items,
|
|
1855
|
+
environment = _ref3.environment,
|
|
1856
|
+
rest = _objectWithoutPropertiesLoose__default["default"](_ref3, _excluded$3);
|
|
1823
1857
|
// Sets a11y status message on changes in state.
|
|
1824
|
-
|
|
1858
|
+
React.useEffect(function () {
|
|
1825
1859
|
if (isInitialMount || true) {
|
|
1826
1860
|
return;
|
|
1827
1861
|
}
|
|
@@ -1835,15 +1869,15 @@ function useA11yMessageSetter(getA11yMessage, dependencyArray, _ref2) {
|
|
|
1835
1869
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1836
1870
|
}, dependencyArray);
|
|
1837
1871
|
}
|
|
1838
|
-
function useScrollIntoView(
|
|
1839
|
-
var highlightedIndex =
|
|
1840
|
-
isOpen =
|
|
1841
|
-
itemRefs =
|
|
1842
|
-
getItemNodeFromIndex =
|
|
1843
|
-
menuElement =
|
|
1844
|
-
scrollIntoViewProp =
|
|
1872
|
+
function useScrollIntoView(_ref4) {
|
|
1873
|
+
var highlightedIndex = _ref4.highlightedIndex,
|
|
1874
|
+
isOpen = _ref4.isOpen,
|
|
1875
|
+
itemRefs = _ref4.itemRefs,
|
|
1876
|
+
getItemNodeFromIndex = _ref4.getItemNodeFromIndex,
|
|
1877
|
+
menuElement = _ref4.menuElement,
|
|
1878
|
+
scrollIntoViewProp = _ref4.scrollIntoView;
|
|
1845
1879
|
// used not to scroll on highlight by mouse.
|
|
1846
|
-
var shouldScrollRef =
|
|
1880
|
+
var shouldScrollRef = React.useRef(true);
|
|
1847
1881
|
// Scroll on highlighted item if change comes from keyboard.
|
|
1848
1882
|
useIsomorphicLayoutEffect(function () {
|
|
1849
1883
|
if (highlightedIndex < 0 || !isOpen || !Object.keys(itemRefs.current).length) {
|
|
@@ -1863,13 +1897,13 @@ function useScrollIntoView(_ref3) {
|
|
|
1863
1897
|
var useControlPropsValidator = noop;
|
|
1864
1898
|
/* istanbul ignore next */
|
|
1865
1899
|
if (process.env.NODE_ENV !== 'production') {
|
|
1866
|
-
useControlPropsValidator = function useControlPropsValidator(
|
|
1867
|
-
var isInitialMount =
|
|
1868
|
-
props =
|
|
1869
|
-
state =
|
|
1900
|
+
useControlPropsValidator = function useControlPropsValidator(_ref5) {
|
|
1901
|
+
var isInitialMount = _ref5.isInitialMount,
|
|
1902
|
+
props = _ref5.props,
|
|
1903
|
+
state = _ref5.state;
|
|
1870
1904
|
// used for checking when props are moving from controlled to uncontrolled.
|
|
1871
|
-
var prevPropsRef =
|
|
1872
|
-
|
|
1905
|
+
var prevPropsRef = React.useRef(props);
|
|
1906
|
+
React.useEffect(function () {
|
|
1873
1907
|
if (isInitialMount) {
|
|
1874
1908
|
return;
|
|
1875
1909
|
}
|
|
@@ -1905,6 +1939,47 @@ function getChangesOnSelection(props, highlightedIndex, inputValue) {
|
|
|
1905
1939
|
}));
|
|
1906
1940
|
}
|
|
1907
1941
|
|
|
1942
|
+
// Shared between all exports.
|
|
1943
|
+
var commonPropTypes = {
|
|
1944
|
+
environment: PropTypes__default["default"].shape({
|
|
1945
|
+
addEventListener: PropTypes__default["default"].func.isRequired,
|
|
1946
|
+
removeEventListener: PropTypes__default["default"].func.isRequired,
|
|
1947
|
+
document: PropTypes__default["default"].shape({
|
|
1948
|
+
createElement: PropTypes__default["default"].func.isRequired,
|
|
1949
|
+
getElementById: PropTypes__default["default"].func.isRequired,
|
|
1950
|
+
activeElement: PropTypes__default["default"].any.isRequired,
|
|
1951
|
+
body: PropTypes__default["default"].any.isRequired
|
|
1952
|
+
}).isRequired,
|
|
1953
|
+
Node: PropTypes__default["default"].func.isRequired
|
|
1954
|
+
}),
|
|
1955
|
+
itemToString: PropTypes__default["default"].func,
|
|
1956
|
+
stateReducer: PropTypes__default["default"].func
|
|
1957
|
+
};
|
|
1958
|
+
|
|
1959
|
+
// Shared between useSelect, useCombobox, Downshift.
|
|
1960
|
+
var commonDropdownPropTypes = _extends__default["default"]({}, commonPropTypes, {
|
|
1961
|
+
getA11yStatusMessage: PropTypes__default["default"].func,
|
|
1962
|
+
highlightedIndex: PropTypes__default["default"].number,
|
|
1963
|
+
defaultHighlightedIndex: PropTypes__default["default"].number,
|
|
1964
|
+
initialHighlightedIndex: PropTypes__default["default"].number,
|
|
1965
|
+
isOpen: PropTypes__default["default"].bool,
|
|
1966
|
+
defaultIsOpen: PropTypes__default["default"].bool,
|
|
1967
|
+
initialIsOpen: PropTypes__default["default"].bool,
|
|
1968
|
+
selectedItem: PropTypes__default["default"].any,
|
|
1969
|
+
initialSelectedItem: PropTypes__default["default"].any,
|
|
1970
|
+
defaultSelectedItem: PropTypes__default["default"].any,
|
|
1971
|
+
id: PropTypes__default["default"].string,
|
|
1972
|
+
labelId: PropTypes__default["default"].string,
|
|
1973
|
+
menuId: PropTypes__default["default"].string,
|
|
1974
|
+
getItemId: PropTypes__default["default"].func,
|
|
1975
|
+
toggleButtonId: PropTypes__default["default"].string,
|
|
1976
|
+
onSelectedItemChange: PropTypes__default["default"].func,
|
|
1977
|
+
onHighlightedIndexChange: PropTypes__default["default"].func,
|
|
1978
|
+
onStateChange: PropTypes__default["default"].func,
|
|
1979
|
+
onIsOpenChange: PropTypes__default["default"].func,
|
|
1980
|
+
scrollIntoView: PropTypes__default["default"].func
|
|
1981
|
+
});
|
|
1982
|
+
|
|
1908
1983
|
function downshiftCommonReducer(state, action, stateChangeTypes) {
|
|
1909
1984
|
var type = action.type,
|
|
1910
1985
|
props = action.props;
|
|
@@ -1964,56 +2039,22 @@ function downshiftCommonReducer(state, action, stateChangeTypes) {
|
|
|
1964
2039
|
/* eslint-enable complexity */
|
|
1965
2040
|
|
|
1966
2041
|
function getItemIndexByCharacterKey(_a) {
|
|
1967
|
-
var keysSoFar = _a.keysSoFar, highlightedIndex = _a.highlightedIndex, items = _a.items, itemToString = _a.itemToString,
|
|
2042
|
+
var keysSoFar = _a.keysSoFar, highlightedIndex = _a.highlightedIndex, items = _a.items, itemToString = _a.itemToString, isItemDisabled = _a.isItemDisabled;
|
|
1968
2043
|
var lowerCasedKeysSoFar = keysSoFar.toLowerCase();
|
|
1969
2044
|
for (var index = 0; index < items.length; index++) {
|
|
1970
2045
|
// if we already have a search query in progress, we also consider the current highlighted item.
|
|
1971
2046
|
var offsetIndex = (index + highlightedIndex + (keysSoFar.length < 2 ? 1 : 0)) % items.length;
|
|
1972
2047
|
var item = items[offsetIndex];
|
|
1973
2048
|
if (item !== undefined &&
|
|
1974
|
-
itemToString(item).toLowerCase().startsWith(lowerCasedKeysSoFar)
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
return offsetIndex;
|
|
1978
|
-
}
|
|
2049
|
+
itemToString(item).toLowerCase().startsWith(lowerCasedKeysSoFar) &&
|
|
2050
|
+
!isItemDisabled(item, offsetIndex)) {
|
|
2051
|
+
return offsetIndex;
|
|
1979
2052
|
}
|
|
1980
2053
|
}
|
|
1981
2054
|
return highlightedIndex;
|
|
1982
2055
|
}
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
itemToString: PropTypes__default["default"].func,
|
|
1986
|
-
getA11yStatusMessage: PropTypes__default["default"].func,
|
|
1987
|
-
getA11ySelectionMessage: 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
|
-
stateReducer: PropTypes__default["default"].func,
|
|
2003
|
-
onSelectedItemChange: PropTypes__default["default"].func,
|
|
2004
|
-
onHighlightedIndexChange: PropTypes__default["default"].func,
|
|
2005
|
-
onStateChange: PropTypes__default["default"].func,
|
|
2006
|
-
onIsOpenChange: PropTypes__default["default"].func,
|
|
2007
|
-
environment: PropTypes__default["default"].shape({
|
|
2008
|
-
addEventListener: PropTypes__default["default"].func,
|
|
2009
|
-
removeEventListener: PropTypes__default["default"].func,
|
|
2010
|
-
document: PropTypes__default["default"].shape({
|
|
2011
|
-
getElementById: PropTypes__default["default"].func,
|
|
2012
|
-
activeElement: PropTypes__default["default"].any,
|
|
2013
|
-
body: PropTypes__default["default"].any
|
|
2014
|
-
})
|
|
2015
|
-
})
|
|
2016
|
-
};
|
|
2056
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
2057
|
+
var propTypes$2 = tslib.__assign(tslib.__assign({}, commonDropdownPropTypes), { items: PropTypes__default["default"].array.isRequired, isItemDisabled: PropTypes__default["default"].func, getA11ySelectionMessage: PropTypes__default["default"].func });
|
|
2017
2058
|
/**
|
|
2018
2059
|
* Default implementation for status message. Only added when menu is open.
|
|
2019
2060
|
* Will specift if there are results in the list, and if so, how many,
|
|
@@ -2035,7 +2076,9 @@ function getA11yStatusMessage(_a) {
|
|
|
2035
2076
|
}
|
|
2036
2077
|
return '';
|
|
2037
2078
|
}
|
|
2038
|
-
var defaultProps$2 = tslib.__assign(tslib.__assign({}, defaultProps$3), { getA11yStatusMessage: getA11yStatusMessage
|
|
2079
|
+
var defaultProps$2 = tslib.__assign(tslib.__assign({}, defaultProps$3), { getA11yStatusMessage: getA11yStatusMessage, isItemDisabled: function () {
|
|
2080
|
+
return false;
|
|
2081
|
+
} });
|
|
2039
2082
|
// eslint-disable-next-line import/no-mutable-exports
|
|
2040
2083
|
var validatePropTypes$2 = noop;
|
|
2041
2084
|
/* istanbul ignore next */
|
|
@@ -2119,7 +2162,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2119
2162
|
highlightedIndex: prevHighlightedIndex,
|
|
2120
2163
|
items: props.items,
|
|
2121
2164
|
itemToString: props.itemToString,
|
|
2122
|
-
|
|
2165
|
+
isItemDisabled: props.isItemDisabled
|
|
2123
2166
|
});
|
|
2124
2167
|
changes = {
|
|
2125
2168
|
inputValue: inputValue,
|
|
@@ -2130,7 +2173,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2130
2173
|
break;
|
|
2131
2174
|
case ToggleButtonKeyDownArrowDown:
|
|
2132
2175
|
{
|
|
2133
|
-
var _highlightedIndex = state.isOpen ?
|
|
2176
|
+
var _highlightedIndex = state.isOpen ? getHighlightedIndex(state.highlightedIndex, 1, props.items, props.isItemDisabled) : altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1);
|
|
2134
2177
|
changes = {
|
|
2135
2178
|
highlightedIndex: _highlightedIndex,
|
|
2136
2179
|
isOpen: true
|
|
@@ -2141,7 +2184,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2141
2184
|
if (state.isOpen && altKey) {
|
|
2142
2185
|
changes = getChangesOnSelection(props, state.highlightedIndex, false);
|
|
2143
2186
|
} else {
|
|
2144
|
-
var _highlightedIndex2 = state.isOpen ?
|
|
2187
|
+
var _highlightedIndex2 = state.isOpen ? getHighlightedIndex(state.highlightedIndex, -1, props.items, props.isItemDisabled) : getHighlightedIndexOnOpen(props, state, -1);
|
|
2145
2188
|
changes = {
|
|
2146
2189
|
highlightedIndex: _highlightedIndex2,
|
|
2147
2190
|
isOpen: true
|
|
@@ -2155,24 +2198,24 @@ function downshiftSelectReducer(state, action) {
|
|
|
2155
2198
|
break;
|
|
2156
2199
|
case ToggleButtonKeyDownHome:
|
|
2157
2200
|
changes = {
|
|
2158
|
-
highlightedIndex:
|
|
2201
|
+
highlightedIndex: getNonDisabledIndex(0, false, props.items, props.isItemDisabled),
|
|
2159
2202
|
isOpen: true
|
|
2160
2203
|
};
|
|
2161
2204
|
break;
|
|
2162
2205
|
case ToggleButtonKeyDownEnd:
|
|
2163
2206
|
changes = {
|
|
2164
|
-
highlightedIndex:
|
|
2207
|
+
highlightedIndex: getNonDisabledIndex(props.items.length - 1, true, props.items, props.isItemDisabled),
|
|
2165
2208
|
isOpen: true
|
|
2166
2209
|
};
|
|
2167
2210
|
break;
|
|
2168
2211
|
case ToggleButtonKeyDownPageUp:
|
|
2169
2212
|
changes = {
|
|
2170
|
-
highlightedIndex:
|
|
2213
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, -10, props.items, props.isItemDisabled)
|
|
2171
2214
|
};
|
|
2172
2215
|
break;
|
|
2173
2216
|
case ToggleButtonKeyDownPageDown:
|
|
2174
2217
|
changes = {
|
|
2175
|
-
highlightedIndex:
|
|
2218
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, 10, props.items, props.isItemDisabled)
|
|
2176
2219
|
};
|
|
2177
2220
|
break;
|
|
2178
2221
|
case ToggleButtonKeyDownEscape:
|
|
@@ -2203,7 +2246,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2203
2246
|
|
|
2204
2247
|
var _excluded$2 = ["onMouseLeave", "refKey", "onKeyDown", "onBlur", "ref"],
|
|
2205
2248
|
_excluded2$2 = ["onBlur", "onClick", "onPress", "onKeyDown", "refKey", "ref"],
|
|
2206
|
-
_excluded3$1 = ["item", "index", "onMouseMove", "onClick", "onPress", "refKey", "
|
|
2249
|
+
_excluded3$1 = ["item", "index", "onMouseMove", "onClick", "onPress", "refKey", "disabled", "ref"];
|
|
2207
2250
|
useSelect.stateChangeTypes = stateChangeTypes$2;
|
|
2208
2251
|
function useSelect(userProps) {
|
|
2209
2252
|
if (userProps === void 0) {
|
|
@@ -2229,16 +2272,16 @@ function useSelect(userProps) {
|
|
|
2229
2272
|
inputValue = state.inputValue;
|
|
2230
2273
|
|
|
2231
2274
|
// Element efs.
|
|
2232
|
-
var toggleButtonRef =
|
|
2233
|
-
var menuRef =
|
|
2234
|
-
var itemRefs =
|
|
2275
|
+
var toggleButtonRef = React.useRef(null);
|
|
2276
|
+
var menuRef = React.useRef(null);
|
|
2277
|
+
var itemRefs = React.useRef({});
|
|
2235
2278
|
// used to keep the inputValue clearTimeout object between renders.
|
|
2236
|
-
var clearTimeoutRef =
|
|
2279
|
+
var clearTimeoutRef = React.useRef(null);
|
|
2237
2280
|
// prevent id re-generation between renders.
|
|
2238
2281
|
var elementIds = useElementIds(props);
|
|
2239
2282
|
// used to keep track of how many items we had on previous cycle.
|
|
2240
|
-
var previousResultCountRef =
|
|
2241
|
-
var isInitialMountRef =
|
|
2283
|
+
var previousResultCountRef = React.useRef();
|
|
2284
|
+
var isInitialMountRef = React.useRef(true);
|
|
2242
2285
|
// utility callback to get item element.
|
|
2243
2286
|
var latest = useLatestRef({
|
|
2244
2287
|
state: state,
|
|
@@ -2246,7 +2289,7 @@ function useSelect(userProps) {
|
|
|
2246
2289
|
});
|
|
2247
2290
|
|
|
2248
2291
|
// Some utils.
|
|
2249
|
-
var getItemNodeFromIndex =
|
|
2292
|
+
var getItemNodeFromIndex = React.useCallback(function (index) {
|
|
2250
2293
|
return itemRefs.current[elementIds.getItemId(index)];
|
|
2251
2294
|
}, [elementIds]);
|
|
2252
2295
|
|
|
@@ -2278,7 +2321,7 @@ function useSelect(userProps) {
|
|
|
2278
2321
|
});
|
|
2279
2322
|
|
|
2280
2323
|
// Sets cleanup for the keysSoFar callback, debounded after 500ms.
|
|
2281
|
-
|
|
2324
|
+
React.useEffect(function () {
|
|
2282
2325
|
// init the clean function here as we need access to dispatch.
|
|
2283
2326
|
clearTimeoutRef.current = debounce(function (outerDispatch) {
|
|
2284
2327
|
outerDispatch({
|
|
@@ -2294,7 +2337,7 @@ function useSelect(userProps) {
|
|
|
2294
2337
|
}, []);
|
|
2295
2338
|
|
|
2296
2339
|
// Invokes the keysSoFar callback set up above.
|
|
2297
|
-
|
|
2340
|
+
React.useEffect(function () {
|
|
2298
2341
|
if (!inputValue) {
|
|
2299
2342
|
return;
|
|
2300
2343
|
}
|
|
@@ -2305,7 +2348,7 @@ function useSelect(userProps) {
|
|
|
2305
2348
|
props: props,
|
|
2306
2349
|
state: state
|
|
2307
2350
|
});
|
|
2308
|
-
|
|
2351
|
+
React.useEffect(function () {
|
|
2309
2352
|
if (isInitialMountRef.current) {
|
|
2310
2353
|
return;
|
|
2311
2354
|
}
|
|
@@ -2319,27 +2362,26 @@ function useSelect(userProps) {
|
|
|
2319
2362
|
});
|
|
2320
2363
|
var setGetterPropCallInfo = useGetterPropsCalledChecker('getMenuProps', 'getToggleButtonProps');
|
|
2321
2364
|
// Make initial ref false.
|
|
2322
|
-
|
|
2365
|
+
React.useEffect(function () {
|
|
2323
2366
|
isInitialMountRef.current = false;
|
|
2324
2367
|
return function () {
|
|
2325
2368
|
isInitialMountRef.current = true;
|
|
2326
2369
|
};
|
|
2327
2370
|
}, []);
|
|
2328
2371
|
// Reset itemRefs on close.
|
|
2329
|
-
|
|
2372
|
+
React.useEffect(function () {
|
|
2330
2373
|
if (!isOpen) {
|
|
2331
2374
|
itemRefs.current = {};
|
|
2332
2375
|
}
|
|
2333
2376
|
}, [isOpen]);
|
|
2334
2377
|
|
|
2335
2378
|
// Event handler functions.
|
|
2336
|
-
var toggleButtonKeyDownHandlers =
|
|
2379
|
+
var toggleButtonKeyDownHandlers = React.useMemo(function () {
|
|
2337
2380
|
return {
|
|
2338
2381
|
ArrowDown: function ArrowDown(event) {
|
|
2339
2382
|
event.preventDefault();
|
|
2340
2383
|
dispatch({
|
|
2341
2384
|
type: ToggleButtonKeyDownArrowDown,
|
|
2342
|
-
getItemNodeFromIndex: getItemNodeFromIndex,
|
|
2343
2385
|
altKey: event.altKey
|
|
2344
2386
|
});
|
|
2345
2387
|
},
|
|
@@ -2347,22 +2389,19 @@ function useSelect(userProps) {
|
|
|
2347
2389
|
event.preventDefault();
|
|
2348
2390
|
dispatch({
|
|
2349
2391
|
type: ToggleButtonKeyDownArrowUp,
|
|
2350
|
-
getItemNodeFromIndex: getItemNodeFromIndex,
|
|
2351
2392
|
altKey: event.altKey
|
|
2352
2393
|
});
|
|
2353
2394
|
},
|
|
2354
2395
|
Home: function Home(event) {
|
|
2355
2396
|
event.preventDefault();
|
|
2356
2397
|
dispatch({
|
|
2357
|
-
type: ToggleButtonKeyDownHome
|
|
2358
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2398
|
+
type: ToggleButtonKeyDownHome
|
|
2359
2399
|
});
|
|
2360
2400
|
},
|
|
2361
2401
|
End: function End(event) {
|
|
2362
2402
|
event.preventDefault();
|
|
2363
2403
|
dispatch({
|
|
2364
|
-
type: ToggleButtonKeyDownEnd
|
|
2365
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2404
|
+
type: ToggleButtonKeyDownEnd
|
|
2366
2405
|
});
|
|
2367
2406
|
},
|
|
2368
2407
|
Escape: function Escape() {
|
|
@@ -2382,8 +2421,7 @@ function useSelect(userProps) {
|
|
|
2382
2421
|
if (latest.current.state.isOpen) {
|
|
2383
2422
|
event.preventDefault();
|
|
2384
2423
|
dispatch({
|
|
2385
|
-
type: ToggleButtonKeyDownPageUp
|
|
2386
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2424
|
+
type: ToggleButtonKeyDownPageUp
|
|
2387
2425
|
});
|
|
2388
2426
|
}
|
|
2389
2427
|
},
|
|
@@ -2391,8 +2429,7 @@ function useSelect(userProps) {
|
|
|
2391
2429
|
if (latest.current.state.isOpen) {
|
|
2392
2430
|
event.preventDefault();
|
|
2393
2431
|
dispatch({
|
|
2394
|
-
type: ToggleButtonKeyDownPageDown
|
|
2395
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2432
|
+
type: ToggleButtonKeyDownPageDown
|
|
2396
2433
|
});
|
|
2397
2434
|
}
|
|
2398
2435
|
},
|
|
@@ -2408,8 +2445,7 @@ function useSelect(userProps) {
|
|
|
2408
2445
|
if (currentState.inputValue) {
|
|
2409
2446
|
dispatch({
|
|
2410
2447
|
type: ToggleButtonKeyDownCharacter,
|
|
2411
|
-
key: ' '
|
|
2412
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2448
|
+
key: ' '
|
|
2413
2449
|
});
|
|
2414
2450
|
} else {
|
|
2415
2451
|
dispatch({
|
|
@@ -2418,55 +2454,55 @@ function useSelect(userProps) {
|
|
|
2418
2454
|
}
|
|
2419
2455
|
}
|
|
2420
2456
|
};
|
|
2421
|
-
}, [dispatch,
|
|
2457
|
+
}, [dispatch, latest]);
|
|
2422
2458
|
|
|
2423
2459
|
// Action functions.
|
|
2424
|
-
var toggleMenu =
|
|
2460
|
+
var toggleMenu = React.useCallback(function () {
|
|
2425
2461
|
dispatch({
|
|
2426
2462
|
type: FunctionToggleMenu$1
|
|
2427
2463
|
});
|
|
2428
2464
|
}, [dispatch]);
|
|
2429
|
-
var closeMenu =
|
|
2465
|
+
var closeMenu = React.useCallback(function () {
|
|
2430
2466
|
dispatch({
|
|
2431
2467
|
type: FunctionCloseMenu$1
|
|
2432
2468
|
});
|
|
2433
2469
|
}, [dispatch]);
|
|
2434
|
-
var openMenu =
|
|
2470
|
+
var openMenu = React.useCallback(function () {
|
|
2435
2471
|
dispatch({
|
|
2436
2472
|
type: FunctionOpenMenu$1
|
|
2437
2473
|
});
|
|
2438
2474
|
}, [dispatch]);
|
|
2439
|
-
var setHighlightedIndex =
|
|
2475
|
+
var setHighlightedIndex = React.useCallback(function (newHighlightedIndex) {
|
|
2440
2476
|
dispatch({
|
|
2441
2477
|
type: FunctionSetHighlightedIndex$1,
|
|
2442
2478
|
highlightedIndex: newHighlightedIndex
|
|
2443
2479
|
});
|
|
2444
2480
|
}, [dispatch]);
|
|
2445
|
-
var selectItem =
|
|
2481
|
+
var selectItem = React.useCallback(function (newSelectedItem) {
|
|
2446
2482
|
dispatch({
|
|
2447
2483
|
type: FunctionSelectItem$1,
|
|
2448
2484
|
selectedItem: newSelectedItem
|
|
2449
2485
|
});
|
|
2450
2486
|
}, [dispatch]);
|
|
2451
|
-
var reset =
|
|
2487
|
+
var reset = React.useCallback(function () {
|
|
2452
2488
|
dispatch({
|
|
2453
2489
|
type: FunctionReset$2
|
|
2454
2490
|
});
|
|
2455
2491
|
}, [dispatch]);
|
|
2456
|
-
var setInputValue =
|
|
2492
|
+
var setInputValue = React.useCallback(function (newInputValue) {
|
|
2457
2493
|
dispatch({
|
|
2458
2494
|
type: FunctionSetInputValue$1,
|
|
2459
2495
|
inputValue: newInputValue
|
|
2460
2496
|
});
|
|
2461
2497
|
}, [dispatch]);
|
|
2462
2498
|
// Getter functions.
|
|
2463
|
-
var getLabelProps =
|
|
2499
|
+
var getLabelProps = React.useCallback(function (labelProps) {
|
|
2464
2500
|
return _extends__default["default"]({
|
|
2465
2501
|
id: elementIds.labelId,
|
|
2466
2502
|
htmlFor: elementIds.toggleButtonId
|
|
2467
2503
|
}, labelProps);
|
|
2468
2504
|
}, [elementIds]);
|
|
2469
|
-
var getMenuProps =
|
|
2505
|
+
var getMenuProps = React.useCallback(function (_temp, _temp2) {
|
|
2470
2506
|
var _extends2;
|
|
2471
2507
|
var _ref = _temp === void 0 ? {} : _temp,
|
|
2472
2508
|
onMouseLeave = _ref.onMouseLeave,
|
|
@@ -2489,7 +2525,7 @@ function useSelect(userProps) {
|
|
|
2489
2525
|
menuRef.current = menuNode;
|
|
2490
2526
|
}), _extends2.id = elementIds.menuId, _extends2.role = 'listbox', _extends2['aria-labelledby'] = rest && rest['aria-label'] ? undefined : "" + elementIds.labelId, _extends2.onMouseLeave = callAllEventHandlers(onMouseLeave, menuHandleMouseLeave), _extends2), rest);
|
|
2491
2527
|
}, [dispatch, setGetterPropCallInfo, elementIds]);
|
|
2492
|
-
var getToggleButtonProps =
|
|
2528
|
+
var getToggleButtonProps = React.useCallback(function (_temp3, _temp4) {
|
|
2493
2529
|
var _extends3;
|
|
2494
2530
|
var _ref3 = _temp3 === void 0 ? {} : _temp3,
|
|
2495
2531
|
onBlur = _ref3.onBlur;
|
|
@@ -2527,8 +2563,8 @@ function useSelect(userProps) {
|
|
|
2527
2563
|
}
|
|
2528
2564
|
setGetterPropCallInfo('getToggleButtonProps', suppressRefError, refKey, toggleButtonRef);
|
|
2529
2565
|
return toggleProps;
|
|
2530
|
-
}, [latest, elementIds, setGetterPropCallInfo, dispatch, mouseAndTouchTrackersRef, toggleButtonKeyDownHandlers
|
|
2531
|
-
var getItemProps =
|
|
2566
|
+
}, [latest, elementIds, setGetterPropCallInfo, dispatch, mouseAndTouchTrackersRef, toggleButtonKeyDownHandlers]);
|
|
2567
|
+
var getItemProps = React.useCallback(function (_temp5) {
|
|
2532
2568
|
var _extends4;
|
|
2533
2569
|
var _ref5 = _temp5 === void 0 ? {} : _temp5,
|
|
2534
2570
|
itemProp = _ref5.item,
|
|
@@ -2538,15 +2574,19 @@ function useSelect(userProps) {
|
|
|
2538
2574
|
var onPress = _ref5.onPress,
|
|
2539
2575
|
_ref5$refKey = _ref5.refKey,
|
|
2540
2576
|
refKey = _ref5$refKey === void 0 ? 'ref' : _ref5$refKey,
|
|
2577
|
+
disabledProp = _ref5.disabled,
|
|
2541
2578
|
ref = _ref5.ref,
|
|
2542
|
-
disabled = _ref5.disabled,
|
|
2543
2579
|
rest = _objectWithoutPropertiesLoose__default["default"](_ref5, _excluded3$1);
|
|
2580
|
+
if (disabledProp !== undefined) {
|
|
2581
|
+
console.warn('Passing "disabled" as an argument to getItemProps is not supported anymore. Please use the isItemDisabled prop from useSelect.');
|
|
2582
|
+
}
|
|
2544
2583
|
var _latest$current = latest.current,
|
|
2545
2584
|
latestState = _latest$current.state,
|
|
2546
2585
|
latestProps = _latest$current.props;
|
|
2547
2586
|
var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
|
|
2548
2587
|
item = _getItemAndIndex[0],
|
|
2549
2588
|
index = _getItemAndIndex[1];
|
|
2589
|
+
var disabled = latestProps.isItemDisabled(item, index);
|
|
2550
2590
|
var itemHandleMouseMove = function itemHandleMouseMove() {
|
|
2551
2591
|
if (index === latestState.highlightedIndex) {
|
|
2552
2592
|
return;
|
|
@@ -2564,16 +2604,11 @@ function useSelect(userProps) {
|
|
|
2564
2604
|
index: index
|
|
2565
2605
|
});
|
|
2566
2606
|
};
|
|
2567
|
-
var itemProps = _extends__default["default"]((_extends4 = {
|
|
2568
|
-
disabled: disabled,
|
|
2569
|
-
role: 'option',
|
|
2570
|
-
'aria-selected': "" + (item === selectedItem),
|
|
2571
|
-
id: elementIds.getItemId(index)
|
|
2572
|
-
}, _extends4[refKey] = handleRefs(ref, function (itemNode) {
|
|
2607
|
+
var itemProps = _extends__default["default"]((_extends4 = {}, _extends4[refKey] = handleRefs(ref, function (itemNode) {
|
|
2573
2608
|
if (itemNode) {
|
|
2574
2609
|
itemRefs.current[elementIds.getItemId(index)] = itemNode;
|
|
2575
2610
|
}
|
|
2576
|
-
}), _extends4), rest);
|
|
2611
|
+
}), _extends4['aria-disabled'] = disabled, _extends4['aria-selected'] = "" + (item === latestState.selectedItem), _extends4.id = elementIds.getItemId(index), _extends4.role = 'option', _extends4), rest);
|
|
2577
2612
|
if (!disabled) {
|
|
2578
2613
|
/* istanbul ignore next (react-native) */
|
|
2579
2614
|
{
|
|
@@ -2582,7 +2617,7 @@ function useSelect(userProps) {
|
|
|
2582
2617
|
}
|
|
2583
2618
|
itemProps.onMouseMove = callAllEventHandlers(onMouseMove, itemHandleMouseMove);
|
|
2584
2619
|
return itemProps;
|
|
2585
|
-
}, [latest,
|
|
2620
|
+
}, [latest, elementIds, shouldScrollRef, dispatch]);
|
|
2586
2621
|
return {
|
|
2587
2622
|
// prop getters.
|
|
2588
2623
|
getToggleButtonProps: getToggleButtonProps,
|
|
@@ -2615,7 +2650,7 @@ var InputKeyDownPageDown = process.env.NODE_ENV !== "production" ? '__input_keyd
|
|
|
2615
2650
|
var InputKeyDownEnter = process.env.NODE_ENV !== "production" ? '__input_keydown_enter__' : 7;
|
|
2616
2651
|
var InputChange = process.env.NODE_ENV !== "production" ? '__input_change__' : 8;
|
|
2617
2652
|
var InputBlur = process.env.NODE_ENV !== "production" ? '__input_blur__' : 9;
|
|
2618
|
-
var
|
|
2653
|
+
var InputClick = process.env.NODE_ENV !== "production" ? '__input_click__' : 10;
|
|
2619
2654
|
var MenuMouseLeave = process.env.NODE_ENV !== "production" ? '__menu_mouse_leave__' : 11;
|
|
2620
2655
|
var ItemMouseMove = process.env.NODE_ENV !== "production" ? '__item_mouse_move__' : 12;
|
|
2621
2656
|
var ItemClick = process.env.NODE_ENV !== "production" ? '__item_click__' : 13;
|
|
@@ -2641,7 +2676,7 @@ var stateChangeTypes$1 = /*#__PURE__*/Object.freeze({
|
|
|
2641
2676
|
InputKeyDownEnter: InputKeyDownEnter,
|
|
2642
2677
|
InputChange: InputChange,
|
|
2643
2678
|
InputBlur: InputBlur,
|
|
2644
|
-
|
|
2679
|
+
InputClick: InputClick,
|
|
2645
2680
|
MenuMouseLeave: MenuMouseLeave,
|
|
2646
2681
|
ItemMouseMove: ItemMouseMove,
|
|
2647
2682
|
ItemClick: ItemClick,
|
|
@@ -2667,46 +2702,17 @@ function getInitialState$1(props) {
|
|
|
2667
2702
|
inputValue: inputValue
|
|
2668
2703
|
});
|
|
2669
2704
|
}
|
|
2670
|
-
var propTypes$1 = {
|
|
2705
|
+
var propTypes$1 = _extends__default["default"]({}, commonDropdownPropTypes, {
|
|
2671
2706
|
items: PropTypes__default["default"].array.isRequired,
|
|
2672
|
-
|
|
2707
|
+
isItemDisabled: PropTypes__default["default"].func,
|
|
2673
2708
|
selectedItemChanged: PropTypes__default["default"].func,
|
|
2674
|
-
getA11yStatusMessage: PropTypes__default["default"].func,
|
|
2675
2709
|
getA11ySelectionMessage: PropTypes__default["default"].func,
|
|
2676
|
-
highlightedIndex: PropTypes__default["default"].number,
|
|
2677
|
-
defaultHighlightedIndex: PropTypes__default["default"].number,
|
|
2678
|
-
initialHighlightedIndex: PropTypes__default["default"].number,
|
|
2679
|
-
isOpen: PropTypes__default["default"].bool,
|
|
2680
|
-
defaultIsOpen: PropTypes__default["default"].bool,
|
|
2681
|
-
initialIsOpen: PropTypes__default["default"].bool,
|
|
2682
|
-
selectedItem: PropTypes__default["default"].any,
|
|
2683
|
-
initialSelectedItem: PropTypes__default["default"].any,
|
|
2684
|
-
defaultSelectedItem: PropTypes__default["default"].any,
|
|
2685
2710
|
inputValue: PropTypes__default["default"].string,
|
|
2686
2711
|
defaultInputValue: PropTypes__default["default"].string,
|
|
2687
2712
|
initialInputValue: PropTypes__default["default"].string,
|
|
2688
|
-
id: PropTypes__default["default"].string,
|
|
2689
|
-
labelId: PropTypes__default["default"].string,
|
|
2690
|
-
menuId: PropTypes__default["default"].string,
|
|
2691
|
-
getItemId: PropTypes__default["default"].func,
|
|
2692
2713
|
inputId: PropTypes__default["default"].string,
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
onSelectedItemChange: PropTypes__default["default"].func,
|
|
2696
|
-
onHighlightedIndexChange: PropTypes__default["default"].func,
|
|
2697
|
-
onStateChange: PropTypes__default["default"].func,
|
|
2698
|
-
onIsOpenChange: PropTypes__default["default"].func,
|
|
2699
|
-
onInputValueChange: PropTypes__default["default"].func,
|
|
2700
|
-
environment: PropTypes__default["default"].shape({
|
|
2701
|
-
addEventListener: PropTypes__default["default"].func,
|
|
2702
|
-
removeEventListener: PropTypes__default["default"].func,
|
|
2703
|
-
document: PropTypes__default["default"].shape({
|
|
2704
|
-
getElementById: PropTypes__default["default"].func,
|
|
2705
|
-
activeElement: PropTypes__default["default"].any,
|
|
2706
|
-
body: PropTypes__default["default"].any
|
|
2707
|
-
})
|
|
2708
|
-
})
|
|
2709
|
-
};
|
|
2714
|
+
onInputValueChange: PropTypes__default["default"].func
|
|
2715
|
+
});
|
|
2710
2716
|
|
|
2711
2717
|
/**
|
|
2712
2718
|
* The useCombobox version of useControlledReducer, which also
|
|
@@ -2721,13 +2727,13 @@ var propTypes$1 = {
|
|
|
2721
2727
|
* @returns {Array} An array with the state and an action dispatcher.
|
|
2722
2728
|
*/
|
|
2723
2729
|
function useControlledReducer(reducer, initialState, props) {
|
|
2724
|
-
var previousSelectedItemRef =
|
|
2730
|
+
var previousSelectedItemRef = React.useRef();
|
|
2725
2731
|
var _useEnhancedReducer = useEnhancedReducer(reducer, initialState, props),
|
|
2726
2732
|
state = _useEnhancedReducer[0],
|
|
2727
2733
|
dispatch = _useEnhancedReducer[1];
|
|
2728
2734
|
|
|
2729
2735
|
// ToDo: if needed, make same approach as selectedItemChanged from Downshift.
|
|
2730
|
-
|
|
2736
|
+
React.useEffect(function () {
|
|
2731
2737
|
if (!isControlledProp(props, 'selectedItem')) {
|
|
2732
2738
|
return;
|
|
2733
2739
|
}
|
|
@@ -2755,7 +2761,10 @@ var defaultProps$1 = _extends__default["default"]({}, defaultProps$3, {
|
|
|
2755
2761
|
selectedItemChanged: function selectedItemChanged(prevItem, item) {
|
|
2756
2762
|
return prevItem !== item;
|
|
2757
2763
|
},
|
|
2758
|
-
getA11yStatusMessage: getA11yStatusMessage$1
|
|
2764
|
+
getA11yStatusMessage: getA11yStatusMessage$1,
|
|
2765
|
+
isItemDisabled: function isItemDisabled() {
|
|
2766
|
+
return false;
|
|
2767
|
+
}
|
|
2759
2768
|
});
|
|
2760
2769
|
|
|
2761
2770
|
/* eslint-disable complexity */
|
|
@@ -2777,11 +2786,11 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2777
2786
|
case InputKeyDownArrowDown:
|
|
2778
2787
|
if (state.isOpen) {
|
|
2779
2788
|
changes = {
|
|
2780
|
-
highlightedIndex:
|
|
2789
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, 1, props.items, props.isItemDisabled, true)
|
|
2781
2790
|
};
|
|
2782
2791
|
} else {
|
|
2783
2792
|
changes = {
|
|
2784
|
-
highlightedIndex: altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1
|
|
2793
|
+
highlightedIndex: altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1),
|
|
2785
2794
|
isOpen: props.items.length >= 0
|
|
2786
2795
|
};
|
|
2787
2796
|
}
|
|
@@ -2792,12 +2801,12 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2792
2801
|
changes = getChangesOnSelection(props, state.highlightedIndex);
|
|
2793
2802
|
} else {
|
|
2794
2803
|
changes = {
|
|
2795
|
-
highlightedIndex:
|
|
2804
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, -1, props.items, props.isItemDisabled, true)
|
|
2796
2805
|
};
|
|
2797
2806
|
}
|
|
2798
2807
|
} else {
|
|
2799
2808
|
changes = {
|
|
2800
|
-
highlightedIndex: getHighlightedIndexOnOpen(props, state, -1
|
|
2809
|
+
highlightedIndex: getHighlightedIndexOnOpen(props, state, -1),
|
|
2801
2810
|
isOpen: props.items.length >= 0
|
|
2802
2811
|
};
|
|
2803
2812
|
}
|
|
@@ -2816,22 +2825,22 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2816
2825
|
break;
|
|
2817
2826
|
case InputKeyDownPageUp:
|
|
2818
2827
|
changes = {
|
|
2819
|
-
highlightedIndex:
|
|
2828
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, -10, props.items, props.isItemDisabled, true)
|
|
2820
2829
|
};
|
|
2821
2830
|
break;
|
|
2822
2831
|
case InputKeyDownPageDown:
|
|
2823
2832
|
changes = {
|
|
2824
|
-
highlightedIndex:
|
|
2833
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, 10, props.items, props.isItemDisabled, true)
|
|
2825
2834
|
};
|
|
2826
2835
|
break;
|
|
2827
2836
|
case InputKeyDownHome:
|
|
2828
2837
|
changes = {
|
|
2829
|
-
highlightedIndex:
|
|
2838
|
+
highlightedIndex: getNonDisabledIndex(0, false, props.items, props.isItemDisabled)
|
|
2830
2839
|
};
|
|
2831
2840
|
break;
|
|
2832
2841
|
case InputKeyDownEnd:
|
|
2833
2842
|
changes = {
|
|
2834
|
-
highlightedIndex:
|
|
2843
|
+
highlightedIndex: getNonDisabledIndex(props.items.length - 1, true, props.items, props.isItemDisabled)
|
|
2835
2844
|
};
|
|
2836
2845
|
break;
|
|
2837
2846
|
case InputBlur:
|
|
@@ -2850,10 +2859,10 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2850
2859
|
inputValue: action.inputValue
|
|
2851
2860
|
};
|
|
2852
2861
|
break;
|
|
2853
|
-
case
|
|
2862
|
+
case InputClick:
|
|
2854
2863
|
changes = {
|
|
2855
|
-
isOpen:
|
|
2856
|
-
highlightedIndex: getHighlightedIndexOnOpen(props, state, 0)
|
|
2864
|
+
isOpen: !state.isOpen,
|
|
2865
|
+
highlightedIndex: state.isOpen ? -1 : getHighlightedIndexOnOpen(props, state, 0)
|
|
2857
2866
|
};
|
|
2858
2867
|
break;
|
|
2859
2868
|
case FunctionSelectItem:
|
|
@@ -2877,7 +2886,7 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2877
2886
|
var _excluded$1 = ["onMouseLeave", "refKey", "ref"],
|
|
2878
2887
|
_excluded2$1 = ["item", "index", "refKey", "ref", "onMouseMove", "onMouseDown", "onClick", "onPress", "disabled"],
|
|
2879
2888
|
_excluded3 = ["onClick", "onPress", "refKey", "ref"],
|
|
2880
|
-
_excluded4 = ["onKeyDown", "onChange", "onInput", "
|
|
2889
|
+
_excluded4 = ["onKeyDown", "onChange", "onInput", "onBlur", "onChangeText", "onClick", "refKey", "ref"];
|
|
2881
2890
|
useCombobox.stateChangeTypes = stateChangeTypes$1;
|
|
2882
2891
|
function useCombobox(userProps) {
|
|
2883
2892
|
if (userProps === void 0) {
|
|
@@ -2905,21 +2914,21 @@ function useCombobox(userProps) {
|
|
|
2905
2914
|
inputValue = state.inputValue;
|
|
2906
2915
|
|
|
2907
2916
|
// Element refs.
|
|
2908
|
-
var menuRef =
|
|
2909
|
-
var itemRefs =
|
|
2910
|
-
var inputRef =
|
|
2911
|
-
var toggleButtonRef =
|
|
2912
|
-
var isInitialMountRef =
|
|
2917
|
+
var menuRef = React.useRef(null);
|
|
2918
|
+
var itemRefs = React.useRef({});
|
|
2919
|
+
var inputRef = React.useRef(null);
|
|
2920
|
+
var toggleButtonRef = React.useRef(null);
|
|
2921
|
+
var isInitialMountRef = React.useRef(true);
|
|
2913
2922
|
// prevent id re-generation between renders.
|
|
2914
2923
|
var elementIds = useElementIds(props);
|
|
2915
2924
|
// used to keep track of how many items we had on previous cycle.
|
|
2916
|
-
var previousResultCountRef =
|
|
2925
|
+
var previousResultCountRef = React.useRef();
|
|
2917
2926
|
// utility callback to get item element.
|
|
2918
2927
|
var latest = useLatestRef({
|
|
2919
2928
|
state: state,
|
|
2920
2929
|
props: props
|
|
2921
2930
|
});
|
|
2922
|
-
var getItemNodeFromIndex =
|
|
2931
|
+
var getItemNodeFromIndex = React.useCallback(function (index) {
|
|
2923
2932
|
return itemRefs.current[elementIds.getItemId(index)];
|
|
2924
2933
|
}, [elementIds]);
|
|
2925
2934
|
|
|
@@ -2955,14 +2964,14 @@ function useCombobox(userProps) {
|
|
|
2955
2964
|
state: state
|
|
2956
2965
|
});
|
|
2957
2966
|
// Focus the input on first render if required.
|
|
2958
|
-
|
|
2967
|
+
React.useEffect(function () {
|
|
2959
2968
|
var focusOnOpen = initialIsOpen || defaultIsOpen || isOpen;
|
|
2960
2969
|
if (focusOnOpen && inputRef.current) {
|
|
2961
2970
|
inputRef.current.focus();
|
|
2962
2971
|
}
|
|
2963
2972
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
2964
2973
|
}, []);
|
|
2965
|
-
|
|
2974
|
+
React.useEffect(function () {
|
|
2966
2975
|
if (isInitialMountRef.current) {
|
|
2967
2976
|
return;
|
|
2968
2977
|
}
|
|
@@ -2977,14 +2986,14 @@ function useCombobox(userProps) {
|
|
|
2977
2986
|
});
|
|
2978
2987
|
var setGetterPropCallInfo = useGetterPropsCalledChecker('getInputProps', 'getMenuProps');
|
|
2979
2988
|
// Make initial ref false.
|
|
2980
|
-
|
|
2989
|
+
React.useEffect(function () {
|
|
2981
2990
|
isInitialMountRef.current = false;
|
|
2982
2991
|
return function () {
|
|
2983
2992
|
isInitialMountRef.current = true;
|
|
2984
2993
|
};
|
|
2985
2994
|
}, []);
|
|
2986
2995
|
// Reset itemRefs on close.
|
|
2987
|
-
|
|
2996
|
+
React.useEffect(function () {
|
|
2988
2997
|
var _environment$document;
|
|
2989
2998
|
if (!isOpen) {
|
|
2990
2999
|
itemRefs.current = {};
|
|
@@ -2995,22 +3004,20 @@ function useCombobox(userProps) {
|
|
|
2995
3004
|
}, [isOpen, environment]);
|
|
2996
3005
|
|
|
2997
3006
|
/* Event handler functions */
|
|
2998
|
-
var inputKeyDownHandlers =
|
|
3007
|
+
var inputKeyDownHandlers = React.useMemo(function () {
|
|
2999
3008
|
return {
|
|
3000
3009
|
ArrowDown: function ArrowDown(event) {
|
|
3001
3010
|
event.preventDefault();
|
|
3002
3011
|
dispatch({
|
|
3003
3012
|
type: InputKeyDownArrowDown,
|
|
3004
|
-
altKey: event.altKey
|
|
3005
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3013
|
+
altKey: event.altKey
|
|
3006
3014
|
});
|
|
3007
3015
|
},
|
|
3008
3016
|
ArrowUp: function ArrowUp(event) {
|
|
3009
3017
|
event.preventDefault();
|
|
3010
3018
|
dispatch({
|
|
3011
3019
|
type: InputKeyDownArrowUp,
|
|
3012
|
-
altKey: event.altKey
|
|
3013
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3020
|
+
altKey: event.altKey
|
|
3014
3021
|
});
|
|
3015
3022
|
},
|
|
3016
3023
|
Home: function Home(event) {
|
|
@@ -3019,8 +3026,7 @@ function useCombobox(userProps) {
|
|
|
3019
3026
|
}
|
|
3020
3027
|
event.preventDefault();
|
|
3021
3028
|
dispatch({
|
|
3022
|
-
type: InputKeyDownHome
|
|
3023
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3029
|
+
type: InputKeyDownHome
|
|
3024
3030
|
});
|
|
3025
3031
|
},
|
|
3026
3032
|
End: function End(event) {
|
|
@@ -3029,8 +3035,7 @@ function useCombobox(userProps) {
|
|
|
3029
3035
|
}
|
|
3030
3036
|
event.preventDefault();
|
|
3031
3037
|
dispatch({
|
|
3032
|
-
type: InputKeyDownEnd
|
|
3033
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3038
|
+
type: InputKeyDownEnd
|
|
3034
3039
|
});
|
|
3035
3040
|
},
|
|
3036
3041
|
Escape: function Escape(event) {
|
|
@@ -3051,16 +3056,14 @@ function useCombobox(userProps) {
|
|
|
3051
3056
|
}
|
|
3052
3057
|
event.preventDefault();
|
|
3053
3058
|
dispatch({
|
|
3054
|
-
type: InputKeyDownEnter
|
|
3055
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3059
|
+
type: InputKeyDownEnter
|
|
3056
3060
|
});
|
|
3057
3061
|
},
|
|
3058
3062
|
PageUp: function PageUp(event) {
|
|
3059
3063
|
if (latest.current.state.isOpen) {
|
|
3060
3064
|
event.preventDefault();
|
|
3061
3065
|
dispatch({
|
|
3062
|
-
type: InputKeyDownPageUp
|
|
3063
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3066
|
+
type: InputKeyDownPageUp
|
|
3064
3067
|
});
|
|
3065
3068
|
}
|
|
3066
3069
|
},
|
|
@@ -3068,22 +3071,21 @@ function useCombobox(userProps) {
|
|
|
3068
3071
|
if (latest.current.state.isOpen) {
|
|
3069
3072
|
event.preventDefault();
|
|
3070
3073
|
dispatch({
|
|
3071
|
-
type: InputKeyDownPageDown
|
|
3072
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3074
|
+
type: InputKeyDownPageDown
|
|
3073
3075
|
});
|
|
3074
3076
|
}
|
|
3075
3077
|
}
|
|
3076
3078
|
};
|
|
3077
|
-
}, [dispatch, latest
|
|
3079
|
+
}, [dispatch, latest]);
|
|
3078
3080
|
|
|
3079
3081
|
// Getter props.
|
|
3080
|
-
var getLabelProps =
|
|
3082
|
+
var getLabelProps = React.useCallback(function (labelProps) {
|
|
3081
3083
|
return _extends__default["default"]({
|
|
3082
3084
|
id: elementIds.labelId,
|
|
3083
3085
|
htmlFor: elementIds.inputId
|
|
3084
3086
|
}, labelProps);
|
|
3085
3087
|
}, [elementIds]);
|
|
3086
|
-
var getMenuProps =
|
|
3088
|
+
var getMenuProps = React.useCallback(function (_temp, _temp2) {
|
|
3087
3089
|
var _extends2;
|
|
3088
3090
|
var _ref = _temp === void 0 ? {} : _temp,
|
|
3089
3091
|
onMouseLeave = _ref.onMouseLeave,
|
|
@@ -3103,7 +3105,7 @@ function useCombobox(userProps) {
|
|
|
3103
3105
|
});
|
|
3104
3106
|
}), _extends2), rest);
|
|
3105
3107
|
}, [dispatch, setGetterPropCallInfo, elementIds]);
|
|
3106
|
-
var getItemProps =
|
|
3108
|
+
var getItemProps = React.useCallback(function (_temp3) {
|
|
3107
3109
|
var _extends3, _ref4;
|
|
3108
3110
|
var _ref3 = _temp3 === void 0 ? {} : _temp3,
|
|
3109
3111
|
itemProp = _ref3.item,
|
|
@@ -3115,13 +3117,18 @@ function useCombobox(userProps) {
|
|
|
3115
3117
|
onMouseDown = _ref3.onMouseDown;
|
|
3116
3118
|
_ref3.onClick;
|
|
3117
3119
|
var onPress = _ref3.onPress,
|
|
3118
|
-
|
|
3120
|
+
disabledProp = _ref3.disabled,
|
|
3119
3121
|
rest = _objectWithoutPropertiesLoose__default["default"](_ref3, _excluded2$1);
|
|
3122
|
+
if (disabledProp !== undefined) {
|
|
3123
|
+
console.warn('Passing "disabled" as an argument to getItemProps is not supported anymore. Please use the isItemDisabled prop from useCombobox.');
|
|
3124
|
+
}
|
|
3120
3125
|
var _latest$current = latest.current,
|
|
3121
3126
|
latestProps = _latest$current.props,
|
|
3122
3127
|
latestState = _latest$current.state;
|
|
3123
3128
|
var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
|
|
3129
|
+
item = _getItemAndIndex[0],
|
|
3124
3130
|
index = _getItemAndIndex[1];
|
|
3131
|
+
var disabled = latestProps.isItemDisabled(item, index);
|
|
3125
3132
|
var onSelectKey = /* istanbul ignore next (react-native) */'onPress' ;
|
|
3126
3133
|
var customClickHandler = /* istanbul ignore next (react-native) */onPress ;
|
|
3127
3134
|
var itemHandleMouseMove = function itemHandleMouseMove() {
|
|
@@ -3148,12 +3155,12 @@ function useCombobox(userProps) {
|
|
|
3148
3155
|
if (itemNode) {
|
|
3149
3156
|
itemRefs.current[elementIds.getItemId(index)] = itemNode;
|
|
3150
3157
|
}
|
|
3151
|
-
}), _extends3
|
|
3158
|
+
}), _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), {
|
|
3152
3159
|
onMouseMove: callAllEventHandlers(onMouseMove, itemHandleMouseMove),
|
|
3153
3160
|
onMouseDown: callAllEventHandlers(onMouseDown, itemHandleMouseDown)
|
|
3154
3161
|
}, rest);
|
|
3155
3162
|
}, [dispatch, latest, shouldScrollRef, elementIds]);
|
|
3156
|
-
var getToggleButtonProps =
|
|
3163
|
+
var getToggleButtonProps = React.useCallback(function (_temp4) {
|
|
3157
3164
|
var _extends4;
|
|
3158
3165
|
var _ref5 = _temp4 === void 0 ? {} : _temp4;
|
|
3159
3166
|
_ref5.onClick;
|
|
@@ -3174,15 +3181,15 @@ function useCombobox(userProps) {
|
|
|
3174
3181
|
onPress: callAllEventHandlers(onPress, toggleButtonHandleClick)
|
|
3175
3182
|
} ), rest);
|
|
3176
3183
|
}, [dispatch, latest, elementIds]);
|
|
3177
|
-
var getInputProps =
|
|
3184
|
+
var getInputProps = React.useCallback(function (_temp5, _temp6) {
|
|
3178
3185
|
var _extends5;
|
|
3179
3186
|
var _ref6 = _temp5 === void 0 ? {} : _temp5,
|
|
3180
3187
|
onKeyDown = _ref6.onKeyDown,
|
|
3181
3188
|
onChange = _ref6.onChange,
|
|
3182
3189
|
onInput = _ref6.onInput,
|
|
3183
|
-
onFocus = _ref6.onFocus,
|
|
3184
3190
|
onBlur = _ref6.onBlur,
|
|
3185
3191
|
onChangeText = _ref6.onChangeText,
|
|
3192
|
+
onClick = _ref6.onClick,
|
|
3186
3193
|
_ref6$refKey = _ref6.refKey,
|
|
3187
3194
|
refKey = _ref6$refKey === void 0 ? 'ref' : _ref6$refKey,
|
|
3188
3195
|
ref = _ref6.ref,
|
|
@@ -3213,12 +3220,10 @@ function useCombobox(userProps) {
|
|
|
3213
3220
|
});
|
|
3214
3221
|
}
|
|
3215
3222
|
};
|
|
3216
|
-
var
|
|
3217
|
-
|
|
3218
|
-
|
|
3219
|
-
|
|
3220
|
-
});
|
|
3221
|
-
}
|
|
3223
|
+
var inputHandleClick = function inputHandleClick() {
|
|
3224
|
+
dispatch({
|
|
3225
|
+
type: InputClick
|
|
3226
|
+
});
|
|
3222
3227
|
};
|
|
3223
3228
|
|
|
3224
3229
|
/* istanbul ignore next (preact) */
|
|
@@ -3226,7 +3231,7 @@ function useCombobox(userProps) {
|
|
|
3226
3231
|
var eventHandlers = {};
|
|
3227
3232
|
if (!rest.disabled) {
|
|
3228
3233
|
var _eventHandlers;
|
|
3229
|
-
eventHandlers = (_eventHandlers = {}, _eventHandlers[onChangeKey] = callAllEventHandlers(onChange, onInput, inputHandleChange), _eventHandlers.onKeyDown = callAllEventHandlers(onKeyDown, inputHandleKeyDown), _eventHandlers.onBlur = callAllEventHandlers(onBlur, inputHandleBlur), _eventHandlers.
|
|
3234
|
+
eventHandlers = (_eventHandlers = {}, _eventHandlers[onChangeKey] = callAllEventHandlers(onChange, onInput, inputHandleChange), _eventHandlers.onKeyDown = callAllEventHandlers(onKeyDown, inputHandleKeyDown), _eventHandlers.onBlur = callAllEventHandlers(onBlur, inputHandleBlur), _eventHandlers.onClick = callAllEventHandlers(onClick, inputHandleClick), _eventHandlers);
|
|
3230
3235
|
}
|
|
3231
3236
|
|
|
3232
3237
|
/* istanbul ignore if (react-native) */
|
|
@@ -3242,44 +3247,44 @@ function useCombobox(userProps) {
|
|
|
3242
3247
|
}
|
|
3243
3248
|
return _extends__default["default"]((_extends5 = {}, _extends5[refKey] = handleRefs(ref, function (inputNode) {
|
|
3244
3249
|
inputRef.current = inputNode;
|
|
3245
|
-
}), _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 :
|
|
3250
|
+
}), _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);
|
|
3246
3251
|
}, [dispatch, inputKeyDownHandlers, latest, mouseAndTouchTrackersRef, setGetterPropCallInfo, elementIds]);
|
|
3247
3252
|
|
|
3248
3253
|
// returns
|
|
3249
|
-
var toggleMenu =
|
|
3254
|
+
var toggleMenu = React.useCallback(function () {
|
|
3250
3255
|
dispatch({
|
|
3251
3256
|
type: FunctionToggleMenu
|
|
3252
3257
|
});
|
|
3253
3258
|
}, [dispatch]);
|
|
3254
|
-
var closeMenu =
|
|
3259
|
+
var closeMenu = React.useCallback(function () {
|
|
3255
3260
|
dispatch({
|
|
3256
3261
|
type: FunctionCloseMenu
|
|
3257
3262
|
});
|
|
3258
3263
|
}, [dispatch]);
|
|
3259
|
-
var openMenu =
|
|
3264
|
+
var openMenu = React.useCallback(function () {
|
|
3260
3265
|
dispatch({
|
|
3261
3266
|
type: FunctionOpenMenu
|
|
3262
3267
|
});
|
|
3263
3268
|
}, [dispatch]);
|
|
3264
|
-
var setHighlightedIndex =
|
|
3269
|
+
var setHighlightedIndex = React.useCallback(function (newHighlightedIndex) {
|
|
3265
3270
|
dispatch({
|
|
3266
3271
|
type: FunctionSetHighlightedIndex,
|
|
3267
3272
|
highlightedIndex: newHighlightedIndex
|
|
3268
3273
|
});
|
|
3269
3274
|
}, [dispatch]);
|
|
3270
|
-
var selectItem =
|
|
3275
|
+
var selectItem = React.useCallback(function (newSelectedItem) {
|
|
3271
3276
|
dispatch({
|
|
3272
3277
|
type: FunctionSelectItem,
|
|
3273
3278
|
selectedItem: newSelectedItem
|
|
3274
3279
|
});
|
|
3275
3280
|
}, [dispatch]);
|
|
3276
|
-
var setInputValue =
|
|
3281
|
+
var setInputValue = React.useCallback(function (newInputValue) {
|
|
3277
3282
|
dispatch({
|
|
3278
3283
|
type: FunctionSetInputValue,
|
|
3279
3284
|
inputValue: newInputValue
|
|
3280
3285
|
});
|
|
3281
3286
|
}, [dispatch]);
|
|
3282
|
-
var reset =
|
|
3287
|
+
var reset = React.useCallback(function () {
|
|
3283
3288
|
dispatch({
|
|
3284
3289
|
type: FunctionReset$1
|
|
3285
3290
|
});
|
|
@@ -3389,30 +3394,19 @@ function getA11yRemovalMessage(selectionParameters) {
|
|
|
3389
3394
|
itemToStringLocal = selectionParameters.itemToString;
|
|
3390
3395
|
return itemToStringLocal(removedSelectedItem) + " has been removed.";
|
|
3391
3396
|
}
|
|
3392
|
-
var propTypes = {
|
|
3397
|
+
var propTypes = _extends__default["default"]({}, commonPropTypes, {
|
|
3393
3398
|
selectedItems: PropTypes__default["default"].array,
|
|
3394
3399
|
initialSelectedItems: PropTypes__default["default"].array,
|
|
3395
3400
|
defaultSelectedItems: PropTypes__default["default"].array,
|
|
3396
|
-
itemToString: PropTypes__default["default"].func,
|
|
3397
3401
|
getA11yRemovalMessage: PropTypes__default["default"].func,
|
|
3398
|
-
stateReducer: PropTypes__default["default"].func,
|
|
3399
3402
|
activeIndex: PropTypes__default["default"].number,
|
|
3400
3403
|
initialActiveIndex: PropTypes__default["default"].number,
|
|
3401
3404
|
defaultActiveIndex: PropTypes__default["default"].number,
|
|
3402
3405
|
onActiveIndexChange: PropTypes__default["default"].func,
|
|
3403
3406
|
onSelectedItemsChange: PropTypes__default["default"].func,
|
|
3404
3407
|
keyNavigationNext: PropTypes__default["default"].string,
|
|
3405
|
-
keyNavigationPrevious: PropTypes__default["default"].string
|
|
3406
|
-
|
|
3407
|
-
addEventListener: PropTypes__default["default"].func,
|
|
3408
|
-
removeEventListener: PropTypes__default["default"].func,
|
|
3409
|
-
document: PropTypes__default["default"].shape({
|
|
3410
|
-
getElementById: PropTypes__default["default"].func,
|
|
3411
|
-
activeElement: PropTypes__default["default"].any,
|
|
3412
|
-
body: PropTypes__default["default"].any
|
|
3413
|
-
})
|
|
3414
|
-
})
|
|
3415
|
-
};
|
|
3408
|
+
keyNavigationPrevious: PropTypes__default["default"].string
|
|
3409
|
+
});
|
|
3416
3410
|
var defaultProps = {
|
|
3417
3411
|
itemToString: defaultProps$3.itemToString,
|
|
3418
3412
|
stateReducer: defaultProps$3.stateReducer,
|
|
@@ -3596,10 +3590,10 @@ function useMultipleSelection(userProps) {
|
|
|
3596
3590
|
selectedItems = state.selectedItems;
|
|
3597
3591
|
|
|
3598
3592
|
// Refs.
|
|
3599
|
-
var isInitialMountRef =
|
|
3600
|
-
var dropdownRef =
|
|
3601
|
-
var previousSelectedItemsRef =
|
|
3602
|
-
var selectedItemRefs =
|
|
3593
|
+
var isInitialMountRef = React.useRef(true);
|
|
3594
|
+
var dropdownRef = React.useRef(null);
|
|
3595
|
+
var previousSelectedItemsRef = React.useRef(selectedItems);
|
|
3596
|
+
var selectedItemRefs = React.useRef();
|
|
3603
3597
|
selectedItemRefs.current = [];
|
|
3604
3598
|
var latest = useLatestRef({
|
|
3605
3599
|
state: state,
|
|
@@ -3608,7 +3602,7 @@ function useMultipleSelection(userProps) {
|
|
|
3608
3602
|
|
|
3609
3603
|
// Effects.
|
|
3610
3604
|
/* Sets a11y status message on changes in selectedItem. */
|
|
3611
|
-
|
|
3605
|
+
React.useEffect(function () {
|
|
3612
3606
|
if (isInitialMountRef.current || true) {
|
|
3613
3607
|
return;
|
|
3614
3608
|
}
|
|
@@ -3629,7 +3623,7 @@ function useMultipleSelection(userProps) {
|
|
|
3629
3623
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
3630
3624
|
}, [selectedItems.length]);
|
|
3631
3625
|
// Sets focus on active item.
|
|
3632
|
-
|
|
3626
|
+
React.useEffect(function () {
|
|
3633
3627
|
if (isInitialMountRef.current) {
|
|
3634
3628
|
return;
|
|
3635
3629
|
}
|
|
@@ -3646,7 +3640,7 @@ function useMultipleSelection(userProps) {
|
|
|
3646
3640
|
});
|
|
3647
3641
|
var setGetterPropCallInfo = useGetterPropsCalledChecker('getDropdownProps');
|
|
3648
3642
|
// Make initial ref false.
|
|
3649
|
-
|
|
3643
|
+
React.useEffect(function () {
|
|
3650
3644
|
isInitialMountRef.current = false;
|
|
3651
3645
|
return function () {
|
|
3652
3646
|
isInitialMountRef.current = true;
|
|
@@ -3654,7 +3648,7 @@ function useMultipleSelection(userProps) {
|
|
|
3654
3648
|
}, []);
|
|
3655
3649
|
|
|
3656
3650
|
// Event handler functions.
|
|
3657
|
-
var selectedItemKeyDownHandlers =
|
|
3651
|
+
var selectedItemKeyDownHandlers = React.useMemo(function () {
|
|
3658
3652
|
var _ref;
|
|
3659
3653
|
return _ref = {}, _ref[keyNavigationPrevious] = function () {
|
|
3660
3654
|
dispatch({
|
|
@@ -3674,7 +3668,7 @@ function useMultipleSelection(userProps) {
|
|
|
3674
3668
|
});
|
|
3675
3669
|
}, _ref;
|
|
3676
3670
|
}, [dispatch, keyNavigationNext, keyNavigationPrevious]);
|
|
3677
|
-
var dropdownKeyDownHandlers =
|
|
3671
|
+
var dropdownKeyDownHandlers = React.useMemo(function () {
|
|
3678
3672
|
var _ref2;
|
|
3679
3673
|
return _ref2 = {}, _ref2[keyNavigationPrevious] = function (event) {
|
|
3680
3674
|
if (isKeyDownOperationPermitted(event)) {
|
|
@@ -3692,7 +3686,7 @@ function useMultipleSelection(userProps) {
|
|
|
3692
3686
|
}, [dispatch, keyNavigationPrevious]);
|
|
3693
3687
|
|
|
3694
3688
|
// Getter props.
|
|
3695
|
-
var getSelectedItemProps =
|
|
3689
|
+
var getSelectedItemProps = React.useCallback(function (_temp) {
|
|
3696
3690
|
var _extends2;
|
|
3697
3691
|
var _ref3 = _temp === void 0 ? {} : _temp,
|
|
3698
3692
|
_ref3$refKey = _ref3.refKey,
|
|
@@ -3725,7 +3719,7 @@ function useMultipleSelection(userProps) {
|
|
|
3725
3719
|
}
|
|
3726
3720
|
}), _extends2.tabIndex = isFocusable ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
|
|
3727
3721
|
}, [dispatch, latest, selectedItemKeyDownHandlers]);
|
|
3728
|
-
var getDropdownProps =
|
|
3722
|
+
var getDropdownProps = React.useCallback(function (_temp2, _temp3) {
|
|
3729
3723
|
var _extends3;
|
|
3730
3724
|
var _ref4 = _temp2 === void 0 ? {} : _temp2,
|
|
3731
3725
|
_ref4$refKey = _ref4.refKey,
|
|
@@ -3762,31 +3756,31 @@ function useMultipleSelection(userProps) {
|
|
|
3762
3756
|
}, [dispatch, dropdownKeyDownHandlers, setGetterPropCallInfo]);
|
|
3763
3757
|
|
|
3764
3758
|
// returns
|
|
3765
|
-
var addSelectedItem =
|
|
3759
|
+
var addSelectedItem = React.useCallback(function (selectedItem) {
|
|
3766
3760
|
dispatch({
|
|
3767
3761
|
type: FunctionAddSelectedItem,
|
|
3768
3762
|
selectedItem: selectedItem
|
|
3769
3763
|
});
|
|
3770
3764
|
}, [dispatch]);
|
|
3771
|
-
var removeSelectedItem =
|
|
3765
|
+
var removeSelectedItem = React.useCallback(function (selectedItem) {
|
|
3772
3766
|
dispatch({
|
|
3773
3767
|
type: FunctionRemoveSelectedItem,
|
|
3774
3768
|
selectedItem: selectedItem
|
|
3775
3769
|
});
|
|
3776
3770
|
}, [dispatch]);
|
|
3777
|
-
var setSelectedItems =
|
|
3771
|
+
var setSelectedItems = React.useCallback(function (newSelectedItems) {
|
|
3778
3772
|
dispatch({
|
|
3779
3773
|
type: FunctionSetSelectedItems,
|
|
3780
3774
|
selectedItems: newSelectedItems
|
|
3781
3775
|
});
|
|
3782
3776
|
}, [dispatch]);
|
|
3783
|
-
var setActiveIndex =
|
|
3777
|
+
var setActiveIndex = React.useCallback(function (newActiveIndex) {
|
|
3784
3778
|
dispatch({
|
|
3785
3779
|
type: FunctionSetActiveIndex,
|
|
3786
3780
|
activeIndex: newActiveIndex
|
|
3787
3781
|
});
|
|
3788
3782
|
}, [dispatch]);
|
|
3789
|
-
var reset =
|
|
3783
|
+
var reset = React.useCallback(function () {
|
|
3790
3784
|
dispatch({
|
|
3791
3785
|
type: FunctionReset
|
|
3792
3786
|
});
|