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
package/dist/downshift.cjs.js
CHANGED
|
@@ -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
|
});
|
|
@@ -933,8 +941,8 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
933
941
|
}
|
|
934
942
|
return _extends__default["default"]({
|
|
935
943
|
'aria-autocomplete': 'list',
|
|
936
|
-
'aria-activedescendant': isOpen && typeof highlightedIndex === 'number' && highlightedIndex >= 0 ? _this.getItemId(highlightedIndex) :
|
|
937
|
-
'aria-controls': isOpen ? _this.menuId :
|
|
944
|
+
'aria-activedescendant': isOpen && typeof highlightedIndex === 'number' && highlightedIndex >= 0 ? _this.getItemId(highlightedIndex) : undefined,
|
|
945
|
+
'aria-controls': isOpen ? _this.menuId : undefined,
|
|
938
946
|
'aria-labelledby': rest && rest['aria-label'] ? undefined : _this.labelId,
|
|
939
947
|
// https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
|
|
940
948
|
// revert back since autocomplete="nope" is ignored on latest Chrome and Opera
|
|
@@ -986,7 +994,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
986
994
|
_this.getMenuProps.called = true;
|
|
987
995
|
_this.getMenuProps.refKey = refKey;
|
|
988
996
|
_this.getMenuProps.suppressRefError = suppressRefError;
|
|
989
|
-
return _extends__default["default"]((_extends3 = {}, _extends3[refKey] = handleRefs(ref, _this.menuRef), _extends3.role = 'listbox', _extends3['aria-labelledby'] = props && props['aria-label'] ?
|
|
997
|
+
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);
|
|
990
998
|
};
|
|
991
999
|
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ MENU
|
|
992
1000
|
/////////////////////////////// ITEM
|
|
@@ -1191,14 +1199,13 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1191
1199
|
}
|
|
1192
1200
|
};
|
|
1193
1201
|
_proto.moveHighlightedIndex = function moveHighlightedIndex(amount, otherStateToSet) {
|
|
1194
|
-
var _this6 = this;
|
|
1195
1202
|
var itemCount = this.getItemCount();
|
|
1196
1203
|
var _this$getState8 = this.getState(),
|
|
1197
1204
|
highlightedIndex = _this$getState8.highlightedIndex;
|
|
1198
1205
|
if (itemCount > 0) {
|
|
1199
|
-
var nextHighlightedIndex =
|
|
1200
|
-
|
|
1201
|
-
});
|
|
1206
|
+
var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, amount, {
|
|
1207
|
+
length: itemCount
|
|
1208
|
+
}, this.isItemDisabled, true);
|
|
1202
1209
|
this.setHighlightedIndex(nextHighlightedIndex, otherStateToSet);
|
|
1203
1210
|
}
|
|
1204
1211
|
};
|
|
@@ -1263,7 +1270,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1263
1270
|
};
|
|
1264
1271
|
};
|
|
1265
1272
|
_proto.componentDidMount = function componentDidMount() {
|
|
1266
|
-
var
|
|
1273
|
+
var _this4 = this;
|
|
1267
1274
|
/* istanbul ignore if (react-native) */
|
|
1268
1275
|
if (process.env.NODE_ENV !== 'production' && !false && this.getMenuProps.called && !this.getMenuProps.suppressRefError) {
|
|
1269
1276
|
validateGetMenuPropsCalledCorrectly(this._menuNode, this.getMenuProps);
|
|
@@ -1277,18 +1284,18 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1277
1284
|
// this.isMouseDown is used in the blur handler on the input to determine whether the blur event should
|
|
1278
1285
|
// trigger hiding the menu.
|
|
1279
1286
|
var onMouseDown = function onMouseDown() {
|
|
1280
|
-
|
|
1287
|
+
_this4.isMouseDown = true;
|
|
1281
1288
|
};
|
|
1282
1289
|
var onMouseUp = function onMouseUp(event) {
|
|
1283
|
-
|
|
1290
|
+
_this4.isMouseDown = false;
|
|
1284
1291
|
// if the target element or the activeElement is within a downshift node
|
|
1285
1292
|
// then we don't want to reset downshift
|
|
1286
|
-
var contextWithinDownshift = targetWithinDownshift(event.target, [
|
|
1287
|
-
if (!contextWithinDownshift &&
|
|
1288
|
-
|
|
1293
|
+
var contextWithinDownshift = targetWithinDownshift(event.target, [_this4._rootNode, _this4._menuNode], _this4.props.environment);
|
|
1294
|
+
if (!contextWithinDownshift && _this4.getState().isOpen) {
|
|
1295
|
+
_this4.reset({
|
|
1289
1296
|
type: mouseUp
|
|
1290
1297
|
}, function () {
|
|
1291
|
-
return
|
|
1298
|
+
return _this4.props.onOuterClick(_this4.getStateAndHelpers());
|
|
1292
1299
|
});
|
|
1293
1300
|
}
|
|
1294
1301
|
};
|
|
@@ -1299,18 +1306,18 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1299
1306
|
// If the user taps outside of Downshift, the component should be reset,
|
|
1300
1307
|
// but not if the user is swiping
|
|
1301
1308
|
var onTouchStart = function onTouchStart() {
|
|
1302
|
-
|
|
1309
|
+
_this4.isTouchMove = false;
|
|
1303
1310
|
};
|
|
1304
1311
|
var onTouchMove = function onTouchMove() {
|
|
1305
|
-
|
|
1312
|
+
_this4.isTouchMove = true;
|
|
1306
1313
|
};
|
|
1307
1314
|
var onTouchEnd = function onTouchEnd(event) {
|
|
1308
|
-
var contextWithinDownshift = targetWithinDownshift(event.target, [
|
|
1309
|
-
if (!
|
|
1310
|
-
|
|
1315
|
+
var contextWithinDownshift = targetWithinDownshift(event.target, [_this4._rootNode, _this4._menuNode], _this4.props.environment, false);
|
|
1316
|
+
if (!_this4.isTouchMove && !contextWithinDownshift && _this4.getState().isOpen) {
|
|
1317
|
+
_this4.reset({
|
|
1311
1318
|
type: touchEnd
|
|
1312
1319
|
}, function () {
|
|
1313
|
-
return
|
|
1320
|
+
return _this4.props.onOuterClick(_this4.getStateAndHelpers());
|
|
1314
1321
|
});
|
|
1315
1322
|
}
|
|
1316
1323
|
};
|
|
@@ -1321,8 +1328,8 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1321
1328
|
environment.addEventListener('touchmove', onTouchMove);
|
|
1322
1329
|
environment.addEventListener('touchend', onTouchEnd);
|
|
1323
1330
|
this.cleanup = function () {
|
|
1324
|
-
|
|
1325
|
-
|
|
1331
|
+
_this4.internalClearTimeouts();
|
|
1332
|
+
_this4.updateStatus.cancel();
|
|
1326
1333
|
environment.removeEventListener('mousedown', onMouseDown);
|
|
1327
1334
|
environment.removeEventListener('mouseup', onMouseUp);
|
|
1328
1335
|
environment.removeEventListener('touchstart', onTouchStart);
|
|
@@ -1399,7 +1406,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1399
1406
|
} else if (isDOMElement(element)) {
|
|
1400
1407
|
// they didn't apply the root props, but we can clone
|
|
1401
1408
|
// this and apply the props ourselves
|
|
1402
|
-
return /*#__PURE__*/
|
|
1409
|
+
return /*#__PURE__*/React.cloneElement(element, this.getRootProps(getElementProps(element)));
|
|
1403
1410
|
}
|
|
1404
1411
|
|
|
1405
1412
|
/* istanbul ignore else */
|
|
@@ -1414,7 +1421,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1414
1421
|
return undefined;
|
|
1415
1422
|
};
|
|
1416
1423
|
return Downshift;
|
|
1417
|
-
}(
|
|
1424
|
+
}(React.Component);
|
|
1418
1425
|
Downshift.defaultProps = {
|
|
1419
1426
|
defaultHighlightedIndex: null,
|
|
1420
1427
|
defaultIsOpen: false,
|
|
@@ -1470,13 +1477,15 @@ process.env.NODE_ENV !== "production" ? Downshift.propTypes = {
|
|
|
1470
1477
|
itemCount: PropTypes__default["default"].number,
|
|
1471
1478
|
id: PropTypes__default["default"].string,
|
|
1472
1479
|
environment: PropTypes__default["default"].shape({
|
|
1473
|
-
addEventListener: PropTypes__default["default"].func,
|
|
1474
|
-
removeEventListener: PropTypes__default["default"].func,
|
|
1480
|
+
addEventListener: PropTypes__default["default"].func.isRequired,
|
|
1481
|
+
removeEventListener: PropTypes__default["default"].func.isRequired,
|
|
1475
1482
|
document: PropTypes__default["default"].shape({
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1483
|
+
createElement: PropTypes__default["default"].func.isRequired,
|
|
1484
|
+
getElementById: PropTypes__default["default"].func.isRequired,
|
|
1485
|
+
activeElement: PropTypes__default["default"].any.isRequired,
|
|
1486
|
+
body: PropTypes__default["default"].any.isRequired
|
|
1487
|
+
}).isRequired,
|
|
1488
|
+
Node: PropTypes__default["default"].func.isRequired
|
|
1480
1489
|
}),
|
|
1481
1490
|
suppressRefError: PropTypes__default["default"].bool,
|
|
1482
1491
|
scrollIntoView: PropTypes__default["default"].func,
|
|
@@ -1583,16 +1592,23 @@ var updateA11yStatus = debounce(function (getA11yMessage, document) {
|
|
|
1583
1592
|
}, 200);
|
|
1584
1593
|
|
|
1585
1594
|
// istanbul ignore next
|
|
1586
|
-
var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ?
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1595
|
+
var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? React.useLayoutEffect : React.useEffect;
|
|
1596
|
+
|
|
1597
|
+
// istanbul ignore next
|
|
1598
|
+
var useElementIds = 'useId' in React__default["default"] // Avoid conditional useId call
|
|
1599
|
+
? function useElementIds(_ref) {
|
|
1600
|
+
var id = _ref.id,
|
|
1590
1601
|
labelId = _ref.labelId,
|
|
1591
1602
|
menuId = _ref.menuId,
|
|
1592
1603
|
getItemId = _ref.getItemId,
|
|
1593
1604
|
toggleButtonId = _ref.toggleButtonId,
|
|
1594
1605
|
inputId = _ref.inputId;
|
|
1595
|
-
|
|
1606
|
+
// Avoid conditional useId call
|
|
1607
|
+
var reactId = "downshift-" + React__default["default"].useId();
|
|
1608
|
+
if (!id) {
|
|
1609
|
+
id = reactId;
|
|
1610
|
+
}
|
|
1611
|
+
var elementIdsRef = React.useRef({
|
|
1596
1612
|
labelId: labelId || id + "-label",
|
|
1597
1613
|
menuId: menuId || id + "-menu",
|
|
1598
1614
|
getItemId: getItemId || function (index) {
|
|
@@ -1602,7 +1618,25 @@ function useElementIds(_ref) {
|
|
|
1602
1618
|
inputId: inputId || id + "-input"
|
|
1603
1619
|
});
|
|
1604
1620
|
return elementIdsRef.current;
|
|
1605
|
-
}
|
|
1621
|
+
} : function useElementIds(_ref2) {
|
|
1622
|
+
var _ref2$id = _ref2.id,
|
|
1623
|
+
id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
|
|
1624
|
+
labelId = _ref2.labelId,
|
|
1625
|
+
menuId = _ref2.menuId,
|
|
1626
|
+
getItemId = _ref2.getItemId,
|
|
1627
|
+
toggleButtonId = _ref2.toggleButtonId,
|
|
1628
|
+
inputId = _ref2.inputId;
|
|
1629
|
+
var elementIdsRef = React.useRef({
|
|
1630
|
+
labelId: labelId || id + "-label",
|
|
1631
|
+
menuId: menuId || id + "-menu",
|
|
1632
|
+
getItemId: getItemId || function (index) {
|
|
1633
|
+
return id + "-item-" + index;
|
|
1634
|
+
},
|
|
1635
|
+
toggleButtonId: toggleButtonId || id + "-toggle-button",
|
|
1636
|
+
inputId: inputId || id + "-input"
|
|
1637
|
+
});
|
|
1638
|
+
return elementIdsRef.current;
|
|
1639
|
+
};
|
|
1606
1640
|
function getItemAndIndex(itemProp, indexProp, items, errorMessage) {
|
|
1607
1641
|
var item, index;
|
|
1608
1642
|
if (itemProp === undefined) {
|
|
@@ -1627,7 +1661,7 @@ function capitalizeString(string) {
|
|
|
1627
1661
|
return "" + string.slice(0, 1).toUpperCase() + string.slice(1);
|
|
1628
1662
|
}
|
|
1629
1663
|
function useLatestRef(val) {
|
|
1630
|
-
var ref =
|
|
1664
|
+
var ref = React.useRef(val);
|
|
1631
1665
|
// technically this is not "concurrent mode safe" because we're manipulating
|
|
1632
1666
|
// the value during render (so it's not idempotent). However, the places this
|
|
1633
1667
|
// hook is used is to support memoizing callbacks which will be called
|
|
@@ -1648,9 +1682,9 @@ function useLatestRef(val) {
|
|
|
1648
1682
|
* @returns {Array} An array with the state and an action dispatcher.
|
|
1649
1683
|
*/
|
|
1650
1684
|
function useEnhancedReducer(reducer, initialState, props) {
|
|
1651
|
-
var prevStateRef =
|
|
1652
|
-
var actionRef =
|
|
1653
|
-
var enhancedReducer =
|
|
1685
|
+
var prevStateRef = React.useRef();
|
|
1686
|
+
var actionRef = React.useRef();
|
|
1687
|
+
var enhancedReducer = React.useCallback(function (state, action) {
|
|
1654
1688
|
actionRef.current = action;
|
|
1655
1689
|
state = getState(state, action.props);
|
|
1656
1690
|
var changes = reducer(state, action);
|
|
@@ -1659,17 +1693,17 @@ function useEnhancedReducer(reducer, initialState, props) {
|
|
|
1659
1693
|
}));
|
|
1660
1694
|
return newState;
|
|
1661
1695
|
}, [reducer]);
|
|
1662
|
-
var _useReducer =
|
|
1696
|
+
var _useReducer = React.useReducer(enhancedReducer, initialState),
|
|
1663
1697
|
state = _useReducer[0],
|
|
1664
1698
|
dispatch = _useReducer[1];
|
|
1665
1699
|
var propsRef = useLatestRef(props);
|
|
1666
|
-
var dispatchWithProps =
|
|
1700
|
+
var dispatchWithProps = React.useCallback(function (action) {
|
|
1667
1701
|
return dispatch(_extends__default["default"]({
|
|
1668
1702
|
props: propsRef.current
|
|
1669
1703
|
}, action));
|
|
1670
1704
|
}, [propsRef]);
|
|
1671
1705
|
var action = actionRef.current;
|
|
1672
|
-
|
|
1706
|
+
React.useEffect(function () {
|
|
1673
1707
|
if (action && prevStateRef.current && prevStateRef.current !== state) {
|
|
1674
1708
|
callOnChangeProps(action, getState(prevStateRef.current, action.props), state);
|
|
1675
1709
|
}
|
|
@@ -1773,11 +1807,11 @@ function getHighlightedIndexOnOpen(props, state, offset) {
|
|
|
1773
1807
|
* @returns {Object} Ref containing whether mouseDown or touchMove event is happening
|
|
1774
1808
|
*/
|
|
1775
1809
|
function useMouseAndTouchTracker(isOpen, downshiftElementRefs, environment, handleBlur) {
|
|
1776
|
-
var mouseAndTouchTrackersRef =
|
|
1810
|
+
var mouseAndTouchTrackersRef = React.useRef({
|
|
1777
1811
|
isMouseDown: false,
|
|
1778
1812
|
isTouchMove: false
|
|
1779
1813
|
});
|
|
1780
|
-
|
|
1814
|
+
React.useEffect(function () {
|
|
1781
1815
|
if ((environment == null ? void 0 : environment.addEventListener) == null) {
|
|
1782
1816
|
return;
|
|
1783
1817
|
}
|
|
@@ -1841,15 +1875,15 @@ var useGetterPropsCalledChecker = function useGetterPropsCalledChecker() {
|
|
|
1841
1875
|
/* istanbul ignore next */
|
|
1842
1876
|
if (process.env.NODE_ENV !== 'production') {
|
|
1843
1877
|
useGetterPropsCalledChecker = function useGetterPropsCalledChecker() {
|
|
1844
|
-
var isInitialMountRef =
|
|
1878
|
+
var isInitialMountRef = React.useRef(true);
|
|
1845
1879
|
for (var _len = arguments.length, propKeys = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
1846
1880
|
propKeys[_key] = arguments[_key];
|
|
1847
1881
|
}
|
|
1848
|
-
var getterPropsCalledRef =
|
|
1882
|
+
var getterPropsCalledRef = React.useRef(propKeys.reduce(function (acc, propKey) {
|
|
1849
1883
|
acc[propKey] = {};
|
|
1850
1884
|
return acc;
|
|
1851
1885
|
}, {}));
|
|
1852
|
-
|
|
1886
|
+
React.useEffect(function () {
|
|
1853
1887
|
Object.keys(getterPropsCalledRef.current).forEach(function (propKey) {
|
|
1854
1888
|
var propCallInfo = getterPropsCalledRef.current[propKey];
|
|
1855
1889
|
if (isInitialMountRef.current) {
|
|
@@ -1869,7 +1903,7 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
1869
1903
|
});
|
|
1870
1904
|
isInitialMountRef.current = false;
|
|
1871
1905
|
});
|
|
1872
|
-
var setGetterPropCallInfo =
|
|
1906
|
+
var setGetterPropCallInfo = React.useCallback(function (propKey, suppressRefError, refKey, elementRef) {
|
|
1873
1907
|
getterPropsCalledRef.current[propKey] = {
|
|
1874
1908
|
suppressRefError: suppressRefError,
|
|
1875
1909
|
refKey: refKey,
|
|
@@ -1879,14 +1913,14 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
1879
1913
|
return setGetterPropCallInfo;
|
|
1880
1914
|
};
|
|
1881
1915
|
}
|
|
1882
|
-
function useA11yMessageSetter(getA11yMessage, dependencyArray,
|
|
1883
|
-
var isInitialMount =
|
|
1884
|
-
highlightedIndex =
|
|
1885
|
-
items =
|
|
1886
|
-
environment =
|
|
1887
|
-
rest = _objectWithoutPropertiesLoose__default["default"](
|
|
1916
|
+
function useA11yMessageSetter(getA11yMessage, dependencyArray, _ref3) {
|
|
1917
|
+
var isInitialMount = _ref3.isInitialMount,
|
|
1918
|
+
highlightedIndex = _ref3.highlightedIndex,
|
|
1919
|
+
items = _ref3.items,
|
|
1920
|
+
environment = _ref3.environment,
|
|
1921
|
+
rest = _objectWithoutPropertiesLoose__default["default"](_ref3, _excluded$3);
|
|
1888
1922
|
// Sets a11y status message on changes in state.
|
|
1889
|
-
|
|
1923
|
+
React.useEffect(function () {
|
|
1890
1924
|
if (isInitialMount || false) {
|
|
1891
1925
|
return;
|
|
1892
1926
|
}
|
|
@@ -1900,15 +1934,15 @@ function useA11yMessageSetter(getA11yMessage, dependencyArray, _ref2) {
|
|
|
1900
1934
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1901
1935
|
}, dependencyArray);
|
|
1902
1936
|
}
|
|
1903
|
-
function useScrollIntoView(
|
|
1904
|
-
var highlightedIndex =
|
|
1905
|
-
isOpen =
|
|
1906
|
-
itemRefs =
|
|
1907
|
-
getItemNodeFromIndex =
|
|
1908
|
-
menuElement =
|
|
1909
|
-
scrollIntoViewProp =
|
|
1937
|
+
function useScrollIntoView(_ref4) {
|
|
1938
|
+
var highlightedIndex = _ref4.highlightedIndex,
|
|
1939
|
+
isOpen = _ref4.isOpen,
|
|
1940
|
+
itemRefs = _ref4.itemRefs,
|
|
1941
|
+
getItemNodeFromIndex = _ref4.getItemNodeFromIndex,
|
|
1942
|
+
menuElement = _ref4.menuElement,
|
|
1943
|
+
scrollIntoViewProp = _ref4.scrollIntoView;
|
|
1910
1944
|
// used not to scroll on highlight by mouse.
|
|
1911
|
-
var shouldScrollRef =
|
|
1945
|
+
var shouldScrollRef = React.useRef(true);
|
|
1912
1946
|
// Scroll on highlighted item if change comes from keyboard.
|
|
1913
1947
|
useIsomorphicLayoutEffect(function () {
|
|
1914
1948
|
if (highlightedIndex < 0 || !isOpen || !Object.keys(itemRefs.current).length) {
|
|
@@ -1928,13 +1962,13 @@ function useScrollIntoView(_ref3) {
|
|
|
1928
1962
|
var useControlPropsValidator = noop;
|
|
1929
1963
|
/* istanbul ignore next */
|
|
1930
1964
|
if (process.env.NODE_ENV !== 'production') {
|
|
1931
|
-
useControlPropsValidator = function useControlPropsValidator(
|
|
1932
|
-
var isInitialMount =
|
|
1933
|
-
props =
|
|
1934
|
-
state =
|
|
1965
|
+
useControlPropsValidator = function useControlPropsValidator(_ref5) {
|
|
1966
|
+
var isInitialMount = _ref5.isInitialMount,
|
|
1967
|
+
props = _ref5.props,
|
|
1968
|
+
state = _ref5.state;
|
|
1935
1969
|
// used for checking when props are moving from controlled to uncontrolled.
|
|
1936
|
-
var prevPropsRef =
|
|
1937
|
-
|
|
1970
|
+
var prevPropsRef = React.useRef(props);
|
|
1971
|
+
React.useEffect(function () {
|
|
1938
1972
|
if (isInitialMount) {
|
|
1939
1973
|
return;
|
|
1940
1974
|
}
|
|
@@ -1970,6 +2004,47 @@ function getChangesOnSelection(props, highlightedIndex, inputValue) {
|
|
|
1970
2004
|
}));
|
|
1971
2005
|
}
|
|
1972
2006
|
|
|
2007
|
+
// Shared between all exports.
|
|
2008
|
+
var commonPropTypes = {
|
|
2009
|
+
environment: PropTypes__default["default"].shape({
|
|
2010
|
+
addEventListener: PropTypes__default["default"].func.isRequired,
|
|
2011
|
+
removeEventListener: PropTypes__default["default"].func.isRequired,
|
|
2012
|
+
document: PropTypes__default["default"].shape({
|
|
2013
|
+
createElement: PropTypes__default["default"].func.isRequired,
|
|
2014
|
+
getElementById: PropTypes__default["default"].func.isRequired,
|
|
2015
|
+
activeElement: PropTypes__default["default"].any.isRequired,
|
|
2016
|
+
body: PropTypes__default["default"].any.isRequired
|
|
2017
|
+
}).isRequired,
|
|
2018
|
+
Node: PropTypes__default["default"].func.isRequired
|
|
2019
|
+
}),
|
|
2020
|
+
itemToString: PropTypes__default["default"].func,
|
|
2021
|
+
stateReducer: PropTypes__default["default"].func
|
|
2022
|
+
};
|
|
2023
|
+
|
|
2024
|
+
// Shared between useSelect, useCombobox, Downshift.
|
|
2025
|
+
var commonDropdownPropTypes = _extends__default["default"]({}, commonPropTypes, {
|
|
2026
|
+
getA11yStatusMessage: PropTypes__default["default"].func,
|
|
2027
|
+
highlightedIndex: PropTypes__default["default"].number,
|
|
2028
|
+
defaultHighlightedIndex: PropTypes__default["default"].number,
|
|
2029
|
+
initialHighlightedIndex: PropTypes__default["default"].number,
|
|
2030
|
+
isOpen: PropTypes__default["default"].bool,
|
|
2031
|
+
defaultIsOpen: PropTypes__default["default"].bool,
|
|
2032
|
+
initialIsOpen: PropTypes__default["default"].bool,
|
|
2033
|
+
selectedItem: PropTypes__default["default"].any,
|
|
2034
|
+
initialSelectedItem: PropTypes__default["default"].any,
|
|
2035
|
+
defaultSelectedItem: PropTypes__default["default"].any,
|
|
2036
|
+
id: PropTypes__default["default"].string,
|
|
2037
|
+
labelId: PropTypes__default["default"].string,
|
|
2038
|
+
menuId: PropTypes__default["default"].string,
|
|
2039
|
+
getItemId: PropTypes__default["default"].func,
|
|
2040
|
+
toggleButtonId: PropTypes__default["default"].string,
|
|
2041
|
+
onSelectedItemChange: PropTypes__default["default"].func,
|
|
2042
|
+
onHighlightedIndexChange: PropTypes__default["default"].func,
|
|
2043
|
+
onStateChange: PropTypes__default["default"].func,
|
|
2044
|
+
onIsOpenChange: PropTypes__default["default"].func,
|
|
2045
|
+
scrollIntoView: PropTypes__default["default"].func
|
|
2046
|
+
});
|
|
2047
|
+
|
|
1973
2048
|
function downshiftCommonReducer(state, action, stateChangeTypes) {
|
|
1974
2049
|
var type = action.type,
|
|
1975
2050
|
props = action.props;
|
|
@@ -2029,56 +2104,22 @@ function downshiftCommonReducer(state, action, stateChangeTypes) {
|
|
|
2029
2104
|
/* eslint-enable complexity */
|
|
2030
2105
|
|
|
2031
2106
|
function getItemIndexByCharacterKey(_a) {
|
|
2032
|
-
var keysSoFar = _a.keysSoFar, highlightedIndex = _a.highlightedIndex, items = _a.items, itemToString = _a.itemToString,
|
|
2107
|
+
var keysSoFar = _a.keysSoFar, highlightedIndex = _a.highlightedIndex, items = _a.items, itemToString = _a.itemToString, isItemDisabled = _a.isItemDisabled;
|
|
2033
2108
|
var lowerCasedKeysSoFar = keysSoFar.toLowerCase();
|
|
2034
2109
|
for (var index = 0; index < items.length; index++) {
|
|
2035
2110
|
// if we already have a search query in progress, we also consider the current highlighted item.
|
|
2036
2111
|
var offsetIndex = (index + highlightedIndex + (keysSoFar.length < 2 ? 1 : 0)) % items.length;
|
|
2037
2112
|
var item = items[offsetIndex];
|
|
2038
2113
|
if (item !== undefined &&
|
|
2039
|
-
itemToString(item).toLowerCase().startsWith(lowerCasedKeysSoFar)
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
return offsetIndex;
|
|
2043
|
-
}
|
|
2114
|
+
itemToString(item).toLowerCase().startsWith(lowerCasedKeysSoFar) &&
|
|
2115
|
+
!isItemDisabled(item, offsetIndex)) {
|
|
2116
|
+
return offsetIndex;
|
|
2044
2117
|
}
|
|
2045
2118
|
}
|
|
2046
2119
|
return highlightedIndex;
|
|
2047
2120
|
}
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
itemToString: PropTypes__default["default"].func,
|
|
2051
|
-
getA11yStatusMessage: PropTypes__default["default"].func,
|
|
2052
|
-
getA11ySelectionMessage: PropTypes__default["default"].func,
|
|
2053
|
-
highlightedIndex: PropTypes__default["default"].number,
|
|
2054
|
-
defaultHighlightedIndex: PropTypes__default["default"].number,
|
|
2055
|
-
initialHighlightedIndex: PropTypes__default["default"].number,
|
|
2056
|
-
isOpen: PropTypes__default["default"].bool,
|
|
2057
|
-
defaultIsOpen: PropTypes__default["default"].bool,
|
|
2058
|
-
initialIsOpen: PropTypes__default["default"].bool,
|
|
2059
|
-
selectedItem: PropTypes__default["default"].any,
|
|
2060
|
-
initialSelectedItem: PropTypes__default["default"].any,
|
|
2061
|
-
defaultSelectedItem: PropTypes__default["default"].any,
|
|
2062
|
-
id: PropTypes__default["default"].string,
|
|
2063
|
-
labelId: PropTypes__default["default"].string,
|
|
2064
|
-
menuId: PropTypes__default["default"].string,
|
|
2065
|
-
getItemId: PropTypes__default["default"].func,
|
|
2066
|
-
toggleButtonId: PropTypes__default["default"].string,
|
|
2067
|
-
stateReducer: PropTypes__default["default"].func,
|
|
2068
|
-
onSelectedItemChange: PropTypes__default["default"].func,
|
|
2069
|
-
onHighlightedIndexChange: PropTypes__default["default"].func,
|
|
2070
|
-
onStateChange: PropTypes__default["default"].func,
|
|
2071
|
-
onIsOpenChange: PropTypes__default["default"].func,
|
|
2072
|
-
environment: PropTypes__default["default"].shape({
|
|
2073
|
-
addEventListener: PropTypes__default["default"].func,
|
|
2074
|
-
removeEventListener: PropTypes__default["default"].func,
|
|
2075
|
-
document: PropTypes__default["default"].shape({
|
|
2076
|
-
getElementById: PropTypes__default["default"].func,
|
|
2077
|
-
activeElement: PropTypes__default["default"].any,
|
|
2078
|
-
body: PropTypes__default["default"].any
|
|
2079
|
-
})
|
|
2080
|
-
})
|
|
2081
|
-
};
|
|
2121
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
2122
|
+
var propTypes$2 = tslib.__assign(tslib.__assign({}, commonDropdownPropTypes), { items: PropTypes__default["default"].array.isRequired, isItemDisabled: PropTypes__default["default"].func, getA11ySelectionMessage: PropTypes__default["default"].func });
|
|
2082
2123
|
/**
|
|
2083
2124
|
* Default implementation for status message. Only added when menu is open.
|
|
2084
2125
|
* Will specift if there are results in the list, and if so, how many,
|
|
@@ -2100,7 +2141,9 @@ function getA11yStatusMessage(_a) {
|
|
|
2100
2141
|
}
|
|
2101
2142
|
return '';
|
|
2102
2143
|
}
|
|
2103
|
-
var defaultProps$2 = tslib.__assign(tslib.__assign({}, defaultProps$3), { getA11yStatusMessage: getA11yStatusMessage
|
|
2144
|
+
var defaultProps$2 = tslib.__assign(tslib.__assign({}, defaultProps$3), { getA11yStatusMessage: getA11yStatusMessage, isItemDisabled: function () {
|
|
2145
|
+
return false;
|
|
2146
|
+
} });
|
|
2104
2147
|
// eslint-disable-next-line import/no-mutable-exports
|
|
2105
2148
|
var validatePropTypes$2 = noop;
|
|
2106
2149
|
/* istanbul ignore next */
|
|
@@ -2184,7 +2227,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2184
2227
|
highlightedIndex: prevHighlightedIndex,
|
|
2185
2228
|
items: props.items,
|
|
2186
2229
|
itemToString: props.itemToString,
|
|
2187
|
-
|
|
2230
|
+
isItemDisabled: props.isItemDisabled
|
|
2188
2231
|
});
|
|
2189
2232
|
changes = {
|
|
2190
2233
|
inputValue: inputValue,
|
|
@@ -2195,7 +2238,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2195
2238
|
break;
|
|
2196
2239
|
case ToggleButtonKeyDownArrowDown:
|
|
2197
2240
|
{
|
|
2198
|
-
var _highlightedIndex = state.isOpen ?
|
|
2241
|
+
var _highlightedIndex = state.isOpen ? getHighlightedIndex(state.highlightedIndex, 1, props.items, props.isItemDisabled) : altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1);
|
|
2199
2242
|
changes = {
|
|
2200
2243
|
highlightedIndex: _highlightedIndex,
|
|
2201
2244
|
isOpen: true
|
|
@@ -2206,7 +2249,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2206
2249
|
if (state.isOpen && altKey) {
|
|
2207
2250
|
changes = getChangesOnSelection(props, state.highlightedIndex, false);
|
|
2208
2251
|
} else {
|
|
2209
|
-
var _highlightedIndex2 = state.isOpen ?
|
|
2252
|
+
var _highlightedIndex2 = state.isOpen ? getHighlightedIndex(state.highlightedIndex, -1, props.items, props.isItemDisabled) : getHighlightedIndexOnOpen(props, state, -1);
|
|
2210
2253
|
changes = {
|
|
2211
2254
|
highlightedIndex: _highlightedIndex2,
|
|
2212
2255
|
isOpen: true
|
|
@@ -2220,24 +2263,24 @@ function downshiftSelectReducer(state, action) {
|
|
|
2220
2263
|
break;
|
|
2221
2264
|
case ToggleButtonKeyDownHome:
|
|
2222
2265
|
changes = {
|
|
2223
|
-
highlightedIndex:
|
|
2266
|
+
highlightedIndex: getNonDisabledIndex(0, false, props.items, props.isItemDisabled),
|
|
2224
2267
|
isOpen: true
|
|
2225
2268
|
};
|
|
2226
2269
|
break;
|
|
2227
2270
|
case ToggleButtonKeyDownEnd:
|
|
2228
2271
|
changes = {
|
|
2229
|
-
highlightedIndex:
|
|
2272
|
+
highlightedIndex: getNonDisabledIndex(props.items.length - 1, true, props.items, props.isItemDisabled),
|
|
2230
2273
|
isOpen: true
|
|
2231
2274
|
};
|
|
2232
2275
|
break;
|
|
2233
2276
|
case ToggleButtonKeyDownPageUp:
|
|
2234
2277
|
changes = {
|
|
2235
|
-
highlightedIndex:
|
|
2278
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, -10, props.items, props.isItemDisabled)
|
|
2236
2279
|
};
|
|
2237
2280
|
break;
|
|
2238
2281
|
case ToggleButtonKeyDownPageDown:
|
|
2239
2282
|
changes = {
|
|
2240
|
-
highlightedIndex:
|
|
2283
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, 10, props.items, props.isItemDisabled)
|
|
2241
2284
|
};
|
|
2242
2285
|
break;
|
|
2243
2286
|
case ToggleButtonKeyDownEscape:
|
|
@@ -2268,7 +2311,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2268
2311
|
|
|
2269
2312
|
var _excluded$2 = ["onMouseLeave", "refKey", "onKeyDown", "onBlur", "ref"],
|
|
2270
2313
|
_excluded2$2 = ["onBlur", "onClick", "onPress", "onKeyDown", "refKey", "ref"],
|
|
2271
|
-
_excluded3$1 = ["item", "index", "onMouseMove", "onClick", "onPress", "refKey", "
|
|
2314
|
+
_excluded3$1 = ["item", "index", "onMouseMove", "onClick", "onPress", "refKey", "disabled", "ref"];
|
|
2272
2315
|
useSelect.stateChangeTypes = stateChangeTypes$2;
|
|
2273
2316
|
function useSelect(userProps) {
|
|
2274
2317
|
if (userProps === void 0) {
|
|
@@ -2294,16 +2337,16 @@ function useSelect(userProps) {
|
|
|
2294
2337
|
inputValue = state.inputValue;
|
|
2295
2338
|
|
|
2296
2339
|
// Element efs.
|
|
2297
|
-
var toggleButtonRef =
|
|
2298
|
-
var menuRef =
|
|
2299
|
-
var itemRefs =
|
|
2340
|
+
var toggleButtonRef = React.useRef(null);
|
|
2341
|
+
var menuRef = React.useRef(null);
|
|
2342
|
+
var itemRefs = React.useRef({});
|
|
2300
2343
|
// used to keep the inputValue clearTimeout object between renders.
|
|
2301
|
-
var clearTimeoutRef =
|
|
2344
|
+
var clearTimeoutRef = React.useRef(null);
|
|
2302
2345
|
// prevent id re-generation between renders.
|
|
2303
2346
|
var elementIds = useElementIds(props);
|
|
2304
2347
|
// used to keep track of how many items we had on previous cycle.
|
|
2305
|
-
var previousResultCountRef =
|
|
2306
|
-
var isInitialMountRef =
|
|
2348
|
+
var previousResultCountRef = React.useRef();
|
|
2349
|
+
var isInitialMountRef = React.useRef(true);
|
|
2307
2350
|
// utility callback to get item element.
|
|
2308
2351
|
var latest = useLatestRef({
|
|
2309
2352
|
state: state,
|
|
@@ -2311,7 +2354,7 @@ function useSelect(userProps) {
|
|
|
2311
2354
|
});
|
|
2312
2355
|
|
|
2313
2356
|
// Some utils.
|
|
2314
|
-
var getItemNodeFromIndex =
|
|
2357
|
+
var getItemNodeFromIndex = React.useCallback(function (index) {
|
|
2315
2358
|
return itemRefs.current[elementIds.getItemId(index)];
|
|
2316
2359
|
}, [elementIds]);
|
|
2317
2360
|
|
|
@@ -2343,7 +2386,7 @@ function useSelect(userProps) {
|
|
|
2343
2386
|
});
|
|
2344
2387
|
|
|
2345
2388
|
// Sets cleanup for the keysSoFar callback, debounded after 500ms.
|
|
2346
|
-
|
|
2389
|
+
React.useEffect(function () {
|
|
2347
2390
|
// init the clean function here as we need access to dispatch.
|
|
2348
2391
|
clearTimeoutRef.current = debounce(function (outerDispatch) {
|
|
2349
2392
|
outerDispatch({
|
|
@@ -2359,7 +2402,7 @@ function useSelect(userProps) {
|
|
|
2359
2402
|
}, []);
|
|
2360
2403
|
|
|
2361
2404
|
// Invokes the keysSoFar callback set up above.
|
|
2362
|
-
|
|
2405
|
+
React.useEffect(function () {
|
|
2363
2406
|
if (!inputValue) {
|
|
2364
2407
|
return;
|
|
2365
2408
|
}
|
|
@@ -2370,7 +2413,7 @@ function useSelect(userProps) {
|
|
|
2370
2413
|
props: props,
|
|
2371
2414
|
state: state
|
|
2372
2415
|
});
|
|
2373
|
-
|
|
2416
|
+
React.useEffect(function () {
|
|
2374
2417
|
if (isInitialMountRef.current) {
|
|
2375
2418
|
return;
|
|
2376
2419
|
}
|
|
@@ -2384,27 +2427,26 @@ function useSelect(userProps) {
|
|
|
2384
2427
|
});
|
|
2385
2428
|
var setGetterPropCallInfo = useGetterPropsCalledChecker('getMenuProps', 'getToggleButtonProps');
|
|
2386
2429
|
// Make initial ref false.
|
|
2387
|
-
|
|
2430
|
+
React.useEffect(function () {
|
|
2388
2431
|
isInitialMountRef.current = false;
|
|
2389
2432
|
return function () {
|
|
2390
2433
|
isInitialMountRef.current = true;
|
|
2391
2434
|
};
|
|
2392
2435
|
}, []);
|
|
2393
2436
|
// Reset itemRefs on close.
|
|
2394
|
-
|
|
2437
|
+
React.useEffect(function () {
|
|
2395
2438
|
if (!isOpen) {
|
|
2396
2439
|
itemRefs.current = {};
|
|
2397
2440
|
}
|
|
2398
2441
|
}, [isOpen]);
|
|
2399
2442
|
|
|
2400
2443
|
// Event handler functions.
|
|
2401
|
-
var toggleButtonKeyDownHandlers =
|
|
2444
|
+
var toggleButtonKeyDownHandlers = React.useMemo(function () {
|
|
2402
2445
|
return {
|
|
2403
2446
|
ArrowDown: function ArrowDown(event) {
|
|
2404
2447
|
event.preventDefault();
|
|
2405
2448
|
dispatch({
|
|
2406
2449
|
type: ToggleButtonKeyDownArrowDown,
|
|
2407
|
-
getItemNodeFromIndex: getItemNodeFromIndex,
|
|
2408
2450
|
altKey: event.altKey
|
|
2409
2451
|
});
|
|
2410
2452
|
},
|
|
@@ -2412,22 +2454,19 @@ function useSelect(userProps) {
|
|
|
2412
2454
|
event.preventDefault();
|
|
2413
2455
|
dispatch({
|
|
2414
2456
|
type: ToggleButtonKeyDownArrowUp,
|
|
2415
|
-
getItemNodeFromIndex: getItemNodeFromIndex,
|
|
2416
2457
|
altKey: event.altKey
|
|
2417
2458
|
});
|
|
2418
2459
|
},
|
|
2419
2460
|
Home: function Home(event) {
|
|
2420
2461
|
event.preventDefault();
|
|
2421
2462
|
dispatch({
|
|
2422
|
-
type: ToggleButtonKeyDownHome
|
|
2423
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2463
|
+
type: ToggleButtonKeyDownHome
|
|
2424
2464
|
});
|
|
2425
2465
|
},
|
|
2426
2466
|
End: function End(event) {
|
|
2427
2467
|
event.preventDefault();
|
|
2428
2468
|
dispatch({
|
|
2429
|
-
type: ToggleButtonKeyDownEnd
|
|
2430
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2469
|
+
type: ToggleButtonKeyDownEnd
|
|
2431
2470
|
});
|
|
2432
2471
|
},
|
|
2433
2472
|
Escape: function Escape() {
|
|
@@ -2447,8 +2486,7 @@ function useSelect(userProps) {
|
|
|
2447
2486
|
if (latest.current.state.isOpen) {
|
|
2448
2487
|
event.preventDefault();
|
|
2449
2488
|
dispatch({
|
|
2450
|
-
type: ToggleButtonKeyDownPageUp
|
|
2451
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2489
|
+
type: ToggleButtonKeyDownPageUp
|
|
2452
2490
|
});
|
|
2453
2491
|
}
|
|
2454
2492
|
},
|
|
@@ -2456,8 +2494,7 @@ function useSelect(userProps) {
|
|
|
2456
2494
|
if (latest.current.state.isOpen) {
|
|
2457
2495
|
event.preventDefault();
|
|
2458
2496
|
dispatch({
|
|
2459
|
-
type: ToggleButtonKeyDownPageDown
|
|
2460
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2497
|
+
type: ToggleButtonKeyDownPageDown
|
|
2461
2498
|
});
|
|
2462
2499
|
}
|
|
2463
2500
|
},
|
|
@@ -2473,8 +2510,7 @@ function useSelect(userProps) {
|
|
|
2473
2510
|
if (currentState.inputValue) {
|
|
2474
2511
|
dispatch({
|
|
2475
2512
|
type: ToggleButtonKeyDownCharacter,
|
|
2476
|
-
key: ' '
|
|
2477
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2513
|
+
key: ' '
|
|
2478
2514
|
});
|
|
2479
2515
|
} else {
|
|
2480
2516
|
dispatch({
|
|
@@ -2483,55 +2519,55 @@ function useSelect(userProps) {
|
|
|
2483
2519
|
}
|
|
2484
2520
|
}
|
|
2485
2521
|
};
|
|
2486
|
-
}, [dispatch,
|
|
2522
|
+
}, [dispatch, latest]);
|
|
2487
2523
|
|
|
2488
2524
|
// Action functions.
|
|
2489
|
-
var toggleMenu =
|
|
2525
|
+
var toggleMenu = React.useCallback(function () {
|
|
2490
2526
|
dispatch({
|
|
2491
2527
|
type: FunctionToggleMenu$1
|
|
2492
2528
|
});
|
|
2493
2529
|
}, [dispatch]);
|
|
2494
|
-
var closeMenu =
|
|
2530
|
+
var closeMenu = React.useCallback(function () {
|
|
2495
2531
|
dispatch({
|
|
2496
2532
|
type: FunctionCloseMenu$1
|
|
2497
2533
|
});
|
|
2498
2534
|
}, [dispatch]);
|
|
2499
|
-
var openMenu =
|
|
2535
|
+
var openMenu = React.useCallback(function () {
|
|
2500
2536
|
dispatch({
|
|
2501
2537
|
type: FunctionOpenMenu$1
|
|
2502
2538
|
});
|
|
2503
2539
|
}, [dispatch]);
|
|
2504
|
-
var setHighlightedIndex =
|
|
2540
|
+
var setHighlightedIndex = React.useCallback(function (newHighlightedIndex) {
|
|
2505
2541
|
dispatch({
|
|
2506
2542
|
type: FunctionSetHighlightedIndex$1,
|
|
2507
2543
|
highlightedIndex: newHighlightedIndex
|
|
2508
2544
|
});
|
|
2509
2545
|
}, [dispatch]);
|
|
2510
|
-
var selectItem =
|
|
2546
|
+
var selectItem = React.useCallback(function (newSelectedItem) {
|
|
2511
2547
|
dispatch({
|
|
2512
2548
|
type: FunctionSelectItem$1,
|
|
2513
2549
|
selectedItem: newSelectedItem
|
|
2514
2550
|
});
|
|
2515
2551
|
}, [dispatch]);
|
|
2516
|
-
var reset =
|
|
2552
|
+
var reset = React.useCallback(function () {
|
|
2517
2553
|
dispatch({
|
|
2518
2554
|
type: FunctionReset$2
|
|
2519
2555
|
});
|
|
2520
2556
|
}, [dispatch]);
|
|
2521
|
-
var setInputValue =
|
|
2557
|
+
var setInputValue = React.useCallback(function (newInputValue) {
|
|
2522
2558
|
dispatch({
|
|
2523
2559
|
type: FunctionSetInputValue$1,
|
|
2524
2560
|
inputValue: newInputValue
|
|
2525
2561
|
});
|
|
2526
2562
|
}, [dispatch]);
|
|
2527
2563
|
// Getter functions.
|
|
2528
|
-
var getLabelProps =
|
|
2564
|
+
var getLabelProps = React.useCallback(function (labelProps) {
|
|
2529
2565
|
return _extends__default["default"]({
|
|
2530
2566
|
id: elementIds.labelId,
|
|
2531
2567
|
htmlFor: elementIds.toggleButtonId
|
|
2532
2568
|
}, labelProps);
|
|
2533
2569
|
}, [elementIds]);
|
|
2534
|
-
var getMenuProps =
|
|
2570
|
+
var getMenuProps = React.useCallback(function (_temp, _temp2) {
|
|
2535
2571
|
var _extends2;
|
|
2536
2572
|
var _ref = _temp === void 0 ? {} : _temp,
|
|
2537
2573
|
onMouseLeave = _ref.onMouseLeave,
|
|
@@ -2554,7 +2590,7 @@ function useSelect(userProps) {
|
|
|
2554
2590
|
menuRef.current = menuNode;
|
|
2555
2591
|
}), _extends2.id = elementIds.menuId, _extends2.role = 'listbox', _extends2['aria-labelledby'] = rest && rest['aria-label'] ? undefined : "" + elementIds.labelId, _extends2.onMouseLeave = callAllEventHandlers(onMouseLeave, menuHandleMouseLeave), _extends2), rest);
|
|
2556
2592
|
}, [dispatch, setGetterPropCallInfo, elementIds]);
|
|
2557
|
-
var getToggleButtonProps =
|
|
2593
|
+
var getToggleButtonProps = React.useCallback(function (_temp3, _temp4) {
|
|
2558
2594
|
var _extends3;
|
|
2559
2595
|
var _ref3 = _temp3 === void 0 ? {} : _temp3,
|
|
2560
2596
|
onBlur = _ref3.onBlur,
|
|
@@ -2588,8 +2624,7 @@ function useSelect(userProps) {
|
|
|
2588
2624
|
} else if (isAcceptedCharacterKey(key)) {
|
|
2589
2625
|
dispatch({
|
|
2590
2626
|
type: ToggleButtonKeyDownCharacter,
|
|
2591
|
-
key: key
|
|
2592
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2627
|
+
key: key
|
|
2593
2628
|
});
|
|
2594
2629
|
}
|
|
2595
2630
|
};
|
|
@@ -2605,8 +2640,8 @@ function useSelect(userProps) {
|
|
|
2605
2640
|
}
|
|
2606
2641
|
setGetterPropCallInfo('getToggleButtonProps', suppressRefError, refKey, toggleButtonRef);
|
|
2607
2642
|
return toggleProps;
|
|
2608
|
-
}, [latest, elementIds, setGetterPropCallInfo, dispatch, mouseAndTouchTrackersRef, toggleButtonKeyDownHandlers
|
|
2609
|
-
var getItemProps =
|
|
2643
|
+
}, [latest, elementIds, setGetterPropCallInfo, dispatch, mouseAndTouchTrackersRef, toggleButtonKeyDownHandlers]);
|
|
2644
|
+
var getItemProps = React.useCallback(function (_temp5) {
|
|
2610
2645
|
var _extends4;
|
|
2611
2646
|
var _ref5 = _temp5 === void 0 ? {} : _temp5,
|
|
2612
2647
|
itemProp = _ref5.item,
|
|
@@ -2616,15 +2651,19 @@ function useSelect(userProps) {
|
|
|
2616
2651
|
_ref5.onPress;
|
|
2617
2652
|
var _ref5$refKey = _ref5.refKey,
|
|
2618
2653
|
refKey = _ref5$refKey === void 0 ? 'ref' : _ref5$refKey,
|
|
2654
|
+
disabledProp = _ref5.disabled,
|
|
2619
2655
|
ref = _ref5.ref,
|
|
2620
|
-
disabled = _ref5.disabled,
|
|
2621
2656
|
rest = _objectWithoutPropertiesLoose__default["default"](_ref5, _excluded3$1);
|
|
2657
|
+
if (disabledProp !== undefined) {
|
|
2658
|
+
console.warn('Passing "disabled" as an argument to getItemProps is not supported anymore. Please use the isItemDisabled prop from useSelect.');
|
|
2659
|
+
}
|
|
2622
2660
|
var _latest$current = latest.current,
|
|
2623
2661
|
latestState = _latest$current.state,
|
|
2624
2662
|
latestProps = _latest$current.props;
|
|
2625
2663
|
var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
|
|
2626
2664
|
item = _getItemAndIndex[0],
|
|
2627
2665
|
index = _getItemAndIndex[1];
|
|
2666
|
+
var disabled = latestProps.isItemDisabled(item, index);
|
|
2628
2667
|
var itemHandleMouseMove = function itemHandleMouseMove() {
|
|
2629
2668
|
if (index === latestState.highlightedIndex) {
|
|
2630
2669
|
return;
|
|
@@ -2642,16 +2681,11 @@ function useSelect(userProps) {
|
|
|
2642
2681
|
index: index
|
|
2643
2682
|
});
|
|
2644
2683
|
};
|
|
2645
|
-
var itemProps = _extends__default["default"]((_extends4 = {
|
|
2646
|
-
disabled: disabled,
|
|
2647
|
-
role: 'option',
|
|
2648
|
-
'aria-selected': "" + (item === selectedItem),
|
|
2649
|
-
id: elementIds.getItemId(index)
|
|
2650
|
-
}, _extends4[refKey] = handleRefs(ref, function (itemNode) {
|
|
2684
|
+
var itemProps = _extends__default["default"]((_extends4 = {}, _extends4[refKey] = handleRefs(ref, function (itemNode) {
|
|
2651
2685
|
if (itemNode) {
|
|
2652
2686
|
itemRefs.current[elementIds.getItemId(index)] = itemNode;
|
|
2653
2687
|
}
|
|
2654
|
-
}), _extends4), rest);
|
|
2688
|
+
}), _extends4['aria-disabled'] = disabled, _extends4['aria-selected'] = "" + (item === latestState.selectedItem), _extends4.id = elementIds.getItemId(index), _extends4.role = 'option', _extends4), rest);
|
|
2655
2689
|
if (!disabled) {
|
|
2656
2690
|
/* istanbul ignore next (react-native) */
|
|
2657
2691
|
{
|
|
@@ -2660,7 +2694,7 @@ function useSelect(userProps) {
|
|
|
2660
2694
|
}
|
|
2661
2695
|
itemProps.onMouseMove = callAllEventHandlers(onMouseMove, itemHandleMouseMove);
|
|
2662
2696
|
return itemProps;
|
|
2663
|
-
}, [latest,
|
|
2697
|
+
}, [latest, elementIds, shouldScrollRef, dispatch]);
|
|
2664
2698
|
return {
|
|
2665
2699
|
// prop getters.
|
|
2666
2700
|
getToggleButtonProps: getToggleButtonProps,
|
|
@@ -2693,7 +2727,7 @@ var InputKeyDownPageDown = process.env.NODE_ENV !== "production" ? '__input_keyd
|
|
|
2693
2727
|
var InputKeyDownEnter = process.env.NODE_ENV !== "production" ? '__input_keydown_enter__' : 7;
|
|
2694
2728
|
var InputChange = process.env.NODE_ENV !== "production" ? '__input_change__' : 8;
|
|
2695
2729
|
var InputBlur = process.env.NODE_ENV !== "production" ? '__input_blur__' : 9;
|
|
2696
|
-
var
|
|
2730
|
+
var InputClick = process.env.NODE_ENV !== "production" ? '__input_click__' : 10;
|
|
2697
2731
|
var MenuMouseLeave = process.env.NODE_ENV !== "production" ? '__menu_mouse_leave__' : 11;
|
|
2698
2732
|
var ItemMouseMove = process.env.NODE_ENV !== "production" ? '__item_mouse_move__' : 12;
|
|
2699
2733
|
var ItemClick = process.env.NODE_ENV !== "production" ? '__item_click__' : 13;
|
|
@@ -2719,7 +2753,7 @@ var stateChangeTypes$1 = /*#__PURE__*/Object.freeze({
|
|
|
2719
2753
|
InputKeyDownEnter: InputKeyDownEnter,
|
|
2720
2754
|
InputChange: InputChange,
|
|
2721
2755
|
InputBlur: InputBlur,
|
|
2722
|
-
|
|
2756
|
+
InputClick: InputClick,
|
|
2723
2757
|
MenuMouseLeave: MenuMouseLeave,
|
|
2724
2758
|
ItemMouseMove: ItemMouseMove,
|
|
2725
2759
|
ItemClick: ItemClick,
|
|
@@ -2745,46 +2779,17 @@ function getInitialState$1(props) {
|
|
|
2745
2779
|
inputValue: inputValue
|
|
2746
2780
|
});
|
|
2747
2781
|
}
|
|
2748
|
-
var propTypes$1 = {
|
|
2782
|
+
var propTypes$1 = _extends__default["default"]({}, commonDropdownPropTypes, {
|
|
2749
2783
|
items: PropTypes__default["default"].array.isRequired,
|
|
2750
|
-
|
|
2784
|
+
isItemDisabled: PropTypes__default["default"].func,
|
|
2751
2785
|
selectedItemChanged: PropTypes__default["default"].func,
|
|
2752
|
-
getA11yStatusMessage: PropTypes__default["default"].func,
|
|
2753
2786
|
getA11ySelectionMessage: PropTypes__default["default"].func,
|
|
2754
|
-
highlightedIndex: PropTypes__default["default"].number,
|
|
2755
|
-
defaultHighlightedIndex: PropTypes__default["default"].number,
|
|
2756
|
-
initialHighlightedIndex: PropTypes__default["default"].number,
|
|
2757
|
-
isOpen: PropTypes__default["default"].bool,
|
|
2758
|
-
defaultIsOpen: PropTypes__default["default"].bool,
|
|
2759
|
-
initialIsOpen: PropTypes__default["default"].bool,
|
|
2760
|
-
selectedItem: PropTypes__default["default"].any,
|
|
2761
|
-
initialSelectedItem: PropTypes__default["default"].any,
|
|
2762
|
-
defaultSelectedItem: PropTypes__default["default"].any,
|
|
2763
2787
|
inputValue: PropTypes__default["default"].string,
|
|
2764
2788
|
defaultInputValue: PropTypes__default["default"].string,
|
|
2765
2789
|
initialInputValue: PropTypes__default["default"].string,
|
|
2766
|
-
id: PropTypes__default["default"].string,
|
|
2767
|
-
labelId: PropTypes__default["default"].string,
|
|
2768
|
-
menuId: PropTypes__default["default"].string,
|
|
2769
|
-
getItemId: PropTypes__default["default"].func,
|
|
2770
2790
|
inputId: PropTypes__default["default"].string,
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
onSelectedItemChange: PropTypes__default["default"].func,
|
|
2774
|
-
onHighlightedIndexChange: PropTypes__default["default"].func,
|
|
2775
|
-
onStateChange: PropTypes__default["default"].func,
|
|
2776
|
-
onIsOpenChange: PropTypes__default["default"].func,
|
|
2777
|
-
onInputValueChange: PropTypes__default["default"].func,
|
|
2778
|
-
environment: PropTypes__default["default"].shape({
|
|
2779
|
-
addEventListener: PropTypes__default["default"].func,
|
|
2780
|
-
removeEventListener: PropTypes__default["default"].func,
|
|
2781
|
-
document: PropTypes__default["default"].shape({
|
|
2782
|
-
getElementById: PropTypes__default["default"].func,
|
|
2783
|
-
activeElement: PropTypes__default["default"].any,
|
|
2784
|
-
body: PropTypes__default["default"].any
|
|
2785
|
-
})
|
|
2786
|
-
})
|
|
2787
|
-
};
|
|
2791
|
+
onInputValueChange: PropTypes__default["default"].func
|
|
2792
|
+
});
|
|
2788
2793
|
|
|
2789
2794
|
/**
|
|
2790
2795
|
* The useCombobox version of useControlledReducer, which also
|
|
@@ -2799,13 +2804,13 @@ var propTypes$1 = {
|
|
|
2799
2804
|
* @returns {Array} An array with the state and an action dispatcher.
|
|
2800
2805
|
*/
|
|
2801
2806
|
function useControlledReducer(reducer, initialState, props) {
|
|
2802
|
-
var previousSelectedItemRef =
|
|
2807
|
+
var previousSelectedItemRef = React.useRef();
|
|
2803
2808
|
var _useEnhancedReducer = useEnhancedReducer(reducer, initialState, props),
|
|
2804
2809
|
state = _useEnhancedReducer[0],
|
|
2805
2810
|
dispatch = _useEnhancedReducer[1];
|
|
2806
2811
|
|
|
2807
2812
|
// ToDo: if needed, make same approach as selectedItemChanged from Downshift.
|
|
2808
|
-
|
|
2813
|
+
React.useEffect(function () {
|
|
2809
2814
|
if (!isControlledProp(props, 'selectedItem')) {
|
|
2810
2815
|
return;
|
|
2811
2816
|
}
|
|
@@ -2833,7 +2838,10 @@ var defaultProps$1 = _extends__default["default"]({}, defaultProps$3, {
|
|
|
2833
2838
|
selectedItemChanged: function selectedItemChanged(prevItem, item) {
|
|
2834
2839
|
return prevItem !== item;
|
|
2835
2840
|
},
|
|
2836
|
-
getA11yStatusMessage: getA11yStatusMessage$1
|
|
2841
|
+
getA11yStatusMessage: getA11yStatusMessage$1,
|
|
2842
|
+
isItemDisabled: function isItemDisabled() {
|
|
2843
|
+
return false;
|
|
2844
|
+
}
|
|
2837
2845
|
});
|
|
2838
2846
|
|
|
2839
2847
|
/* eslint-disable complexity */
|
|
@@ -2855,11 +2863,11 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2855
2863
|
case InputKeyDownArrowDown:
|
|
2856
2864
|
if (state.isOpen) {
|
|
2857
2865
|
changes = {
|
|
2858
|
-
highlightedIndex:
|
|
2866
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, 1, props.items, props.isItemDisabled, true)
|
|
2859
2867
|
};
|
|
2860
2868
|
} else {
|
|
2861
2869
|
changes = {
|
|
2862
|
-
highlightedIndex: altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1
|
|
2870
|
+
highlightedIndex: altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1),
|
|
2863
2871
|
isOpen: props.items.length >= 0
|
|
2864
2872
|
};
|
|
2865
2873
|
}
|
|
@@ -2870,12 +2878,12 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2870
2878
|
changes = getChangesOnSelection(props, state.highlightedIndex);
|
|
2871
2879
|
} else {
|
|
2872
2880
|
changes = {
|
|
2873
|
-
highlightedIndex:
|
|
2881
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, -1, props.items, props.isItemDisabled, true)
|
|
2874
2882
|
};
|
|
2875
2883
|
}
|
|
2876
2884
|
} else {
|
|
2877
2885
|
changes = {
|
|
2878
|
-
highlightedIndex: getHighlightedIndexOnOpen(props, state, -1
|
|
2886
|
+
highlightedIndex: getHighlightedIndexOnOpen(props, state, -1),
|
|
2879
2887
|
isOpen: props.items.length >= 0
|
|
2880
2888
|
};
|
|
2881
2889
|
}
|
|
@@ -2894,22 +2902,22 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2894
2902
|
break;
|
|
2895
2903
|
case InputKeyDownPageUp:
|
|
2896
2904
|
changes = {
|
|
2897
|
-
highlightedIndex:
|
|
2905
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, -10, props.items, props.isItemDisabled, true)
|
|
2898
2906
|
};
|
|
2899
2907
|
break;
|
|
2900
2908
|
case InputKeyDownPageDown:
|
|
2901
2909
|
changes = {
|
|
2902
|
-
highlightedIndex:
|
|
2910
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, 10, props.items, props.isItemDisabled, true)
|
|
2903
2911
|
};
|
|
2904
2912
|
break;
|
|
2905
2913
|
case InputKeyDownHome:
|
|
2906
2914
|
changes = {
|
|
2907
|
-
highlightedIndex:
|
|
2915
|
+
highlightedIndex: getNonDisabledIndex(0, false, props.items, props.isItemDisabled)
|
|
2908
2916
|
};
|
|
2909
2917
|
break;
|
|
2910
2918
|
case InputKeyDownEnd:
|
|
2911
2919
|
changes = {
|
|
2912
|
-
highlightedIndex:
|
|
2920
|
+
highlightedIndex: getNonDisabledIndex(props.items.length - 1, true, props.items, props.isItemDisabled)
|
|
2913
2921
|
};
|
|
2914
2922
|
break;
|
|
2915
2923
|
case InputBlur:
|
|
@@ -2928,10 +2936,10 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2928
2936
|
inputValue: action.inputValue
|
|
2929
2937
|
};
|
|
2930
2938
|
break;
|
|
2931
|
-
case
|
|
2939
|
+
case InputClick:
|
|
2932
2940
|
changes = {
|
|
2933
|
-
isOpen:
|
|
2934
|
-
highlightedIndex: getHighlightedIndexOnOpen(props, state, 0)
|
|
2941
|
+
isOpen: !state.isOpen,
|
|
2942
|
+
highlightedIndex: state.isOpen ? -1 : getHighlightedIndexOnOpen(props, state, 0)
|
|
2935
2943
|
};
|
|
2936
2944
|
break;
|
|
2937
2945
|
case FunctionSelectItem:
|
|
@@ -2955,7 +2963,7 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2955
2963
|
var _excluded$1 = ["onMouseLeave", "refKey", "ref"],
|
|
2956
2964
|
_excluded2$1 = ["item", "index", "refKey", "ref", "onMouseMove", "onMouseDown", "onClick", "onPress", "disabled"],
|
|
2957
2965
|
_excluded3 = ["onClick", "onPress", "refKey", "ref"],
|
|
2958
|
-
_excluded4 = ["onKeyDown", "onChange", "onInput", "
|
|
2966
|
+
_excluded4 = ["onKeyDown", "onChange", "onInput", "onBlur", "onChangeText", "onClick", "refKey", "ref"];
|
|
2959
2967
|
useCombobox.stateChangeTypes = stateChangeTypes$1;
|
|
2960
2968
|
function useCombobox(userProps) {
|
|
2961
2969
|
if (userProps === void 0) {
|
|
@@ -2983,21 +2991,21 @@ function useCombobox(userProps) {
|
|
|
2983
2991
|
inputValue = state.inputValue;
|
|
2984
2992
|
|
|
2985
2993
|
// Element refs.
|
|
2986
|
-
var menuRef =
|
|
2987
|
-
var itemRefs =
|
|
2988
|
-
var inputRef =
|
|
2989
|
-
var toggleButtonRef =
|
|
2990
|
-
var isInitialMountRef =
|
|
2994
|
+
var menuRef = React.useRef(null);
|
|
2995
|
+
var itemRefs = React.useRef({});
|
|
2996
|
+
var inputRef = React.useRef(null);
|
|
2997
|
+
var toggleButtonRef = React.useRef(null);
|
|
2998
|
+
var isInitialMountRef = React.useRef(true);
|
|
2991
2999
|
// prevent id re-generation between renders.
|
|
2992
3000
|
var elementIds = useElementIds(props);
|
|
2993
3001
|
// used to keep track of how many items we had on previous cycle.
|
|
2994
|
-
var previousResultCountRef =
|
|
3002
|
+
var previousResultCountRef = React.useRef();
|
|
2995
3003
|
// utility callback to get item element.
|
|
2996
3004
|
var latest = useLatestRef({
|
|
2997
3005
|
state: state,
|
|
2998
3006
|
props: props
|
|
2999
3007
|
});
|
|
3000
|
-
var getItemNodeFromIndex =
|
|
3008
|
+
var getItemNodeFromIndex = React.useCallback(function (index) {
|
|
3001
3009
|
return itemRefs.current[elementIds.getItemId(index)];
|
|
3002
3010
|
}, [elementIds]);
|
|
3003
3011
|
|
|
@@ -3033,14 +3041,14 @@ function useCombobox(userProps) {
|
|
|
3033
3041
|
state: state
|
|
3034
3042
|
});
|
|
3035
3043
|
// Focus the input on first render if required.
|
|
3036
|
-
|
|
3044
|
+
React.useEffect(function () {
|
|
3037
3045
|
var focusOnOpen = initialIsOpen || defaultIsOpen || isOpen;
|
|
3038
3046
|
if (focusOnOpen && inputRef.current) {
|
|
3039
3047
|
inputRef.current.focus();
|
|
3040
3048
|
}
|
|
3041
3049
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
3042
3050
|
}, []);
|
|
3043
|
-
|
|
3051
|
+
React.useEffect(function () {
|
|
3044
3052
|
if (isInitialMountRef.current) {
|
|
3045
3053
|
return;
|
|
3046
3054
|
}
|
|
@@ -3055,14 +3063,14 @@ function useCombobox(userProps) {
|
|
|
3055
3063
|
});
|
|
3056
3064
|
var setGetterPropCallInfo = useGetterPropsCalledChecker('getInputProps', 'getMenuProps');
|
|
3057
3065
|
// Make initial ref false.
|
|
3058
|
-
|
|
3066
|
+
React.useEffect(function () {
|
|
3059
3067
|
isInitialMountRef.current = false;
|
|
3060
3068
|
return function () {
|
|
3061
3069
|
isInitialMountRef.current = true;
|
|
3062
3070
|
};
|
|
3063
3071
|
}, []);
|
|
3064
3072
|
// Reset itemRefs on close.
|
|
3065
|
-
|
|
3073
|
+
React.useEffect(function () {
|
|
3066
3074
|
var _environment$document;
|
|
3067
3075
|
if (!isOpen) {
|
|
3068
3076
|
itemRefs.current = {};
|
|
@@ -3073,22 +3081,20 @@ function useCombobox(userProps) {
|
|
|
3073
3081
|
}, [isOpen, environment]);
|
|
3074
3082
|
|
|
3075
3083
|
/* Event handler functions */
|
|
3076
|
-
var inputKeyDownHandlers =
|
|
3084
|
+
var inputKeyDownHandlers = React.useMemo(function () {
|
|
3077
3085
|
return {
|
|
3078
3086
|
ArrowDown: function ArrowDown(event) {
|
|
3079
3087
|
event.preventDefault();
|
|
3080
3088
|
dispatch({
|
|
3081
3089
|
type: InputKeyDownArrowDown,
|
|
3082
|
-
altKey: event.altKey
|
|
3083
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3090
|
+
altKey: event.altKey
|
|
3084
3091
|
});
|
|
3085
3092
|
},
|
|
3086
3093
|
ArrowUp: function ArrowUp(event) {
|
|
3087
3094
|
event.preventDefault();
|
|
3088
3095
|
dispatch({
|
|
3089
3096
|
type: InputKeyDownArrowUp,
|
|
3090
|
-
altKey: event.altKey
|
|
3091
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3097
|
+
altKey: event.altKey
|
|
3092
3098
|
});
|
|
3093
3099
|
},
|
|
3094
3100
|
Home: function Home(event) {
|
|
@@ -3097,8 +3103,7 @@ function useCombobox(userProps) {
|
|
|
3097
3103
|
}
|
|
3098
3104
|
event.preventDefault();
|
|
3099
3105
|
dispatch({
|
|
3100
|
-
type: InputKeyDownHome
|
|
3101
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3106
|
+
type: InputKeyDownHome
|
|
3102
3107
|
});
|
|
3103
3108
|
},
|
|
3104
3109
|
End: function End(event) {
|
|
@@ -3107,8 +3112,7 @@ function useCombobox(userProps) {
|
|
|
3107
3112
|
}
|
|
3108
3113
|
event.preventDefault();
|
|
3109
3114
|
dispatch({
|
|
3110
|
-
type: InputKeyDownEnd
|
|
3111
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3115
|
+
type: InputKeyDownEnd
|
|
3112
3116
|
});
|
|
3113
3117
|
},
|
|
3114
3118
|
Escape: function Escape(event) {
|
|
@@ -3129,16 +3133,14 @@ function useCombobox(userProps) {
|
|
|
3129
3133
|
}
|
|
3130
3134
|
event.preventDefault();
|
|
3131
3135
|
dispatch({
|
|
3132
|
-
type: InputKeyDownEnter
|
|
3133
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3136
|
+
type: InputKeyDownEnter
|
|
3134
3137
|
});
|
|
3135
3138
|
},
|
|
3136
3139
|
PageUp: function PageUp(event) {
|
|
3137
3140
|
if (latest.current.state.isOpen) {
|
|
3138
3141
|
event.preventDefault();
|
|
3139
3142
|
dispatch({
|
|
3140
|
-
type: InputKeyDownPageUp
|
|
3141
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3143
|
+
type: InputKeyDownPageUp
|
|
3142
3144
|
});
|
|
3143
3145
|
}
|
|
3144
3146
|
},
|
|
@@ -3146,22 +3148,21 @@ function useCombobox(userProps) {
|
|
|
3146
3148
|
if (latest.current.state.isOpen) {
|
|
3147
3149
|
event.preventDefault();
|
|
3148
3150
|
dispatch({
|
|
3149
|
-
type: InputKeyDownPageDown
|
|
3150
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3151
|
+
type: InputKeyDownPageDown
|
|
3151
3152
|
});
|
|
3152
3153
|
}
|
|
3153
3154
|
}
|
|
3154
3155
|
};
|
|
3155
|
-
}, [dispatch, latest
|
|
3156
|
+
}, [dispatch, latest]);
|
|
3156
3157
|
|
|
3157
3158
|
// Getter props.
|
|
3158
|
-
var getLabelProps =
|
|
3159
|
+
var getLabelProps = React.useCallback(function (labelProps) {
|
|
3159
3160
|
return _extends__default["default"]({
|
|
3160
3161
|
id: elementIds.labelId,
|
|
3161
3162
|
htmlFor: elementIds.inputId
|
|
3162
3163
|
}, labelProps);
|
|
3163
3164
|
}, [elementIds]);
|
|
3164
|
-
var getMenuProps =
|
|
3165
|
+
var getMenuProps = React.useCallback(function (_temp, _temp2) {
|
|
3165
3166
|
var _extends2;
|
|
3166
3167
|
var _ref = _temp === void 0 ? {} : _temp,
|
|
3167
3168
|
onMouseLeave = _ref.onMouseLeave,
|
|
@@ -3181,7 +3182,7 @@ function useCombobox(userProps) {
|
|
|
3181
3182
|
});
|
|
3182
3183
|
}), _extends2), rest);
|
|
3183
3184
|
}, [dispatch, setGetterPropCallInfo, elementIds]);
|
|
3184
|
-
var getItemProps =
|
|
3185
|
+
var getItemProps = React.useCallback(function (_temp3) {
|
|
3185
3186
|
var _extends3, _ref4;
|
|
3186
3187
|
var _ref3 = _temp3 === void 0 ? {} : _temp3,
|
|
3187
3188
|
itemProp = _ref3.item,
|
|
@@ -3193,13 +3194,18 @@ function useCombobox(userProps) {
|
|
|
3193
3194
|
onMouseDown = _ref3.onMouseDown,
|
|
3194
3195
|
onClick = _ref3.onClick;
|
|
3195
3196
|
_ref3.onPress;
|
|
3196
|
-
var
|
|
3197
|
+
var disabledProp = _ref3.disabled,
|
|
3197
3198
|
rest = _objectWithoutPropertiesLoose__default["default"](_ref3, _excluded2$1);
|
|
3199
|
+
if (disabledProp !== undefined) {
|
|
3200
|
+
console.warn('Passing "disabled" as an argument to getItemProps is not supported anymore. Please use the isItemDisabled prop from useCombobox.');
|
|
3201
|
+
}
|
|
3198
3202
|
var _latest$current = latest.current,
|
|
3199
3203
|
latestProps = _latest$current.props,
|
|
3200
3204
|
latestState = _latest$current.state;
|
|
3201
3205
|
var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
|
|
3206
|
+
item = _getItemAndIndex[0],
|
|
3202
3207
|
index = _getItemAndIndex[1];
|
|
3208
|
+
var disabled = latestProps.isItemDisabled(item, index);
|
|
3203
3209
|
var onSelectKey = 'onClick';
|
|
3204
3210
|
var customClickHandler = onClick;
|
|
3205
3211
|
var itemHandleMouseMove = function itemHandleMouseMove() {
|
|
@@ -3226,12 +3232,12 @@ function useCombobox(userProps) {
|
|
|
3226
3232
|
if (itemNode) {
|
|
3227
3233
|
itemRefs.current[elementIds.getItemId(index)] = itemNode;
|
|
3228
3234
|
}
|
|
3229
|
-
}), _extends3
|
|
3235
|
+
}), _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), {
|
|
3230
3236
|
onMouseMove: callAllEventHandlers(onMouseMove, itemHandleMouseMove),
|
|
3231
3237
|
onMouseDown: callAllEventHandlers(onMouseDown, itemHandleMouseDown)
|
|
3232
3238
|
}, rest);
|
|
3233
3239
|
}, [dispatch, latest, shouldScrollRef, elementIds]);
|
|
3234
|
-
var getToggleButtonProps =
|
|
3240
|
+
var getToggleButtonProps = React.useCallback(function (_temp4) {
|
|
3235
3241
|
var _extends4;
|
|
3236
3242
|
var _ref5 = _temp4 === void 0 ? {} : _temp4,
|
|
3237
3243
|
onClick = _ref5.onClick;
|
|
@@ -3252,16 +3258,16 @@ function useCombobox(userProps) {
|
|
|
3252
3258
|
onClick: callAllEventHandlers(onClick, toggleButtonHandleClick)
|
|
3253
3259
|
}), rest);
|
|
3254
3260
|
}, [dispatch, latest, elementIds]);
|
|
3255
|
-
var getInputProps =
|
|
3261
|
+
var getInputProps = React.useCallback(function (_temp5, _temp6) {
|
|
3256
3262
|
var _extends5;
|
|
3257
3263
|
var _ref6 = _temp5 === void 0 ? {} : _temp5,
|
|
3258
3264
|
onKeyDown = _ref6.onKeyDown,
|
|
3259
3265
|
onChange = _ref6.onChange,
|
|
3260
3266
|
onInput = _ref6.onInput,
|
|
3261
|
-
onFocus = _ref6.onFocus,
|
|
3262
3267
|
onBlur = _ref6.onBlur;
|
|
3263
3268
|
_ref6.onChangeText;
|
|
3264
|
-
var
|
|
3269
|
+
var onClick = _ref6.onClick,
|
|
3270
|
+
_ref6$refKey = _ref6.refKey,
|
|
3265
3271
|
refKey = _ref6$refKey === void 0 ? 'ref' : _ref6$refKey,
|
|
3266
3272
|
ref = _ref6.ref,
|
|
3267
3273
|
rest = _objectWithoutPropertiesLoose__default["default"](_ref6, _excluded4);
|
|
@@ -3291,12 +3297,10 @@ function useCombobox(userProps) {
|
|
|
3291
3297
|
});
|
|
3292
3298
|
}
|
|
3293
3299
|
};
|
|
3294
|
-
var
|
|
3295
|
-
|
|
3296
|
-
|
|
3297
|
-
|
|
3298
|
-
});
|
|
3299
|
-
}
|
|
3300
|
+
var inputHandleClick = function inputHandleClick() {
|
|
3301
|
+
dispatch({
|
|
3302
|
+
type: InputClick
|
|
3303
|
+
});
|
|
3300
3304
|
};
|
|
3301
3305
|
|
|
3302
3306
|
/* istanbul ignore next (preact) */
|
|
@@ -3304,48 +3308,48 @@ function useCombobox(userProps) {
|
|
|
3304
3308
|
var eventHandlers = {};
|
|
3305
3309
|
if (!rest.disabled) {
|
|
3306
3310
|
var _eventHandlers;
|
|
3307
|
-
eventHandlers = (_eventHandlers = {}, _eventHandlers[onChangeKey] = callAllEventHandlers(onChange, onInput, inputHandleChange), _eventHandlers.onKeyDown = callAllEventHandlers(onKeyDown, inputHandleKeyDown), _eventHandlers.onBlur = callAllEventHandlers(onBlur, inputHandleBlur), _eventHandlers.
|
|
3311
|
+
eventHandlers = (_eventHandlers = {}, _eventHandlers[onChangeKey] = callAllEventHandlers(onChange, onInput, inputHandleChange), _eventHandlers.onKeyDown = callAllEventHandlers(onKeyDown, inputHandleKeyDown), _eventHandlers.onBlur = callAllEventHandlers(onBlur, inputHandleBlur), _eventHandlers.onClick = callAllEventHandlers(onClick, inputHandleClick), _eventHandlers);
|
|
3308
3312
|
}
|
|
3309
3313
|
return _extends__default["default"]((_extends5 = {}, _extends5[refKey] = handleRefs(ref, function (inputNode) {
|
|
3310
3314
|
inputRef.current = inputNode;
|
|
3311
|
-
}), _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 :
|
|
3315
|
+
}), _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);
|
|
3312
3316
|
}, [dispatch, inputKeyDownHandlers, latest, mouseAndTouchTrackersRef, setGetterPropCallInfo, elementIds]);
|
|
3313
3317
|
|
|
3314
3318
|
// returns
|
|
3315
|
-
var toggleMenu =
|
|
3319
|
+
var toggleMenu = React.useCallback(function () {
|
|
3316
3320
|
dispatch({
|
|
3317
3321
|
type: FunctionToggleMenu
|
|
3318
3322
|
});
|
|
3319
3323
|
}, [dispatch]);
|
|
3320
|
-
var closeMenu =
|
|
3324
|
+
var closeMenu = React.useCallback(function () {
|
|
3321
3325
|
dispatch({
|
|
3322
3326
|
type: FunctionCloseMenu
|
|
3323
3327
|
});
|
|
3324
3328
|
}, [dispatch]);
|
|
3325
|
-
var openMenu =
|
|
3329
|
+
var openMenu = React.useCallback(function () {
|
|
3326
3330
|
dispatch({
|
|
3327
3331
|
type: FunctionOpenMenu
|
|
3328
3332
|
});
|
|
3329
3333
|
}, [dispatch]);
|
|
3330
|
-
var setHighlightedIndex =
|
|
3334
|
+
var setHighlightedIndex = React.useCallback(function (newHighlightedIndex) {
|
|
3331
3335
|
dispatch({
|
|
3332
3336
|
type: FunctionSetHighlightedIndex,
|
|
3333
3337
|
highlightedIndex: newHighlightedIndex
|
|
3334
3338
|
});
|
|
3335
3339
|
}, [dispatch]);
|
|
3336
|
-
var selectItem =
|
|
3340
|
+
var selectItem = React.useCallback(function (newSelectedItem) {
|
|
3337
3341
|
dispatch({
|
|
3338
3342
|
type: FunctionSelectItem,
|
|
3339
3343
|
selectedItem: newSelectedItem
|
|
3340
3344
|
});
|
|
3341
3345
|
}, [dispatch]);
|
|
3342
|
-
var setInputValue =
|
|
3346
|
+
var setInputValue = React.useCallback(function (newInputValue) {
|
|
3343
3347
|
dispatch({
|
|
3344
3348
|
type: FunctionSetInputValue,
|
|
3345
3349
|
inputValue: newInputValue
|
|
3346
3350
|
});
|
|
3347
3351
|
}, [dispatch]);
|
|
3348
|
-
var reset =
|
|
3352
|
+
var reset = React.useCallback(function () {
|
|
3349
3353
|
dispatch({
|
|
3350
3354
|
type: FunctionReset$1
|
|
3351
3355
|
});
|
|
@@ -3455,30 +3459,19 @@ function getA11yRemovalMessage(selectionParameters) {
|
|
|
3455
3459
|
itemToStringLocal = selectionParameters.itemToString;
|
|
3456
3460
|
return itemToStringLocal(removedSelectedItem) + " has been removed.";
|
|
3457
3461
|
}
|
|
3458
|
-
var propTypes = {
|
|
3462
|
+
var propTypes = _extends__default["default"]({}, commonPropTypes, {
|
|
3459
3463
|
selectedItems: PropTypes__default["default"].array,
|
|
3460
3464
|
initialSelectedItems: PropTypes__default["default"].array,
|
|
3461
3465
|
defaultSelectedItems: PropTypes__default["default"].array,
|
|
3462
|
-
itemToString: PropTypes__default["default"].func,
|
|
3463
3466
|
getA11yRemovalMessage: PropTypes__default["default"].func,
|
|
3464
|
-
stateReducer: PropTypes__default["default"].func,
|
|
3465
3467
|
activeIndex: PropTypes__default["default"].number,
|
|
3466
3468
|
initialActiveIndex: PropTypes__default["default"].number,
|
|
3467
3469
|
defaultActiveIndex: PropTypes__default["default"].number,
|
|
3468
3470
|
onActiveIndexChange: PropTypes__default["default"].func,
|
|
3469
3471
|
onSelectedItemsChange: PropTypes__default["default"].func,
|
|
3470
3472
|
keyNavigationNext: PropTypes__default["default"].string,
|
|
3471
|
-
keyNavigationPrevious: PropTypes__default["default"].string
|
|
3472
|
-
|
|
3473
|
-
addEventListener: PropTypes__default["default"].func,
|
|
3474
|
-
removeEventListener: PropTypes__default["default"].func,
|
|
3475
|
-
document: PropTypes__default["default"].shape({
|
|
3476
|
-
getElementById: PropTypes__default["default"].func,
|
|
3477
|
-
activeElement: PropTypes__default["default"].any,
|
|
3478
|
-
body: PropTypes__default["default"].any
|
|
3479
|
-
})
|
|
3480
|
-
})
|
|
3481
|
-
};
|
|
3473
|
+
keyNavigationPrevious: PropTypes__default["default"].string
|
|
3474
|
+
});
|
|
3482
3475
|
var defaultProps = {
|
|
3483
3476
|
itemToString: defaultProps$3.itemToString,
|
|
3484
3477
|
stateReducer: defaultProps$3.stateReducer,
|
|
@@ -3662,10 +3655,10 @@ function useMultipleSelection(userProps) {
|
|
|
3662
3655
|
selectedItems = state.selectedItems;
|
|
3663
3656
|
|
|
3664
3657
|
// Refs.
|
|
3665
|
-
var isInitialMountRef =
|
|
3666
|
-
var dropdownRef =
|
|
3667
|
-
var previousSelectedItemsRef =
|
|
3668
|
-
var selectedItemRefs =
|
|
3658
|
+
var isInitialMountRef = React.useRef(true);
|
|
3659
|
+
var dropdownRef = React.useRef(null);
|
|
3660
|
+
var previousSelectedItemsRef = React.useRef(selectedItems);
|
|
3661
|
+
var selectedItemRefs = React.useRef();
|
|
3669
3662
|
selectedItemRefs.current = [];
|
|
3670
3663
|
var latest = useLatestRef({
|
|
3671
3664
|
state: state,
|
|
@@ -3674,7 +3667,7 @@ function useMultipleSelection(userProps) {
|
|
|
3674
3667
|
|
|
3675
3668
|
// Effects.
|
|
3676
3669
|
/* Sets a11y status message on changes in selectedItem. */
|
|
3677
|
-
|
|
3670
|
+
React.useEffect(function () {
|
|
3678
3671
|
if (isInitialMountRef.current || false) {
|
|
3679
3672
|
return;
|
|
3680
3673
|
}
|
|
@@ -3695,7 +3688,7 @@ function useMultipleSelection(userProps) {
|
|
|
3695
3688
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
3696
3689
|
}, [selectedItems.length]);
|
|
3697
3690
|
// Sets focus on active item.
|
|
3698
|
-
|
|
3691
|
+
React.useEffect(function () {
|
|
3699
3692
|
if (isInitialMountRef.current) {
|
|
3700
3693
|
return;
|
|
3701
3694
|
}
|
|
@@ -3712,7 +3705,7 @@ function useMultipleSelection(userProps) {
|
|
|
3712
3705
|
});
|
|
3713
3706
|
var setGetterPropCallInfo = useGetterPropsCalledChecker('getDropdownProps');
|
|
3714
3707
|
// Make initial ref false.
|
|
3715
|
-
|
|
3708
|
+
React.useEffect(function () {
|
|
3716
3709
|
isInitialMountRef.current = false;
|
|
3717
3710
|
return function () {
|
|
3718
3711
|
isInitialMountRef.current = true;
|
|
@@ -3720,7 +3713,7 @@ function useMultipleSelection(userProps) {
|
|
|
3720
3713
|
}, []);
|
|
3721
3714
|
|
|
3722
3715
|
// Event handler functions.
|
|
3723
|
-
var selectedItemKeyDownHandlers =
|
|
3716
|
+
var selectedItemKeyDownHandlers = React.useMemo(function () {
|
|
3724
3717
|
var _ref;
|
|
3725
3718
|
return _ref = {}, _ref[keyNavigationPrevious] = function () {
|
|
3726
3719
|
dispatch({
|
|
@@ -3740,7 +3733,7 @@ function useMultipleSelection(userProps) {
|
|
|
3740
3733
|
});
|
|
3741
3734
|
}, _ref;
|
|
3742
3735
|
}, [dispatch, keyNavigationNext, keyNavigationPrevious]);
|
|
3743
|
-
var dropdownKeyDownHandlers =
|
|
3736
|
+
var dropdownKeyDownHandlers = React.useMemo(function () {
|
|
3744
3737
|
var _ref2;
|
|
3745
3738
|
return _ref2 = {}, _ref2[keyNavigationPrevious] = function (event) {
|
|
3746
3739
|
if (isKeyDownOperationPermitted(event)) {
|
|
@@ -3758,7 +3751,7 @@ function useMultipleSelection(userProps) {
|
|
|
3758
3751
|
}, [dispatch, keyNavigationPrevious]);
|
|
3759
3752
|
|
|
3760
3753
|
// Getter props.
|
|
3761
|
-
var getSelectedItemProps =
|
|
3754
|
+
var getSelectedItemProps = React.useCallback(function (_temp) {
|
|
3762
3755
|
var _extends2;
|
|
3763
3756
|
var _ref3 = _temp === void 0 ? {} : _temp,
|
|
3764
3757
|
_ref3$refKey = _ref3.refKey,
|
|
@@ -3791,7 +3784,7 @@ function useMultipleSelection(userProps) {
|
|
|
3791
3784
|
}
|
|
3792
3785
|
}), _extends2.tabIndex = isFocusable ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
|
|
3793
3786
|
}, [dispatch, latest, selectedItemKeyDownHandlers]);
|
|
3794
|
-
var getDropdownProps =
|
|
3787
|
+
var getDropdownProps = React.useCallback(function (_temp2, _temp3) {
|
|
3795
3788
|
var _extends3;
|
|
3796
3789
|
var _ref4 = _temp2 === void 0 ? {} : _temp2,
|
|
3797
3790
|
_ref4$refKey = _ref4.refKey,
|
|
@@ -3828,31 +3821,31 @@ function useMultipleSelection(userProps) {
|
|
|
3828
3821
|
}, [dispatch, dropdownKeyDownHandlers, setGetterPropCallInfo]);
|
|
3829
3822
|
|
|
3830
3823
|
// returns
|
|
3831
|
-
var addSelectedItem =
|
|
3824
|
+
var addSelectedItem = React.useCallback(function (selectedItem) {
|
|
3832
3825
|
dispatch({
|
|
3833
3826
|
type: FunctionAddSelectedItem,
|
|
3834
3827
|
selectedItem: selectedItem
|
|
3835
3828
|
});
|
|
3836
3829
|
}, [dispatch]);
|
|
3837
|
-
var removeSelectedItem =
|
|
3830
|
+
var removeSelectedItem = React.useCallback(function (selectedItem) {
|
|
3838
3831
|
dispatch({
|
|
3839
3832
|
type: FunctionRemoveSelectedItem,
|
|
3840
3833
|
selectedItem: selectedItem
|
|
3841
3834
|
});
|
|
3842
3835
|
}, [dispatch]);
|
|
3843
|
-
var setSelectedItems =
|
|
3836
|
+
var setSelectedItems = React.useCallback(function (newSelectedItems) {
|
|
3844
3837
|
dispatch({
|
|
3845
3838
|
type: FunctionSetSelectedItems,
|
|
3846
3839
|
selectedItems: newSelectedItems
|
|
3847
3840
|
});
|
|
3848
3841
|
}, [dispatch]);
|
|
3849
|
-
var setActiveIndex =
|
|
3842
|
+
var setActiveIndex = React.useCallback(function (newActiveIndex) {
|
|
3850
3843
|
dispatch({
|
|
3851
3844
|
type: FunctionSetActiveIndex,
|
|
3852
3845
|
activeIndex: newActiveIndex
|
|
3853
3846
|
});
|
|
3854
3847
|
}, [dispatch]);
|
|
3855
|
-
var reset =
|
|
3848
|
+
var reset = React.useCallback(function () {
|
|
3856
3849
|
dispatch({
|
|
3857
3850
|
type: FunctionReset
|
|
3858
3851
|
});
|