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
|
});
|
|
@@ -931,8 +939,8 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
931
939
|
}
|
|
932
940
|
return _extends__default["default"]({
|
|
933
941
|
'aria-autocomplete': 'list',
|
|
934
|
-
'aria-activedescendant': isOpen && typeof highlightedIndex === 'number' && highlightedIndex >= 0 ? _this.getItemId(highlightedIndex) :
|
|
935
|
-
'aria-controls': isOpen ? _this.menuId :
|
|
942
|
+
'aria-activedescendant': isOpen && typeof highlightedIndex === 'number' && highlightedIndex >= 0 ? _this.getItemId(highlightedIndex) : undefined,
|
|
943
|
+
'aria-controls': isOpen ? _this.menuId : undefined,
|
|
936
944
|
'aria-labelledby': rest && rest['aria-label'] ? undefined : _this.labelId,
|
|
937
945
|
// https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
|
|
938
946
|
// revert back since autocomplete="nope" is ignored on latest Chrome and Opera
|
|
@@ -984,7 +992,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
984
992
|
_this.getMenuProps.called = true;
|
|
985
993
|
_this.getMenuProps.refKey = refKey;
|
|
986
994
|
_this.getMenuProps.suppressRefError = suppressRefError;
|
|
987
|
-
return _extends__default["default"]((_extends3 = {}, _extends3[refKey] = handleRefs(ref, _this.menuRef), _extends3.role = 'listbox', _extends3['aria-labelledby'] = props && props['aria-label'] ?
|
|
995
|
+
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);
|
|
988
996
|
};
|
|
989
997
|
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ MENU
|
|
990
998
|
/////////////////////////////// ITEM
|
|
@@ -1189,14 +1197,13 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1189
1197
|
}
|
|
1190
1198
|
};
|
|
1191
1199
|
_proto.moveHighlightedIndex = function moveHighlightedIndex(amount, otherStateToSet) {
|
|
1192
|
-
var _this6 = this;
|
|
1193
1200
|
var itemCount = this.getItemCount();
|
|
1194
1201
|
var _this$getState8 = this.getState(),
|
|
1195
1202
|
highlightedIndex = _this$getState8.highlightedIndex;
|
|
1196
1203
|
if (itemCount > 0) {
|
|
1197
|
-
var nextHighlightedIndex =
|
|
1198
|
-
|
|
1199
|
-
});
|
|
1204
|
+
var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, amount, {
|
|
1205
|
+
length: itemCount
|
|
1206
|
+
}, this.isItemDisabled, true);
|
|
1200
1207
|
this.setHighlightedIndex(nextHighlightedIndex, otherStateToSet);
|
|
1201
1208
|
}
|
|
1202
1209
|
};
|
|
@@ -1261,7 +1268,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1261
1268
|
};
|
|
1262
1269
|
};
|
|
1263
1270
|
_proto.componentDidMount = function componentDidMount() {
|
|
1264
|
-
var
|
|
1271
|
+
var _this4 = this;
|
|
1265
1272
|
/* istanbul ignore if (react-native) */
|
|
1266
1273
|
if (process.env.NODE_ENV !== 'production' && !false && this.getMenuProps.called && !this.getMenuProps.suppressRefError) {
|
|
1267
1274
|
validateGetMenuPropsCalledCorrectly(this._menuNode, this.getMenuProps);
|
|
@@ -1275,18 +1282,18 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1275
1282
|
// this.isMouseDown is used in the blur handler on the input to determine whether the blur event should
|
|
1276
1283
|
// trigger hiding the menu.
|
|
1277
1284
|
var onMouseDown = function onMouseDown() {
|
|
1278
|
-
|
|
1285
|
+
_this4.isMouseDown = true;
|
|
1279
1286
|
};
|
|
1280
1287
|
var onMouseUp = function onMouseUp(event) {
|
|
1281
|
-
|
|
1288
|
+
_this4.isMouseDown = false;
|
|
1282
1289
|
// if the target element or the activeElement is within a downshift node
|
|
1283
1290
|
// then we don't want to reset downshift
|
|
1284
|
-
var contextWithinDownshift = targetWithinDownshift(event.target, [
|
|
1285
|
-
if (!contextWithinDownshift &&
|
|
1286
|
-
|
|
1291
|
+
var contextWithinDownshift = targetWithinDownshift(event.target, [_this4._rootNode, _this4._menuNode], _this4.props.environment);
|
|
1292
|
+
if (!contextWithinDownshift && _this4.getState().isOpen) {
|
|
1293
|
+
_this4.reset({
|
|
1287
1294
|
type: mouseUp
|
|
1288
1295
|
}, function () {
|
|
1289
|
-
return
|
|
1296
|
+
return _this4.props.onOuterClick(_this4.getStateAndHelpers());
|
|
1290
1297
|
});
|
|
1291
1298
|
}
|
|
1292
1299
|
};
|
|
@@ -1297,18 +1304,18 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1297
1304
|
// If the user taps outside of Downshift, the component should be reset,
|
|
1298
1305
|
// but not if the user is swiping
|
|
1299
1306
|
var onTouchStart = function onTouchStart() {
|
|
1300
|
-
|
|
1307
|
+
_this4.isTouchMove = false;
|
|
1301
1308
|
};
|
|
1302
1309
|
var onTouchMove = function onTouchMove() {
|
|
1303
|
-
|
|
1310
|
+
_this4.isTouchMove = true;
|
|
1304
1311
|
};
|
|
1305
1312
|
var onTouchEnd = function onTouchEnd(event) {
|
|
1306
|
-
var contextWithinDownshift = targetWithinDownshift(event.target, [
|
|
1307
|
-
if (!
|
|
1308
|
-
|
|
1313
|
+
var contextWithinDownshift = targetWithinDownshift(event.target, [_this4._rootNode, _this4._menuNode], _this4.props.environment, false);
|
|
1314
|
+
if (!_this4.isTouchMove && !contextWithinDownshift && _this4.getState().isOpen) {
|
|
1315
|
+
_this4.reset({
|
|
1309
1316
|
type: touchEnd
|
|
1310
1317
|
}, function () {
|
|
1311
|
-
return
|
|
1318
|
+
return _this4.props.onOuterClick(_this4.getStateAndHelpers());
|
|
1312
1319
|
});
|
|
1313
1320
|
}
|
|
1314
1321
|
};
|
|
@@ -1319,8 +1326,8 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1319
1326
|
environment.addEventListener('touchmove', onTouchMove);
|
|
1320
1327
|
environment.addEventListener('touchend', onTouchEnd);
|
|
1321
1328
|
this.cleanup = function () {
|
|
1322
|
-
|
|
1323
|
-
|
|
1329
|
+
_this4.internalClearTimeouts();
|
|
1330
|
+
_this4.updateStatus.cancel();
|
|
1324
1331
|
environment.removeEventListener('mousedown', onMouseDown);
|
|
1325
1332
|
environment.removeEventListener('mouseup', onMouseUp);
|
|
1326
1333
|
environment.removeEventListener('touchstart', onTouchStart);
|
|
@@ -1397,7 +1404,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1397
1404
|
} else if (isDOMElement(element)) {
|
|
1398
1405
|
// they didn't apply the root props, but we can clone
|
|
1399
1406
|
// this and apply the props ourselves
|
|
1400
|
-
return /*#__PURE__*/
|
|
1407
|
+
return /*#__PURE__*/React.cloneElement(element, this.getRootProps(getElementProps(element)));
|
|
1401
1408
|
}
|
|
1402
1409
|
|
|
1403
1410
|
/* istanbul ignore else */
|
|
@@ -1412,7 +1419,7 @@ var Downshift = /*#__PURE__*/function () {
|
|
|
1412
1419
|
return undefined;
|
|
1413
1420
|
};
|
|
1414
1421
|
return Downshift;
|
|
1415
|
-
}(
|
|
1422
|
+
}(React.Component);
|
|
1416
1423
|
Downshift.defaultProps = {
|
|
1417
1424
|
defaultHighlightedIndex: null,
|
|
1418
1425
|
defaultIsOpen: false,
|
|
@@ -1468,13 +1475,15 @@ process.env.NODE_ENV !== "production" ? Downshift.propTypes = {
|
|
|
1468
1475
|
itemCount: PropTypes__default["default"].number,
|
|
1469
1476
|
id: PropTypes__default["default"].string,
|
|
1470
1477
|
environment: PropTypes__default["default"].shape({
|
|
1471
|
-
addEventListener: PropTypes__default["default"].func,
|
|
1472
|
-
removeEventListener: PropTypes__default["default"].func,
|
|
1478
|
+
addEventListener: PropTypes__default["default"].func.isRequired,
|
|
1479
|
+
removeEventListener: PropTypes__default["default"].func.isRequired,
|
|
1473
1480
|
document: PropTypes__default["default"].shape({
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1481
|
+
createElement: PropTypes__default["default"].func.isRequired,
|
|
1482
|
+
getElementById: PropTypes__default["default"].func.isRequired,
|
|
1483
|
+
activeElement: PropTypes__default["default"].any.isRequired,
|
|
1484
|
+
body: PropTypes__default["default"].any.isRequired
|
|
1485
|
+
}).isRequired,
|
|
1486
|
+
Node: PropTypes__default["default"].func.isRequired
|
|
1478
1487
|
}),
|
|
1479
1488
|
suppressRefError: PropTypes__default["default"].bool,
|
|
1480
1489
|
scrollIntoView: PropTypes__default["default"].func,
|
|
@@ -1581,16 +1590,23 @@ var updateA11yStatus = debounce(function (getA11yMessage, document) {
|
|
|
1581
1590
|
}, 200);
|
|
1582
1591
|
|
|
1583
1592
|
// istanbul ignore next
|
|
1584
|
-
var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ?
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1593
|
+
var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? React.useLayoutEffect : React.useEffect;
|
|
1594
|
+
|
|
1595
|
+
// istanbul ignore next
|
|
1596
|
+
var useElementIds = 'useId' in React__default["default"] // Avoid conditional useId call
|
|
1597
|
+
? function useElementIds(_ref) {
|
|
1598
|
+
var id = _ref.id,
|
|
1588
1599
|
labelId = _ref.labelId,
|
|
1589
1600
|
menuId = _ref.menuId,
|
|
1590
1601
|
getItemId = _ref.getItemId,
|
|
1591
1602
|
toggleButtonId = _ref.toggleButtonId,
|
|
1592
1603
|
inputId = _ref.inputId;
|
|
1593
|
-
|
|
1604
|
+
// Avoid conditional useId call
|
|
1605
|
+
var reactId = "downshift-" + React__default["default"].useId();
|
|
1606
|
+
if (!id) {
|
|
1607
|
+
id = reactId;
|
|
1608
|
+
}
|
|
1609
|
+
var elementIdsRef = React.useRef({
|
|
1594
1610
|
labelId: labelId || id + "-label",
|
|
1595
1611
|
menuId: menuId || id + "-menu",
|
|
1596
1612
|
getItemId: getItemId || function (index) {
|
|
@@ -1600,7 +1616,25 @@ function useElementIds(_ref) {
|
|
|
1600
1616
|
inputId: inputId || id + "-input"
|
|
1601
1617
|
});
|
|
1602
1618
|
return elementIdsRef.current;
|
|
1603
|
-
}
|
|
1619
|
+
} : function useElementIds(_ref2) {
|
|
1620
|
+
var _ref2$id = _ref2.id,
|
|
1621
|
+
id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
|
|
1622
|
+
labelId = _ref2.labelId,
|
|
1623
|
+
menuId = _ref2.menuId,
|
|
1624
|
+
getItemId = _ref2.getItemId,
|
|
1625
|
+
toggleButtonId = _ref2.toggleButtonId,
|
|
1626
|
+
inputId = _ref2.inputId;
|
|
1627
|
+
var elementIdsRef = React.useRef({
|
|
1628
|
+
labelId: labelId || id + "-label",
|
|
1629
|
+
menuId: menuId || id + "-menu",
|
|
1630
|
+
getItemId: getItemId || function (index) {
|
|
1631
|
+
return id + "-item-" + index;
|
|
1632
|
+
},
|
|
1633
|
+
toggleButtonId: toggleButtonId || id + "-toggle-button",
|
|
1634
|
+
inputId: inputId || id + "-input"
|
|
1635
|
+
});
|
|
1636
|
+
return elementIdsRef.current;
|
|
1637
|
+
};
|
|
1604
1638
|
function getItemAndIndex(itemProp, indexProp, items, errorMessage) {
|
|
1605
1639
|
var item, index;
|
|
1606
1640
|
if (itemProp === undefined) {
|
|
@@ -1622,7 +1656,7 @@ function capitalizeString(string) {
|
|
|
1622
1656
|
return "" + string.slice(0, 1).toUpperCase() + string.slice(1);
|
|
1623
1657
|
}
|
|
1624
1658
|
function useLatestRef(val) {
|
|
1625
|
-
var ref =
|
|
1659
|
+
var ref = React.useRef(val);
|
|
1626
1660
|
// technically this is not "concurrent mode safe" because we're manipulating
|
|
1627
1661
|
// the value during render (so it's not idempotent). However, the places this
|
|
1628
1662
|
// hook is used is to support memoizing callbacks which will be called
|
|
@@ -1643,9 +1677,9 @@ function useLatestRef(val) {
|
|
|
1643
1677
|
* @returns {Array} An array with the state and an action dispatcher.
|
|
1644
1678
|
*/
|
|
1645
1679
|
function useEnhancedReducer(reducer, initialState, props) {
|
|
1646
|
-
var prevStateRef =
|
|
1647
|
-
var actionRef =
|
|
1648
|
-
var enhancedReducer =
|
|
1680
|
+
var prevStateRef = React.useRef();
|
|
1681
|
+
var actionRef = React.useRef();
|
|
1682
|
+
var enhancedReducer = React.useCallback(function (state, action) {
|
|
1649
1683
|
actionRef.current = action;
|
|
1650
1684
|
state = getState(state, action.props);
|
|
1651
1685
|
var changes = reducer(state, action);
|
|
@@ -1654,17 +1688,17 @@ function useEnhancedReducer(reducer, initialState, props) {
|
|
|
1654
1688
|
}));
|
|
1655
1689
|
return newState;
|
|
1656
1690
|
}, [reducer]);
|
|
1657
|
-
var _useReducer =
|
|
1691
|
+
var _useReducer = React.useReducer(enhancedReducer, initialState),
|
|
1658
1692
|
state = _useReducer[0],
|
|
1659
1693
|
dispatch = _useReducer[1];
|
|
1660
1694
|
var propsRef = useLatestRef(props);
|
|
1661
|
-
var dispatchWithProps =
|
|
1695
|
+
var dispatchWithProps = React.useCallback(function (action) {
|
|
1662
1696
|
return dispatch(_extends__default["default"]({
|
|
1663
1697
|
props: propsRef.current
|
|
1664
1698
|
}, action));
|
|
1665
1699
|
}, [propsRef]);
|
|
1666
1700
|
var action = actionRef.current;
|
|
1667
|
-
|
|
1701
|
+
React.useEffect(function () {
|
|
1668
1702
|
if (action && prevStateRef.current && prevStateRef.current !== state) {
|
|
1669
1703
|
callOnChangeProps(action, getState(prevStateRef.current, action.props), state);
|
|
1670
1704
|
}
|
|
@@ -1768,11 +1802,11 @@ function getHighlightedIndexOnOpen(props, state, offset) {
|
|
|
1768
1802
|
* @returns {Object} Ref containing whether mouseDown or touchMove event is happening
|
|
1769
1803
|
*/
|
|
1770
1804
|
function useMouseAndTouchTracker(isOpen, downshiftElementRefs, environment, handleBlur) {
|
|
1771
|
-
var mouseAndTouchTrackersRef =
|
|
1805
|
+
var mouseAndTouchTrackersRef = React.useRef({
|
|
1772
1806
|
isMouseDown: false,
|
|
1773
1807
|
isTouchMove: false
|
|
1774
1808
|
});
|
|
1775
|
-
|
|
1809
|
+
React.useEffect(function () {
|
|
1776
1810
|
if ((environment == null ? void 0 : environment.addEventListener) == null) {
|
|
1777
1811
|
return;
|
|
1778
1812
|
}
|
|
@@ -1836,15 +1870,15 @@ var useGetterPropsCalledChecker = function useGetterPropsCalledChecker() {
|
|
|
1836
1870
|
/* istanbul ignore next */
|
|
1837
1871
|
if (process.env.NODE_ENV !== 'production') {
|
|
1838
1872
|
useGetterPropsCalledChecker = function useGetterPropsCalledChecker() {
|
|
1839
|
-
var isInitialMountRef =
|
|
1873
|
+
var isInitialMountRef = React.useRef(true);
|
|
1840
1874
|
for (var _len = arguments.length, propKeys = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
1841
1875
|
propKeys[_key] = arguments[_key];
|
|
1842
1876
|
}
|
|
1843
|
-
var getterPropsCalledRef =
|
|
1877
|
+
var getterPropsCalledRef = React.useRef(propKeys.reduce(function (acc, propKey) {
|
|
1844
1878
|
acc[propKey] = {};
|
|
1845
1879
|
return acc;
|
|
1846
1880
|
}, {}));
|
|
1847
|
-
|
|
1881
|
+
React.useEffect(function () {
|
|
1848
1882
|
Object.keys(getterPropsCalledRef.current).forEach(function (propKey) {
|
|
1849
1883
|
var propCallInfo = getterPropsCalledRef.current[propKey];
|
|
1850
1884
|
if (isInitialMountRef.current) {
|
|
@@ -1864,7 +1898,7 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
1864
1898
|
});
|
|
1865
1899
|
isInitialMountRef.current = false;
|
|
1866
1900
|
});
|
|
1867
|
-
var setGetterPropCallInfo =
|
|
1901
|
+
var setGetterPropCallInfo = React.useCallback(function (propKey, suppressRefError, refKey, elementRef) {
|
|
1868
1902
|
getterPropsCalledRef.current[propKey] = {
|
|
1869
1903
|
suppressRefError: suppressRefError,
|
|
1870
1904
|
refKey: refKey,
|
|
@@ -1874,14 +1908,14 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
1874
1908
|
return setGetterPropCallInfo;
|
|
1875
1909
|
};
|
|
1876
1910
|
}
|
|
1877
|
-
function useA11yMessageSetter(getA11yMessage, dependencyArray,
|
|
1878
|
-
var isInitialMount =
|
|
1879
|
-
highlightedIndex =
|
|
1880
|
-
items =
|
|
1881
|
-
environment =
|
|
1882
|
-
rest = _objectWithoutPropertiesLoose__default["default"](
|
|
1911
|
+
function useA11yMessageSetter(getA11yMessage, dependencyArray, _ref3) {
|
|
1912
|
+
var isInitialMount = _ref3.isInitialMount,
|
|
1913
|
+
highlightedIndex = _ref3.highlightedIndex,
|
|
1914
|
+
items = _ref3.items,
|
|
1915
|
+
environment = _ref3.environment,
|
|
1916
|
+
rest = _objectWithoutPropertiesLoose__default["default"](_ref3, _excluded$3);
|
|
1883
1917
|
// Sets a11y status message on changes in state.
|
|
1884
|
-
|
|
1918
|
+
React.useEffect(function () {
|
|
1885
1919
|
if (isInitialMount || false) {
|
|
1886
1920
|
return;
|
|
1887
1921
|
}
|
|
@@ -1895,15 +1929,15 @@ function useA11yMessageSetter(getA11yMessage, dependencyArray, _ref2) {
|
|
|
1895
1929
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1896
1930
|
}, dependencyArray);
|
|
1897
1931
|
}
|
|
1898
|
-
function useScrollIntoView(
|
|
1899
|
-
var highlightedIndex =
|
|
1900
|
-
isOpen =
|
|
1901
|
-
itemRefs =
|
|
1902
|
-
getItemNodeFromIndex =
|
|
1903
|
-
menuElement =
|
|
1904
|
-
scrollIntoViewProp =
|
|
1932
|
+
function useScrollIntoView(_ref4) {
|
|
1933
|
+
var highlightedIndex = _ref4.highlightedIndex,
|
|
1934
|
+
isOpen = _ref4.isOpen,
|
|
1935
|
+
itemRefs = _ref4.itemRefs,
|
|
1936
|
+
getItemNodeFromIndex = _ref4.getItemNodeFromIndex,
|
|
1937
|
+
menuElement = _ref4.menuElement,
|
|
1938
|
+
scrollIntoViewProp = _ref4.scrollIntoView;
|
|
1905
1939
|
// used not to scroll on highlight by mouse.
|
|
1906
|
-
var shouldScrollRef =
|
|
1940
|
+
var shouldScrollRef = React.useRef(true);
|
|
1907
1941
|
// Scroll on highlighted item if change comes from keyboard.
|
|
1908
1942
|
useIsomorphicLayoutEffect(function () {
|
|
1909
1943
|
if (highlightedIndex < 0 || !isOpen || !Object.keys(itemRefs.current).length) {
|
|
@@ -1923,13 +1957,13 @@ function useScrollIntoView(_ref3) {
|
|
|
1923
1957
|
var useControlPropsValidator = noop;
|
|
1924
1958
|
/* istanbul ignore next */
|
|
1925
1959
|
if (process.env.NODE_ENV !== 'production') {
|
|
1926
|
-
useControlPropsValidator = function useControlPropsValidator(
|
|
1927
|
-
var isInitialMount =
|
|
1928
|
-
props =
|
|
1929
|
-
state =
|
|
1960
|
+
useControlPropsValidator = function useControlPropsValidator(_ref5) {
|
|
1961
|
+
var isInitialMount = _ref5.isInitialMount,
|
|
1962
|
+
props = _ref5.props,
|
|
1963
|
+
state = _ref5.state;
|
|
1930
1964
|
// used for checking when props are moving from controlled to uncontrolled.
|
|
1931
|
-
var prevPropsRef =
|
|
1932
|
-
|
|
1965
|
+
var prevPropsRef = React.useRef(props);
|
|
1966
|
+
React.useEffect(function () {
|
|
1933
1967
|
if (isInitialMount) {
|
|
1934
1968
|
return;
|
|
1935
1969
|
}
|
|
@@ -1965,6 +1999,47 @@ function getChangesOnSelection(props, highlightedIndex, inputValue) {
|
|
|
1965
1999
|
}));
|
|
1966
2000
|
}
|
|
1967
2001
|
|
|
2002
|
+
// Shared between all exports.
|
|
2003
|
+
var commonPropTypes = {
|
|
2004
|
+
environment: PropTypes__default["default"].shape({
|
|
2005
|
+
addEventListener: PropTypes__default["default"].func.isRequired,
|
|
2006
|
+
removeEventListener: PropTypes__default["default"].func.isRequired,
|
|
2007
|
+
document: PropTypes__default["default"].shape({
|
|
2008
|
+
createElement: PropTypes__default["default"].func.isRequired,
|
|
2009
|
+
getElementById: PropTypes__default["default"].func.isRequired,
|
|
2010
|
+
activeElement: PropTypes__default["default"].any.isRequired,
|
|
2011
|
+
body: PropTypes__default["default"].any.isRequired
|
|
2012
|
+
}).isRequired,
|
|
2013
|
+
Node: PropTypes__default["default"].func.isRequired
|
|
2014
|
+
}),
|
|
2015
|
+
itemToString: PropTypes__default["default"].func,
|
|
2016
|
+
stateReducer: PropTypes__default["default"].func
|
|
2017
|
+
};
|
|
2018
|
+
|
|
2019
|
+
// Shared between useSelect, useCombobox, Downshift.
|
|
2020
|
+
var commonDropdownPropTypes = _extends__default["default"]({}, commonPropTypes, {
|
|
2021
|
+
getA11yStatusMessage: PropTypes__default["default"].func,
|
|
2022
|
+
highlightedIndex: PropTypes__default["default"].number,
|
|
2023
|
+
defaultHighlightedIndex: PropTypes__default["default"].number,
|
|
2024
|
+
initialHighlightedIndex: PropTypes__default["default"].number,
|
|
2025
|
+
isOpen: PropTypes__default["default"].bool,
|
|
2026
|
+
defaultIsOpen: PropTypes__default["default"].bool,
|
|
2027
|
+
initialIsOpen: PropTypes__default["default"].bool,
|
|
2028
|
+
selectedItem: PropTypes__default["default"].any,
|
|
2029
|
+
initialSelectedItem: PropTypes__default["default"].any,
|
|
2030
|
+
defaultSelectedItem: PropTypes__default["default"].any,
|
|
2031
|
+
id: PropTypes__default["default"].string,
|
|
2032
|
+
labelId: PropTypes__default["default"].string,
|
|
2033
|
+
menuId: PropTypes__default["default"].string,
|
|
2034
|
+
getItemId: PropTypes__default["default"].func,
|
|
2035
|
+
toggleButtonId: PropTypes__default["default"].string,
|
|
2036
|
+
onSelectedItemChange: PropTypes__default["default"].func,
|
|
2037
|
+
onHighlightedIndexChange: PropTypes__default["default"].func,
|
|
2038
|
+
onStateChange: PropTypes__default["default"].func,
|
|
2039
|
+
onIsOpenChange: PropTypes__default["default"].func,
|
|
2040
|
+
scrollIntoView: PropTypes__default["default"].func
|
|
2041
|
+
});
|
|
2042
|
+
|
|
1968
2043
|
function downshiftCommonReducer(state, action, stateChangeTypes) {
|
|
1969
2044
|
var type = action.type,
|
|
1970
2045
|
props = action.props;
|
|
@@ -2024,56 +2099,22 @@ function downshiftCommonReducer(state, action, stateChangeTypes) {
|
|
|
2024
2099
|
/* eslint-enable complexity */
|
|
2025
2100
|
|
|
2026
2101
|
function getItemIndexByCharacterKey(_a) {
|
|
2027
|
-
var keysSoFar = _a.keysSoFar, highlightedIndex = _a.highlightedIndex, items = _a.items, itemToString = _a.itemToString,
|
|
2102
|
+
var keysSoFar = _a.keysSoFar, highlightedIndex = _a.highlightedIndex, items = _a.items, itemToString = _a.itemToString, isItemDisabled = _a.isItemDisabled;
|
|
2028
2103
|
var lowerCasedKeysSoFar = keysSoFar.toLowerCase();
|
|
2029
2104
|
for (var index = 0; index < items.length; index++) {
|
|
2030
2105
|
// if we already have a search query in progress, we also consider the current highlighted item.
|
|
2031
2106
|
var offsetIndex = (index + highlightedIndex + (keysSoFar.length < 2 ? 1 : 0)) % items.length;
|
|
2032
2107
|
var item = items[offsetIndex];
|
|
2033
2108
|
if (item !== undefined &&
|
|
2034
|
-
itemToString(item).toLowerCase().startsWith(lowerCasedKeysSoFar)
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
return offsetIndex;
|
|
2038
|
-
}
|
|
2109
|
+
itemToString(item).toLowerCase().startsWith(lowerCasedKeysSoFar) &&
|
|
2110
|
+
!isItemDisabled(item, offsetIndex)) {
|
|
2111
|
+
return offsetIndex;
|
|
2039
2112
|
}
|
|
2040
2113
|
}
|
|
2041
2114
|
return highlightedIndex;
|
|
2042
2115
|
}
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
itemToString: PropTypes__default["default"].func,
|
|
2046
|
-
getA11yStatusMessage: PropTypes__default["default"].func,
|
|
2047
|
-
getA11ySelectionMessage: PropTypes__default["default"].func,
|
|
2048
|
-
highlightedIndex: PropTypes__default["default"].number,
|
|
2049
|
-
defaultHighlightedIndex: PropTypes__default["default"].number,
|
|
2050
|
-
initialHighlightedIndex: PropTypes__default["default"].number,
|
|
2051
|
-
isOpen: PropTypes__default["default"].bool,
|
|
2052
|
-
defaultIsOpen: PropTypes__default["default"].bool,
|
|
2053
|
-
initialIsOpen: PropTypes__default["default"].bool,
|
|
2054
|
-
selectedItem: PropTypes__default["default"].any,
|
|
2055
|
-
initialSelectedItem: PropTypes__default["default"].any,
|
|
2056
|
-
defaultSelectedItem: PropTypes__default["default"].any,
|
|
2057
|
-
id: PropTypes__default["default"].string,
|
|
2058
|
-
labelId: PropTypes__default["default"].string,
|
|
2059
|
-
menuId: PropTypes__default["default"].string,
|
|
2060
|
-
getItemId: PropTypes__default["default"].func,
|
|
2061
|
-
toggleButtonId: PropTypes__default["default"].string,
|
|
2062
|
-
stateReducer: PropTypes__default["default"].func,
|
|
2063
|
-
onSelectedItemChange: PropTypes__default["default"].func,
|
|
2064
|
-
onHighlightedIndexChange: PropTypes__default["default"].func,
|
|
2065
|
-
onStateChange: PropTypes__default["default"].func,
|
|
2066
|
-
onIsOpenChange: PropTypes__default["default"].func,
|
|
2067
|
-
environment: PropTypes__default["default"].shape({
|
|
2068
|
-
addEventListener: PropTypes__default["default"].func,
|
|
2069
|
-
removeEventListener: PropTypes__default["default"].func,
|
|
2070
|
-
document: PropTypes__default["default"].shape({
|
|
2071
|
-
getElementById: PropTypes__default["default"].func,
|
|
2072
|
-
activeElement: PropTypes__default["default"].any,
|
|
2073
|
-
body: PropTypes__default["default"].any
|
|
2074
|
-
})
|
|
2075
|
-
})
|
|
2076
|
-
};
|
|
2116
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
2117
|
+
var propTypes$2 = tslib.__assign(tslib.__assign({}, commonDropdownPropTypes), { items: PropTypes__default["default"].array.isRequired, isItemDisabled: PropTypes__default["default"].func, getA11ySelectionMessage: PropTypes__default["default"].func });
|
|
2077
2118
|
/**
|
|
2078
2119
|
* Default implementation for status message. Only added when menu is open.
|
|
2079
2120
|
* Will specift if there are results in the list, and if so, how many,
|
|
@@ -2095,7 +2136,9 @@ function getA11yStatusMessage(_a) {
|
|
|
2095
2136
|
}
|
|
2096
2137
|
return '';
|
|
2097
2138
|
}
|
|
2098
|
-
var defaultProps$2 = tslib.__assign(tslib.__assign({}, defaultProps$3), { getA11yStatusMessage: getA11yStatusMessage
|
|
2139
|
+
var defaultProps$2 = tslib.__assign(tslib.__assign({}, defaultProps$3), { getA11yStatusMessage: getA11yStatusMessage, isItemDisabled: function () {
|
|
2140
|
+
return false;
|
|
2141
|
+
} });
|
|
2099
2142
|
// eslint-disable-next-line import/no-mutable-exports
|
|
2100
2143
|
var validatePropTypes$2 = noop;
|
|
2101
2144
|
/* istanbul ignore next */
|
|
@@ -2179,7 +2222,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2179
2222
|
highlightedIndex: prevHighlightedIndex,
|
|
2180
2223
|
items: props.items,
|
|
2181
2224
|
itemToString: props.itemToString,
|
|
2182
|
-
|
|
2225
|
+
isItemDisabled: props.isItemDisabled
|
|
2183
2226
|
});
|
|
2184
2227
|
changes = {
|
|
2185
2228
|
inputValue: inputValue,
|
|
@@ -2190,7 +2233,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2190
2233
|
break;
|
|
2191
2234
|
case ToggleButtonKeyDownArrowDown:
|
|
2192
2235
|
{
|
|
2193
|
-
var _highlightedIndex = state.isOpen ?
|
|
2236
|
+
var _highlightedIndex = state.isOpen ? getHighlightedIndex(state.highlightedIndex, 1, props.items, props.isItemDisabled) : altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1);
|
|
2194
2237
|
changes = {
|
|
2195
2238
|
highlightedIndex: _highlightedIndex,
|
|
2196
2239
|
isOpen: true
|
|
@@ -2201,7 +2244,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2201
2244
|
if (state.isOpen && altKey) {
|
|
2202
2245
|
changes = getChangesOnSelection(props, state.highlightedIndex, false);
|
|
2203
2246
|
} else {
|
|
2204
|
-
var _highlightedIndex2 = state.isOpen ?
|
|
2247
|
+
var _highlightedIndex2 = state.isOpen ? getHighlightedIndex(state.highlightedIndex, -1, props.items, props.isItemDisabled) : getHighlightedIndexOnOpen(props, state, -1);
|
|
2205
2248
|
changes = {
|
|
2206
2249
|
highlightedIndex: _highlightedIndex2,
|
|
2207
2250
|
isOpen: true
|
|
@@ -2215,24 +2258,24 @@ function downshiftSelectReducer(state, action) {
|
|
|
2215
2258
|
break;
|
|
2216
2259
|
case ToggleButtonKeyDownHome:
|
|
2217
2260
|
changes = {
|
|
2218
|
-
highlightedIndex:
|
|
2261
|
+
highlightedIndex: getNonDisabledIndex(0, false, props.items, props.isItemDisabled),
|
|
2219
2262
|
isOpen: true
|
|
2220
2263
|
};
|
|
2221
2264
|
break;
|
|
2222
2265
|
case ToggleButtonKeyDownEnd:
|
|
2223
2266
|
changes = {
|
|
2224
|
-
highlightedIndex:
|
|
2267
|
+
highlightedIndex: getNonDisabledIndex(props.items.length - 1, true, props.items, props.isItemDisabled),
|
|
2225
2268
|
isOpen: true
|
|
2226
2269
|
};
|
|
2227
2270
|
break;
|
|
2228
2271
|
case ToggleButtonKeyDownPageUp:
|
|
2229
2272
|
changes = {
|
|
2230
|
-
highlightedIndex:
|
|
2273
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, -10, props.items, props.isItemDisabled)
|
|
2231
2274
|
};
|
|
2232
2275
|
break;
|
|
2233
2276
|
case ToggleButtonKeyDownPageDown:
|
|
2234
2277
|
changes = {
|
|
2235
|
-
highlightedIndex:
|
|
2278
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, 10, props.items, props.isItemDisabled)
|
|
2236
2279
|
};
|
|
2237
2280
|
break;
|
|
2238
2281
|
case ToggleButtonKeyDownEscape:
|
|
@@ -2263,7 +2306,7 @@ function downshiftSelectReducer(state, action) {
|
|
|
2263
2306
|
|
|
2264
2307
|
var _excluded$2 = ["onMouseLeave", "refKey", "onKeyDown", "onBlur", "ref"],
|
|
2265
2308
|
_excluded2$2 = ["onBlur", "onClick", "onPress", "onKeyDown", "refKey", "ref"],
|
|
2266
|
-
_excluded3$1 = ["item", "index", "onMouseMove", "onClick", "onPress", "refKey", "
|
|
2309
|
+
_excluded3$1 = ["item", "index", "onMouseMove", "onClick", "onPress", "refKey", "disabled", "ref"];
|
|
2267
2310
|
useSelect.stateChangeTypes = stateChangeTypes$2;
|
|
2268
2311
|
function useSelect(userProps) {
|
|
2269
2312
|
if (userProps === void 0) {
|
|
@@ -2289,16 +2332,16 @@ function useSelect(userProps) {
|
|
|
2289
2332
|
inputValue = state.inputValue;
|
|
2290
2333
|
|
|
2291
2334
|
// Element efs.
|
|
2292
|
-
var toggleButtonRef =
|
|
2293
|
-
var menuRef =
|
|
2294
|
-
var itemRefs =
|
|
2335
|
+
var toggleButtonRef = React.useRef(null);
|
|
2336
|
+
var menuRef = React.useRef(null);
|
|
2337
|
+
var itemRefs = React.useRef({});
|
|
2295
2338
|
// used to keep the inputValue clearTimeout object between renders.
|
|
2296
|
-
var clearTimeoutRef =
|
|
2339
|
+
var clearTimeoutRef = React.useRef(null);
|
|
2297
2340
|
// prevent id re-generation between renders.
|
|
2298
2341
|
var elementIds = useElementIds(props);
|
|
2299
2342
|
// used to keep track of how many items we had on previous cycle.
|
|
2300
|
-
var previousResultCountRef =
|
|
2301
|
-
var isInitialMountRef =
|
|
2343
|
+
var previousResultCountRef = React.useRef();
|
|
2344
|
+
var isInitialMountRef = React.useRef(true);
|
|
2302
2345
|
// utility callback to get item element.
|
|
2303
2346
|
var latest = useLatestRef({
|
|
2304
2347
|
state: state,
|
|
@@ -2306,7 +2349,7 @@ function useSelect(userProps) {
|
|
|
2306
2349
|
});
|
|
2307
2350
|
|
|
2308
2351
|
// Some utils.
|
|
2309
|
-
var getItemNodeFromIndex =
|
|
2352
|
+
var getItemNodeFromIndex = React.useCallback(function (index) {
|
|
2310
2353
|
return itemRefs.current[elementIds.getItemId(index)];
|
|
2311
2354
|
}, [elementIds]);
|
|
2312
2355
|
|
|
@@ -2338,7 +2381,7 @@ function useSelect(userProps) {
|
|
|
2338
2381
|
});
|
|
2339
2382
|
|
|
2340
2383
|
// Sets cleanup for the keysSoFar callback, debounded after 500ms.
|
|
2341
|
-
|
|
2384
|
+
React.useEffect(function () {
|
|
2342
2385
|
// init the clean function here as we need access to dispatch.
|
|
2343
2386
|
clearTimeoutRef.current = debounce(function (outerDispatch) {
|
|
2344
2387
|
outerDispatch({
|
|
@@ -2354,7 +2397,7 @@ function useSelect(userProps) {
|
|
|
2354
2397
|
}, []);
|
|
2355
2398
|
|
|
2356
2399
|
// Invokes the keysSoFar callback set up above.
|
|
2357
|
-
|
|
2400
|
+
React.useEffect(function () {
|
|
2358
2401
|
if (!inputValue) {
|
|
2359
2402
|
return;
|
|
2360
2403
|
}
|
|
@@ -2365,7 +2408,7 @@ function useSelect(userProps) {
|
|
|
2365
2408
|
props: props,
|
|
2366
2409
|
state: state
|
|
2367
2410
|
});
|
|
2368
|
-
|
|
2411
|
+
React.useEffect(function () {
|
|
2369
2412
|
if (isInitialMountRef.current) {
|
|
2370
2413
|
return;
|
|
2371
2414
|
}
|
|
@@ -2379,27 +2422,26 @@ function useSelect(userProps) {
|
|
|
2379
2422
|
});
|
|
2380
2423
|
var setGetterPropCallInfo = useGetterPropsCalledChecker('getMenuProps', 'getToggleButtonProps');
|
|
2381
2424
|
// Make initial ref false.
|
|
2382
|
-
|
|
2425
|
+
React.useEffect(function () {
|
|
2383
2426
|
isInitialMountRef.current = false;
|
|
2384
2427
|
return function () {
|
|
2385
2428
|
isInitialMountRef.current = true;
|
|
2386
2429
|
};
|
|
2387
2430
|
}, []);
|
|
2388
2431
|
// Reset itemRefs on close.
|
|
2389
|
-
|
|
2432
|
+
React.useEffect(function () {
|
|
2390
2433
|
if (!isOpen) {
|
|
2391
2434
|
itemRefs.current = {};
|
|
2392
2435
|
}
|
|
2393
2436
|
}, [isOpen]);
|
|
2394
2437
|
|
|
2395
2438
|
// Event handler functions.
|
|
2396
|
-
var toggleButtonKeyDownHandlers =
|
|
2439
|
+
var toggleButtonKeyDownHandlers = React.useMemo(function () {
|
|
2397
2440
|
return {
|
|
2398
2441
|
ArrowDown: function ArrowDown(event) {
|
|
2399
2442
|
event.preventDefault();
|
|
2400
2443
|
dispatch({
|
|
2401
2444
|
type: ToggleButtonKeyDownArrowDown,
|
|
2402
|
-
getItemNodeFromIndex: getItemNodeFromIndex,
|
|
2403
2445
|
altKey: event.altKey
|
|
2404
2446
|
});
|
|
2405
2447
|
},
|
|
@@ -2407,22 +2449,19 @@ function useSelect(userProps) {
|
|
|
2407
2449
|
event.preventDefault();
|
|
2408
2450
|
dispatch({
|
|
2409
2451
|
type: ToggleButtonKeyDownArrowUp,
|
|
2410
|
-
getItemNodeFromIndex: getItemNodeFromIndex,
|
|
2411
2452
|
altKey: event.altKey
|
|
2412
2453
|
});
|
|
2413
2454
|
},
|
|
2414
2455
|
Home: function Home(event) {
|
|
2415
2456
|
event.preventDefault();
|
|
2416
2457
|
dispatch({
|
|
2417
|
-
type: ToggleButtonKeyDownHome
|
|
2418
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2458
|
+
type: ToggleButtonKeyDownHome
|
|
2419
2459
|
});
|
|
2420
2460
|
},
|
|
2421
2461
|
End: function End(event) {
|
|
2422
2462
|
event.preventDefault();
|
|
2423
2463
|
dispatch({
|
|
2424
|
-
type: ToggleButtonKeyDownEnd
|
|
2425
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2464
|
+
type: ToggleButtonKeyDownEnd
|
|
2426
2465
|
});
|
|
2427
2466
|
},
|
|
2428
2467
|
Escape: function Escape() {
|
|
@@ -2442,8 +2481,7 @@ function useSelect(userProps) {
|
|
|
2442
2481
|
if (latest.current.state.isOpen) {
|
|
2443
2482
|
event.preventDefault();
|
|
2444
2483
|
dispatch({
|
|
2445
|
-
type: ToggleButtonKeyDownPageUp
|
|
2446
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2484
|
+
type: ToggleButtonKeyDownPageUp
|
|
2447
2485
|
});
|
|
2448
2486
|
}
|
|
2449
2487
|
},
|
|
@@ -2451,8 +2489,7 @@ function useSelect(userProps) {
|
|
|
2451
2489
|
if (latest.current.state.isOpen) {
|
|
2452
2490
|
event.preventDefault();
|
|
2453
2491
|
dispatch({
|
|
2454
|
-
type: ToggleButtonKeyDownPageDown
|
|
2455
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2492
|
+
type: ToggleButtonKeyDownPageDown
|
|
2456
2493
|
});
|
|
2457
2494
|
}
|
|
2458
2495
|
},
|
|
@@ -2468,8 +2505,7 @@ function useSelect(userProps) {
|
|
|
2468
2505
|
if (currentState.inputValue) {
|
|
2469
2506
|
dispatch({
|
|
2470
2507
|
type: ToggleButtonKeyDownCharacter,
|
|
2471
|
-
key: ' '
|
|
2472
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
2508
|
+
key: ' '
|
|
2473
2509
|
});
|
|
2474
2510
|
} else {
|
|
2475
2511
|
dispatch({
|
|
@@ -2478,55 +2514,55 @@ function useSelect(userProps) {
|
|
|
2478
2514
|
}
|
|
2479
2515
|
}
|
|
2480
2516
|
};
|
|
2481
|
-
}, [dispatch,
|
|
2517
|
+
}, [dispatch, latest]);
|
|
2482
2518
|
|
|
2483
2519
|
// Action functions.
|
|
2484
|
-
var toggleMenu =
|
|
2520
|
+
var toggleMenu = React.useCallback(function () {
|
|
2485
2521
|
dispatch({
|
|
2486
2522
|
type: FunctionToggleMenu$1
|
|
2487
2523
|
});
|
|
2488
2524
|
}, [dispatch]);
|
|
2489
|
-
var closeMenu =
|
|
2525
|
+
var closeMenu = React.useCallback(function () {
|
|
2490
2526
|
dispatch({
|
|
2491
2527
|
type: FunctionCloseMenu$1
|
|
2492
2528
|
});
|
|
2493
2529
|
}, [dispatch]);
|
|
2494
|
-
var openMenu =
|
|
2530
|
+
var openMenu = React.useCallback(function () {
|
|
2495
2531
|
dispatch({
|
|
2496
2532
|
type: FunctionOpenMenu$1
|
|
2497
2533
|
});
|
|
2498
2534
|
}, [dispatch]);
|
|
2499
|
-
var setHighlightedIndex =
|
|
2535
|
+
var setHighlightedIndex = React.useCallback(function (newHighlightedIndex) {
|
|
2500
2536
|
dispatch({
|
|
2501
2537
|
type: FunctionSetHighlightedIndex$1,
|
|
2502
2538
|
highlightedIndex: newHighlightedIndex
|
|
2503
2539
|
});
|
|
2504
2540
|
}, [dispatch]);
|
|
2505
|
-
var selectItem =
|
|
2541
|
+
var selectItem = React.useCallback(function (newSelectedItem) {
|
|
2506
2542
|
dispatch({
|
|
2507
2543
|
type: FunctionSelectItem$1,
|
|
2508
2544
|
selectedItem: newSelectedItem
|
|
2509
2545
|
});
|
|
2510
2546
|
}, [dispatch]);
|
|
2511
|
-
var reset =
|
|
2547
|
+
var reset = React.useCallback(function () {
|
|
2512
2548
|
dispatch({
|
|
2513
2549
|
type: FunctionReset$2
|
|
2514
2550
|
});
|
|
2515
2551
|
}, [dispatch]);
|
|
2516
|
-
var setInputValue =
|
|
2552
|
+
var setInputValue = React.useCallback(function (newInputValue) {
|
|
2517
2553
|
dispatch({
|
|
2518
2554
|
type: FunctionSetInputValue$1,
|
|
2519
2555
|
inputValue: newInputValue
|
|
2520
2556
|
});
|
|
2521
2557
|
}, [dispatch]);
|
|
2522
2558
|
// Getter functions.
|
|
2523
|
-
var getLabelProps =
|
|
2559
|
+
var getLabelProps = React.useCallback(function (labelProps) {
|
|
2524
2560
|
return _extends__default["default"]({
|
|
2525
2561
|
id: elementIds.labelId,
|
|
2526
2562
|
htmlFor: elementIds.toggleButtonId
|
|
2527
2563
|
}, labelProps);
|
|
2528
2564
|
}, [elementIds]);
|
|
2529
|
-
var getMenuProps =
|
|
2565
|
+
var getMenuProps = React.useCallback(function (_temp, _temp2) {
|
|
2530
2566
|
var _extends2;
|
|
2531
2567
|
var _ref = _temp === void 0 ? {} : _temp,
|
|
2532
2568
|
onMouseLeave = _ref.onMouseLeave,
|
|
@@ -2549,7 +2585,7 @@ function useSelect(userProps) {
|
|
|
2549
2585
|
menuRef.current = menuNode;
|
|
2550
2586
|
}), _extends2.id = elementIds.menuId, _extends2.role = 'listbox', _extends2['aria-labelledby'] = rest && rest['aria-label'] ? undefined : "" + elementIds.labelId, _extends2.onMouseLeave = callAllEventHandlers(onMouseLeave, menuHandleMouseLeave), _extends2), rest);
|
|
2551
2587
|
}, [dispatch, setGetterPropCallInfo, elementIds]);
|
|
2552
|
-
var getToggleButtonProps =
|
|
2588
|
+
var getToggleButtonProps = React.useCallback(function (_temp3, _temp4) {
|
|
2553
2589
|
var _extends3;
|
|
2554
2590
|
var _ref3 = _temp3 === void 0 ? {} : _temp3,
|
|
2555
2591
|
onBlur = _ref3.onBlur;
|
|
@@ -2587,8 +2623,8 @@ function useSelect(userProps) {
|
|
|
2587
2623
|
}
|
|
2588
2624
|
setGetterPropCallInfo('getToggleButtonProps', suppressRefError, refKey, toggleButtonRef);
|
|
2589
2625
|
return toggleProps;
|
|
2590
|
-
}, [latest, elementIds, setGetterPropCallInfo, dispatch, mouseAndTouchTrackersRef, toggleButtonKeyDownHandlers
|
|
2591
|
-
var getItemProps =
|
|
2626
|
+
}, [latest, elementIds, setGetterPropCallInfo, dispatch, mouseAndTouchTrackersRef, toggleButtonKeyDownHandlers]);
|
|
2627
|
+
var getItemProps = React.useCallback(function (_temp5) {
|
|
2592
2628
|
var _extends4;
|
|
2593
2629
|
var _ref5 = _temp5 === void 0 ? {} : _temp5,
|
|
2594
2630
|
itemProp = _ref5.item,
|
|
@@ -2598,15 +2634,19 @@ function useSelect(userProps) {
|
|
|
2598
2634
|
var onPress = _ref5.onPress,
|
|
2599
2635
|
_ref5$refKey = _ref5.refKey,
|
|
2600
2636
|
refKey = _ref5$refKey === void 0 ? 'ref' : _ref5$refKey,
|
|
2637
|
+
disabledProp = _ref5.disabled,
|
|
2601
2638
|
ref = _ref5.ref,
|
|
2602
|
-
disabled = _ref5.disabled,
|
|
2603
2639
|
rest = _objectWithoutPropertiesLoose__default["default"](_ref5, _excluded3$1);
|
|
2640
|
+
if (disabledProp !== undefined) {
|
|
2641
|
+
console.warn('Passing "disabled" as an argument to getItemProps is not supported anymore. Please use the isItemDisabled prop from useSelect.');
|
|
2642
|
+
}
|
|
2604
2643
|
var _latest$current = latest.current,
|
|
2605
2644
|
latestState = _latest$current.state,
|
|
2606
2645
|
latestProps = _latest$current.props;
|
|
2607
2646
|
var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
|
|
2608
2647
|
item = _getItemAndIndex[0],
|
|
2609
2648
|
index = _getItemAndIndex[1];
|
|
2649
|
+
var disabled = latestProps.isItemDisabled(item, index);
|
|
2610
2650
|
var itemHandleMouseMove = function itemHandleMouseMove() {
|
|
2611
2651
|
if (index === latestState.highlightedIndex) {
|
|
2612
2652
|
return;
|
|
@@ -2624,16 +2664,11 @@ function useSelect(userProps) {
|
|
|
2624
2664
|
index: index
|
|
2625
2665
|
});
|
|
2626
2666
|
};
|
|
2627
|
-
var itemProps = _extends__default["default"]((_extends4 = {
|
|
2628
|
-
disabled: disabled,
|
|
2629
|
-
role: 'option',
|
|
2630
|
-
'aria-selected': "" + (item === selectedItem),
|
|
2631
|
-
id: elementIds.getItemId(index)
|
|
2632
|
-
}, _extends4[refKey] = handleRefs(ref, function (itemNode) {
|
|
2667
|
+
var itemProps = _extends__default["default"]((_extends4 = {}, _extends4[refKey] = handleRefs(ref, function (itemNode) {
|
|
2633
2668
|
if (itemNode) {
|
|
2634
2669
|
itemRefs.current[elementIds.getItemId(index)] = itemNode;
|
|
2635
2670
|
}
|
|
2636
|
-
}), _extends4), rest);
|
|
2671
|
+
}), _extends4['aria-disabled'] = disabled, _extends4['aria-selected'] = "" + (item === latestState.selectedItem), _extends4.id = elementIds.getItemId(index), _extends4.role = 'option', _extends4), rest);
|
|
2637
2672
|
if (!disabled) {
|
|
2638
2673
|
/* istanbul ignore next (react-native) */
|
|
2639
2674
|
{
|
|
@@ -2642,7 +2677,7 @@ function useSelect(userProps) {
|
|
|
2642
2677
|
}
|
|
2643
2678
|
itemProps.onMouseMove = callAllEventHandlers(onMouseMove, itemHandleMouseMove);
|
|
2644
2679
|
return itemProps;
|
|
2645
|
-
}, [latest,
|
|
2680
|
+
}, [latest, elementIds, shouldScrollRef, dispatch]);
|
|
2646
2681
|
return {
|
|
2647
2682
|
// prop getters.
|
|
2648
2683
|
getToggleButtonProps: getToggleButtonProps,
|
|
@@ -2675,7 +2710,7 @@ var InputKeyDownPageDown = process.env.NODE_ENV !== "production" ? '__input_keyd
|
|
|
2675
2710
|
var InputKeyDownEnter = process.env.NODE_ENV !== "production" ? '__input_keydown_enter__' : 7;
|
|
2676
2711
|
var InputChange = process.env.NODE_ENV !== "production" ? '__input_change__' : 8;
|
|
2677
2712
|
var InputBlur = process.env.NODE_ENV !== "production" ? '__input_blur__' : 9;
|
|
2678
|
-
var
|
|
2713
|
+
var InputClick = process.env.NODE_ENV !== "production" ? '__input_click__' : 10;
|
|
2679
2714
|
var MenuMouseLeave = process.env.NODE_ENV !== "production" ? '__menu_mouse_leave__' : 11;
|
|
2680
2715
|
var ItemMouseMove = process.env.NODE_ENV !== "production" ? '__item_mouse_move__' : 12;
|
|
2681
2716
|
var ItemClick = process.env.NODE_ENV !== "production" ? '__item_click__' : 13;
|
|
@@ -2701,7 +2736,7 @@ var stateChangeTypes$1 = /*#__PURE__*/Object.freeze({
|
|
|
2701
2736
|
InputKeyDownEnter: InputKeyDownEnter,
|
|
2702
2737
|
InputChange: InputChange,
|
|
2703
2738
|
InputBlur: InputBlur,
|
|
2704
|
-
|
|
2739
|
+
InputClick: InputClick,
|
|
2705
2740
|
MenuMouseLeave: MenuMouseLeave,
|
|
2706
2741
|
ItemMouseMove: ItemMouseMove,
|
|
2707
2742
|
ItemClick: ItemClick,
|
|
@@ -2727,46 +2762,17 @@ function getInitialState$1(props) {
|
|
|
2727
2762
|
inputValue: inputValue
|
|
2728
2763
|
});
|
|
2729
2764
|
}
|
|
2730
|
-
var propTypes$1 = {
|
|
2765
|
+
var propTypes$1 = _extends__default["default"]({}, commonDropdownPropTypes, {
|
|
2731
2766
|
items: PropTypes__default["default"].array.isRequired,
|
|
2732
|
-
|
|
2767
|
+
isItemDisabled: PropTypes__default["default"].func,
|
|
2733
2768
|
selectedItemChanged: PropTypes__default["default"].func,
|
|
2734
|
-
getA11yStatusMessage: PropTypes__default["default"].func,
|
|
2735
2769
|
getA11ySelectionMessage: PropTypes__default["default"].func,
|
|
2736
|
-
highlightedIndex: PropTypes__default["default"].number,
|
|
2737
|
-
defaultHighlightedIndex: PropTypes__default["default"].number,
|
|
2738
|
-
initialHighlightedIndex: PropTypes__default["default"].number,
|
|
2739
|
-
isOpen: PropTypes__default["default"].bool,
|
|
2740
|
-
defaultIsOpen: PropTypes__default["default"].bool,
|
|
2741
|
-
initialIsOpen: PropTypes__default["default"].bool,
|
|
2742
|
-
selectedItem: PropTypes__default["default"].any,
|
|
2743
|
-
initialSelectedItem: PropTypes__default["default"].any,
|
|
2744
|
-
defaultSelectedItem: PropTypes__default["default"].any,
|
|
2745
2770
|
inputValue: PropTypes__default["default"].string,
|
|
2746
2771
|
defaultInputValue: PropTypes__default["default"].string,
|
|
2747
2772
|
initialInputValue: PropTypes__default["default"].string,
|
|
2748
|
-
id: PropTypes__default["default"].string,
|
|
2749
|
-
labelId: PropTypes__default["default"].string,
|
|
2750
|
-
menuId: PropTypes__default["default"].string,
|
|
2751
|
-
getItemId: PropTypes__default["default"].func,
|
|
2752
2773
|
inputId: PropTypes__default["default"].string,
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
onSelectedItemChange: PropTypes__default["default"].func,
|
|
2756
|
-
onHighlightedIndexChange: PropTypes__default["default"].func,
|
|
2757
|
-
onStateChange: PropTypes__default["default"].func,
|
|
2758
|
-
onIsOpenChange: PropTypes__default["default"].func,
|
|
2759
|
-
onInputValueChange: PropTypes__default["default"].func,
|
|
2760
|
-
environment: PropTypes__default["default"].shape({
|
|
2761
|
-
addEventListener: PropTypes__default["default"].func,
|
|
2762
|
-
removeEventListener: PropTypes__default["default"].func,
|
|
2763
|
-
document: PropTypes__default["default"].shape({
|
|
2764
|
-
getElementById: PropTypes__default["default"].func,
|
|
2765
|
-
activeElement: PropTypes__default["default"].any,
|
|
2766
|
-
body: PropTypes__default["default"].any
|
|
2767
|
-
})
|
|
2768
|
-
})
|
|
2769
|
-
};
|
|
2774
|
+
onInputValueChange: PropTypes__default["default"].func
|
|
2775
|
+
});
|
|
2770
2776
|
|
|
2771
2777
|
/**
|
|
2772
2778
|
* The useCombobox version of useControlledReducer, which also
|
|
@@ -2781,13 +2787,13 @@ var propTypes$1 = {
|
|
|
2781
2787
|
* @returns {Array} An array with the state and an action dispatcher.
|
|
2782
2788
|
*/
|
|
2783
2789
|
function useControlledReducer(reducer, initialState, props) {
|
|
2784
|
-
var previousSelectedItemRef =
|
|
2790
|
+
var previousSelectedItemRef = React.useRef();
|
|
2785
2791
|
var _useEnhancedReducer = useEnhancedReducer(reducer, initialState, props),
|
|
2786
2792
|
state = _useEnhancedReducer[0],
|
|
2787
2793
|
dispatch = _useEnhancedReducer[1];
|
|
2788
2794
|
|
|
2789
2795
|
// ToDo: if needed, make same approach as selectedItemChanged from Downshift.
|
|
2790
|
-
|
|
2796
|
+
React.useEffect(function () {
|
|
2791
2797
|
if (!isControlledProp(props, 'selectedItem')) {
|
|
2792
2798
|
return;
|
|
2793
2799
|
}
|
|
@@ -2815,7 +2821,10 @@ var defaultProps$1 = _extends__default["default"]({}, defaultProps$3, {
|
|
|
2815
2821
|
selectedItemChanged: function selectedItemChanged(prevItem, item) {
|
|
2816
2822
|
return prevItem !== item;
|
|
2817
2823
|
},
|
|
2818
|
-
getA11yStatusMessage: getA11yStatusMessage$1
|
|
2824
|
+
getA11yStatusMessage: getA11yStatusMessage$1,
|
|
2825
|
+
isItemDisabled: function isItemDisabled() {
|
|
2826
|
+
return false;
|
|
2827
|
+
}
|
|
2819
2828
|
});
|
|
2820
2829
|
|
|
2821
2830
|
/* eslint-disable complexity */
|
|
@@ -2837,11 +2846,11 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2837
2846
|
case InputKeyDownArrowDown:
|
|
2838
2847
|
if (state.isOpen) {
|
|
2839
2848
|
changes = {
|
|
2840
|
-
highlightedIndex:
|
|
2849
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, 1, props.items, props.isItemDisabled, true)
|
|
2841
2850
|
};
|
|
2842
2851
|
} else {
|
|
2843
2852
|
changes = {
|
|
2844
|
-
highlightedIndex: altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1
|
|
2853
|
+
highlightedIndex: altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1),
|
|
2845
2854
|
isOpen: props.items.length >= 0
|
|
2846
2855
|
};
|
|
2847
2856
|
}
|
|
@@ -2852,12 +2861,12 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2852
2861
|
changes = getChangesOnSelection(props, state.highlightedIndex);
|
|
2853
2862
|
} else {
|
|
2854
2863
|
changes = {
|
|
2855
|
-
highlightedIndex:
|
|
2864
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, -1, props.items, props.isItemDisabled, true)
|
|
2856
2865
|
};
|
|
2857
2866
|
}
|
|
2858
2867
|
} else {
|
|
2859
2868
|
changes = {
|
|
2860
|
-
highlightedIndex: getHighlightedIndexOnOpen(props, state, -1
|
|
2869
|
+
highlightedIndex: getHighlightedIndexOnOpen(props, state, -1),
|
|
2861
2870
|
isOpen: props.items.length >= 0
|
|
2862
2871
|
};
|
|
2863
2872
|
}
|
|
@@ -2876,22 +2885,22 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2876
2885
|
break;
|
|
2877
2886
|
case InputKeyDownPageUp:
|
|
2878
2887
|
changes = {
|
|
2879
|
-
highlightedIndex:
|
|
2888
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, -10, props.items, props.isItemDisabled, true)
|
|
2880
2889
|
};
|
|
2881
2890
|
break;
|
|
2882
2891
|
case InputKeyDownPageDown:
|
|
2883
2892
|
changes = {
|
|
2884
|
-
highlightedIndex:
|
|
2893
|
+
highlightedIndex: getHighlightedIndex(state.highlightedIndex, 10, props.items, props.isItemDisabled, true)
|
|
2885
2894
|
};
|
|
2886
2895
|
break;
|
|
2887
2896
|
case InputKeyDownHome:
|
|
2888
2897
|
changes = {
|
|
2889
|
-
highlightedIndex:
|
|
2898
|
+
highlightedIndex: getNonDisabledIndex(0, false, props.items, props.isItemDisabled)
|
|
2890
2899
|
};
|
|
2891
2900
|
break;
|
|
2892
2901
|
case InputKeyDownEnd:
|
|
2893
2902
|
changes = {
|
|
2894
|
-
highlightedIndex:
|
|
2903
|
+
highlightedIndex: getNonDisabledIndex(props.items.length - 1, true, props.items, props.isItemDisabled)
|
|
2895
2904
|
};
|
|
2896
2905
|
break;
|
|
2897
2906
|
case InputBlur:
|
|
@@ -2910,10 +2919,10 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2910
2919
|
inputValue: action.inputValue
|
|
2911
2920
|
};
|
|
2912
2921
|
break;
|
|
2913
|
-
case
|
|
2922
|
+
case InputClick:
|
|
2914
2923
|
changes = {
|
|
2915
|
-
isOpen:
|
|
2916
|
-
highlightedIndex: getHighlightedIndexOnOpen(props, state, 0)
|
|
2924
|
+
isOpen: !state.isOpen,
|
|
2925
|
+
highlightedIndex: state.isOpen ? -1 : getHighlightedIndexOnOpen(props, state, 0)
|
|
2917
2926
|
};
|
|
2918
2927
|
break;
|
|
2919
2928
|
case FunctionSelectItem:
|
|
@@ -2937,7 +2946,7 @@ function downshiftUseComboboxReducer(state, action) {
|
|
|
2937
2946
|
var _excluded$1 = ["onMouseLeave", "refKey", "ref"],
|
|
2938
2947
|
_excluded2$1 = ["item", "index", "refKey", "ref", "onMouseMove", "onMouseDown", "onClick", "onPress", "disabled"],
|
|
2939
2948
|
_excluded3 = ["onClick", "onPress", "refKey", "ref"],
|
|
2940
|
-
_excluded4 = ["onKeyDown", "onChange", "onInput", "
|
|
2949
|
+
_excluded4 = ["onKeyDown", "onChange", "onInput", "onBlur", "onChangeText", "onClick", "refKey", "ref"];
|
|
2941
2950
|
useCombobox.stateChangeTypes = stateChangeTypes$1;
|
|
2942
2951
|
function useCombobox(userProps) {
|
|
2943
2952
|
if (userProps === void 0) {
|
|
@@ -2965,21 +2974,21 @@ function useCombobox(userProps) {
|
|
|
2965
2974
|
inputValue = state.inputValue;
|
|
2966
2975
|
|
|
2967
2976
|
// Element refs.
|
|
2968
|
-
var menuRef =
|
|
2969
|
-
var itemRefs =
|
|
2970
|
-
var inputRef =
|
|
2971
|
-
var toggleButtonRef =
|
|
2972
|
-
var isInitialMountRef =
|
|
2977
|
+
var menuRef = React.useRef(null);
|
|
2978
|
+
var itemRefs = React.useRef({});
|
|
2979
|
+
var inputRef = React.useRef(null);
|
|
2980
|
+
var toggleButtonRef = React.useRef(null);
|
|
2981
|
+
var isInitialMountRef = React.useRef(true);
|
|
2973
2982
|
// prevent id re-generation between renders.
|
|
2974
2983
|
var elementIds = useElementIds(props);
|
|
2975
2984
|
// used to keep track of how many items we had on previous cycle.
|
|
2976
|
-
var previousResultCountRef =
|
|
2985
|
+
var previousResultCountRef = React.useRef();
|
|
2977
2986
|
// utility callback to get item element.
|
|
2978
2987
|
var latest = useLatestRef({
|
|
2979
2988
|
state: state,
|
|
2980
2989
|
props: props
|
|
2981
2990
|
});
|
|
2982
|
-
var getItemNodeFromIndex =
|
|
2991
|
+
var getItemNodeFromIndex = React.useCallback(function (index) {
|
|
2983
2992
|
return itemRefs.current[elementIds.getItemId(index)];
|
|
2984
2993
|
}, [elementIds]);
|
|
2985
2994
|
|
|
@@ -3015,14 +3024,14 @@ function useCombobox(userProps) {
|
|
|
3015
3024
|
state: state
|
|
3016
3025
|
});
|
|
3017
3026
|
// Focus the input on first render if required.
|
|
3018
|
-
|
|
3027
|
+
React.useEffect(function () {
|
|
3019
3028
|
var focusOnOpen = initialIsOpen || defaultIsOpen || isOpen;
|
|
3020
3029
|
if (focusOnOpen && inputRef.current) {
|
|
3021
3030
|
inputRef.current.focus();
|
|
3022
3031
|
}
|
|
3023
3032
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
3024
3033
|
}, []);
|
|
3025
|
-
|
|
3034
|
+
React.useEffect(function () {
|
|
3026
3035
|
if (isInitialMountRef.current) {
|
|
3027
3036
|
return;
|
|
3028
3037
|
}
|
|
@@ -3037,14 +3046,14 @@ function useCombobox(userProps) {
|
|
|
3037
3046
|
});
|
|
3038
3047
|
var setGetterPropCallInfo = useGetterPropsCalledChecker('getInputProps', 'getMenuProps');
|
|
3039
3048
|
// Make initial ref false.
|
|
3040
|
-
|
|
3049
|
+
React.useEffect(function () {
|
|
3041
3050
|
isInitialMountRef.current = false;
|
|
3042
3051
|
return function () {
|
|
3043
3052
|
isInitialMountRef.current = true;
|
|
3044
3053
|
};
|
|
3045
3054
|
}, []);
|
|
3046
3055
|
// Reset itemRefs on close.
|
|
3047
|
-
|
|
3056
|
+
React.useEffect(function () {
|
|
3048
3057
|
var _environment$document;
|
|
3049
3058
|
if (!isOpen) {
|
|
3050
3059
|
itemRefs.current = {};
|
|
@@ -3055,22 +3064,20 @@ function useCombobox(userProps) {
|
|
|
3055
3064
|
}, [isOpen, environment]);
|
|
3056
3065
|
|
|
3057
3066
|
/* Event handler functions */
|
|
3058
|
-
var inputKeyDownHandlers =
|
|
3067
|
+
var inputKeyDownHandlers = React.useMemo(function () {
|
|
3059
3068
|
return {
|
|
3060
3069
|
ArrowDown: function ArrowDown(event) {
|
|
3061
3070
|
event.preventDefault();
|
|
3062
3071
|
dispatch({
|
|
3063
3072
|
type: InputKeyDownArrowDown,
|
|
3064
|
-
altKey: event.altKey
|
|
3065
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3073
|
+
altKey: event.altKey
|
|
3066
3074
|
});
|
|
3067
3075
|
},
|
|
3068
3076
|
ArrowUp: function ArrowUp(event) {
|
|
3069
3077
|
event.preventDefault();
|
|
3070
3078
|
dispatch({
|
|
3071
3079
|
type: InputKeyDownArrowUp,
|
|
3072
|
-
altKey: event.altKey
|
|
3073
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3080
|
+
altKey: event.altKey
|
|
3074
3081
|
});
|
|
3075
3082
|
},
|
|
3076
3083
|
Home: function Home(event) {
|
|
@@ -3079,8 +3086,7 @@ function useCombobox(userProps) {
|
|
|
3079
3086
|
}
|
|
3080
3087
|
event.preventDefault();
|
|
3081
3088
|
dispatch({
|
|
3082
|
-
type: InputKeyDownHome
|
|
3083
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3089
|
+
type: InputKeyDownHome
|
|
3084
3090
|
});
|
|
3085
3091
|
},
|
|
3086
3092
|
End: function End(event) {
|
|
@@ -3089,8 +3095,7 @@ function useCombobox(userProps) {
|
|
|
3089
3095
|
}
|
|
3090
3096
|
event.preventDefault();
|
|
3091
3097
|
dispatch({
|
|
3092
|
-
type: InputKeyDownEnd
|
|
3093
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3098
|
+
type: InputKeyDownEnd
|
|
3094
3099
|
});
|
|
3095
3100
|
},
|
|
3096
3101
|
Escape: function Escape(event) {
|
|
@@ -3111,16 +3116,14 @@ function useCombobox(userProps) {
|
|
|
3111
3116
|
}
|
|
3112
3117
|
event.preventDefault();
|
|
3113
3118
|
dispatch({
|
|
3114
|
-
type: InputKeyDownEnter
|
|
3115
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3119
|
+
type: InputKeyDownEnter
|
|
3116
3120
|
});
|
|
3117
3121
|
},
|
|
3118
3122
|
PageUp: function PageUp(event) {
|
|
3119
3123
|
if (latest.current.state.isOpen) {
|
|
3120
3124
|
event.preventDefault();
|
|
3121
3125
|
dispatch({
|
|
3122
|
-
type: InputKeyDownPageUp
|
|
3123
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3126
|
+
type: InputKeyDownPageUp
|
|
3124
3127
|
});
|
|
3125
3128
|
}
|
|
3126
3129
|
},
|
|
@@ -3128,22 +3131,21 @@ function useCombobox(userProps) {
|
|
|
3128
3131
|
if (latest.current.state.isOpen) {
|
|
3129
3132
|
event.preventDefault();
|
|
3130
3133
|
dispatch({
|
|
3131
|
-
type: InputKeyDownPageDown
|
|
3132
|
-
getItemNodeFromIndex: getItemNodeFromIndex
|
|
3134
|
+
type: InputKeyDownPageDown
|
|
3133
3135
|
});
|
|
3134
3136
|
}
|
|
3135
3137
|
}
|
|
3136
3138
|
};
|
|
3137
|
-
}, [dispatch, latest
|
|
3139
|
+
}, [dispatch, latest]);
|
|
3138
3140
|
|
|
3139
3141
|
// Getter props.
|
|
3140
|
-
var getLabelProps =
|
|
3142
|
+
var getLabelProps = React.useCallback(function (labelProps) {
|
|
3141
3143
|
return _extends__default["default"]({
|
|
3142
3144
|
id: elementIds.labelId,
|
|
3143
3145
|
htmlFor: elementIds.inputId
|
|
3144
3146
|
}, labelProps);
|
|
3145
3147
|
}, [elementIds]);
|
|
3146
|
-
var getMenuProps =
|
|
3148
|
+
var getMenuProps = React.useCallback(function (_temp, _temp2) {
|
|
3147
3149
|
var _extends2;
|
|
3148
3150
|
var _ref = _temp === void 0 ? {} : _temp,
|
|
3149
3151
|
onMouseLeave = _ref.onMouseLeave,
|
|
@@ -3163,7 +3165,7 @@ function useCombobox(userProps) {
|
|
|
3163
3165
|
});
|
|
3164
3166
|
}), _extends2), rest);
|
|
3165
3167
|
}, [dispatch, setGetterPropCallInfo, elementIds]);
|
|
3166
|
-
var getItemProps =
|
|
3168
|
+
var getItemProps = React.useCallback(function (_temp3) {
|
|
3167
3169
|
var _extends3, _ref4;
|
|
3168
3170
|
var _ref3 = _temp3 === void 0 ? {} : _temp3,
|
|
3169
3171
|
itemProp = _ref3.item,
|
|
@@ -3175,14 +3177,19 @@ function useCombobox(userProps) {
|
|
|
3175
3177
|
onMouseDown = _ref3.onMouseDown,
|
|
3176
3178
|
onClick = _ref3.onClick;
|
|
3177
3179
|
_ref3.onPress;
|
|
3178
|
-
var
|
|
3180
|
+
var disabledProp = _ref3.disabled,
|
|
3179
3181
|
rest = _objectWithoutPropertiesLoose__default["default"](_ref3, _excluded2$1);
|
|
3182
|
+
if (disabledProp !== undefined) {
|
|
3183
|
+
console.warn('Passing "disabled" as an argument to getItemProps is not supported anymore. Please use the isItemDisabled prop from useCombobox.');
|
|
3184
|
+
}
|
|
3180
3185
|
var _latest$current = latest.current,
|
|
3181
3186
|
latestProps = _latest$current.props,
|
|
3182
3187
|
latestState = _latest$current.state;
|
|
3183
3188
|
var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, 'Pass either item or index to getItemProps!'),
|
|
3189
|
+
item = _getItemAndIndex[0],
|
|
3184
3190
|
index = _getItemAndIndex[1];
|
|
3185
|
-
var
|
|
3191
|
+
var disabled = latestProps.isItemDisabled(item, index);
|
|
3192
|
+
var onSelectKey = 'onClick';
|
|
3186
3193
|
var customClickHandler = onClick;
|
|
3187
3194
|
var itemHandleMouseMove = function itemHandleMouseMove() {
|
|
3188
3195
|
if (index === latestState.highlightedIndex) {
|
|
@@ -3208,12 +3215,12 @@ function useCombobox(userProps) {
|
|
|
3208
3215
|
if (itemNode) {
|
|
3209
3216
|
itemRefs.current[elementIds.getItemId(index)] = itemNode;
|
|
3210
3217
|
}
|
|
3211
|
-
}), _extends3
|
|
3218
|
+
}), _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), {
|
|
3212
3219
|
onMouseMove: callAllEventHandlers(onMouseMove, itemHandleMouseMove),
|
|
3213
3220
|
onMouseDown: callAllEventHandlers(onMouseDown, itemHandleMouseDown)
|
|
3214
3221
|
}, rest);
|
|
3215
3222
|
}, [dispatch, latest, shouldScrollRef, elementIds]);
|
|
3216
|
-
var getToggleButtonProps =
|
|
3223
|
+
var getToggleButtonProps = React.useCallback(function (_temp4) {
|
|
3217
3224
|
var _extends4;
|
|
3218
3225
|
var _ref5 = _temp4 === void 0 ? {} : _temp4;
|
|
3219
3226
|
_ref5.onClick;
|
|
@@ -3234,16 +3241,16 @@ function useCombobox(userProps) {
|
|
|
3234
3241
|
onPress: callAllEventHandlers(onPress, toggleButtonHandleClick)
|
|
3235
3242
|
} ), rest);
|
|
3236
3243
|
}, [dispatch, latest, elementIds]);
|
|
3237
|
-
var getInputProps =
|
|
3244
|
+
var getInputProps = React.useCallback(function (_temp5, _temp6) {
|
|
3238
3245
|
var _extends5;
|
|
3239
3246
|
var _ref6 = _temp5 === void 0 ? {} : _temp5,
|
|
3240
3247
|
onKeyDown = _ref6.onKeyDown,
|
|
3241
3248
|
onChange = _ref6.onChange,
|
|
3242
3249
|
onInput = _ref6.onInput,
|
|
3243
|
-
onFocus = _ref6.onFocus,
|
|
3244
3250
|
onBlur = _ref6.onBlur;
|
|
3245
3251
|
_ref6.onChangeText;
|
|
3246
|
-
var
|
|
3252
|
+
var onClick = _ref6.onClick,
|
|
3253
|
+
_ref6$refKey = _ref6.refKey,
|
|
3247
3254
|
refKey = _ref6$refKey === void 0 ? 'ref' : _ref6$refKey,
|
|
3248
3255
|
ref = _ref6.ref,
|
|
3249
3256
|
rest = _objectWithoutPropertiesLoose__default["default"](_ref6, _excluded4);
|
|
@@ -3273,12 +3280,10 @@ function useCombobox(userProps) {
|
|
|
3273
3280
|
});
|
|
3274
3281
|
}
|
|
3275
3282
|
};
|
|
3276
|
-
var
|
|
3277
|
-
|
|
3278
|
-
|
|
3279
|
-
|
|
3280
|
-
});
|
|
3281
|
-
}
|
|
3283
|
+
var inputHandleClick = function inputHandleClick() {
|
|
3284
|
+
dispatch({
|
|
3285
|
+
type: InputClick
|
|
3286
|
+
});
|
|
3282
3287
|
};
|
|
3283
3288
|
|
|
3284
3289
|
/* istanbul ignore next (preact) */
|
|
@@ -3286,48 +3291,48 @@ function useCombobox(userProps) {
|
|
|
3286
3291
|
var eventHandlers = {};
|
|
3287
3292
|
if (!rest.disabled) {
|
|
3288
3293
|
var _eventHandlers;
|
|
3289
|
-
eventHandlers = (_eventHandlers = {}, _eventHandlers[onChangeKey] = callAllEventHandlers(onChange, onInput, inputHandleChange), _eventHandlers.onKeyDown = callAllEventHandlers(onKeyDown, inputHandleKeyDown), _eventHandlers.onBlur = callAllEventHandlers(onBlur, inputHandleBlur), _eventHandlers.
|
|
3294
|
+
eventHandlers = (_eventHandlers = {}, _eventHandlers[onChangeKey] = callAllEventHandlers(onChange, onInput, inputHandleChange), _eventHandlers.onKeyDown = callAllEventHandlers(onKeyDown, inputHandleKeyDown), _eventHandlers.onBlur = callAllEventHandlers(onBlur, inputHandleBlur), _eventHandlers.onClick = callAllEventHandlers(onClick, inputHandleClick), _eventHandlers);
|
|
3290
3295
|
}
|
|
3291
3296
|
return _extends__default["default"]((_extends5 = {}, _extends5[refKey] = handleRefs(ref, function (inputNode) {
|
|
3292
3297
|
inputRef.current = inputNode;
|
|
3293
|
-
}), _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 :
|
|
3298
|
+
}), _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);
|
|
3294
3299
|
}, [dispatch, inputKeyDownHandlers, latest, mouseAndTouchTrackersRef, setGetterPropCallInfo, elementIds]);
|
|
3295
3300
|
|
|
3296
3301
|
// returns
|
|
3297
|
-
var toggleMenu =
|
|
3302
|
+
var toggleMenu = React.useCallback(function () {
|
|
3298
3303
|
dispatch({
|
|
3299
3304
|
type: FunctionToggleMenu
|
|
3300
3305
|
});
|
|
3301
3306
|
}, [dispatch]);
|
|
3302
|
-
var closeMenu =
|
|
3307
|
+
var closeMenu = React.useCallback(function () {
|
|
3303
3308
|
dispatch({
|
|
3304
3309
|
type: FunctionCloseMenu
|
|
3305
3310
|
});
|
|
3306
3311
|
}, [dispatch]);
|
|
3307
|
-
var openMenu =
|
|
3312
|
+
var openMenu = React.useCallback(function () {
|
|
3308
3313
|
dispatch({
|
|
3309
3314
|
type: FunctionOpenMenu
|
|
3310
3315
|
});
|
|
3311
3316
|
}, [dispatch]);
|
|
3312
|
-
var setHighlightedIndex =
|
|
3317
|
+
var setHighlightedIndex = React.useCallback(function (newHighlightedIndex) {
|
|
3313
3318
|
dispatch({
|
|
3314
3319
|
type: FunctionSetHighlightedIndex,
|
|
3315
3320
|
highlightedIndex: newHighlightedIndex
|
|
3316
3321
|
});
|
|
3317
3322
|
}, [dispatch]);
|
|
3318
|
-
var selectItem =
|
|
3323
|
+
var selectItem = React.useCallback(function (newSelectedItem) {
|
|
3319
3324
|
dispatch({
|
|
3320
3325
|
type: FunctionSelectItem,
|
|
3321
3326
|
selectedItem: newSelectedItem
|
|
3322
3327
|
});
|
|
3323
3328
|
}, [dispatch]);
|
|
3324
|
-
var setInputValue =
|
|
3329
|
+
var setInputValue = React.useCallback(function (newInputValue) {
|
|
3325
3330
|
dispatch({
|
|
3326
3331
|
type: FunctionSetInputValue,
|
|
3327
3332
|
inputValue: newInputValue
|
|
3328
3333
|
});
|
|
3329
3334
|
}, [dispatch]);
|
|
3330
|
-
var reset =
|
|
3335
|
+
var reset = React.useCallback(function () {
|
|
3331
3336
|
dispatch({
|
|
3332
3337
|
type: FunctionReset$1
|
|
3333
3338
|
});
|
|
@@ -3437,30 +3442,19 @@ function getA11yRemovalMessage(selectionParameters) {
|
|
|
3437
3442
|
itemToStringLocal = selectionParameters.itemToString;
|
|
3438
3443
|
return itemToStringLocal(removedSelectedItem) + " has been removed.";
|
|
3439
3444
|
}
|
|
3440
|
-
var propTypes = {
|
|
3445
|
+
var propTypes = _extends__default["default"]({}, commonPropTypes, {
|
|
3441
3446
|
selectedItems: PropTypes__default["default"].array,
|
|
3442
3447
|
initialSelectedItems: PropTypes__default["default"].array,
|
|
3443
3448
|
defaultSelectedItems: PropTypes__default["default"].array,
|
|
3444
|
-
itemToString: PropTypes__default["default"].func,
|
|
3445
3449
|
getA11yRemovalMessage: PropTypes__default["default"].func,
|
|
3446
|
-
stateReducer: PropTypes__default["default"].func,
|
|
3447
3450
|
activeIndex: PropTypes__default["default"].number,
|
|
3448
3451
|
initialActiveIndex: PropTypes__default["default"].number,
|
|
3449
3452
|
defaultActiveIndex: PropTypes__default["default"].number,
|
|
3450
3453
|
onActiveIndexChange: PropTypes__default["default"].func,
|
|
3451
3454
|
onSelectedItemsChange: PropTypes__default["default"].func,
|
|
3452
3455
|
keyNavigationNext: PropTypes__default["default"].string,
|
|
3453
|
-
keyNavigationPrevious: PropTypes__default["default"].string
|
|
3454
|
-
|
|
3455
|
-
addEventListener: PropTypes__default["default"].func,
|
|
3456
|
-
removeEventListener: PropTypes__default["default"].func,
|
|
3457
|
-
document: PropTypes__default["default"].shape({
|
|
3458
|
-
getElementById: PropTypes__default["default"].func,
|
|
3459
|
-
activeElement: PropTypes__default["default"].any,
|
|
3460
|
-
body: PropTypes__default["default"].any
|
|
3461
|
-
})
|
|
3462
|
-
})
|
|
3463
|
-
};
|
|
3456
|
+
keyNavigationPrevious: PropTypes__default["default"].string
|
|
3457
|
+
});
|
|
3464
3458
|
var defaultProps = {
|
|
3465
3459
|
itemToString: defaultProps$3.itemToString,
|
|
3466
3460
|
stateReducer: defaultProps$3.stateReducer,
|
|
@@ -3644,10 +3638,10 @@ function useMultipleSelection(userProps) {
|
|
|
3644
3638
|
selectedItems = state.selectedItems;
|
|
3645
3639
|
|
|
3646
3640
|
// Refs.
|
|
3647
|
-
var isInitialMountRef =
|
|
3648
|
-
var dropdownRef =
|
|
3649
|
-
var previousSelectedItemsRef =
|
|
3650
|
-
var selectedItemRefs =
|
|
3641
|
+
var isInitialMountRef = React.useRef(true);
|
|
3642
|
+
var dropdownRef = React.useRef(null);
|
|
3643
|
+
var previousSelectedItemsRef = React.useRef(selectedItems);
|
|
3644
|
+
var selectedItemRefs = React.useRef();
|
|
3651
3645
|
selectedItemRefs.current = [];
|
|
3652
3646
|
var latest = useLatestRef({
|
|
3653
3647
|
state: state,
|
|
@@ -3656,7 +3650,7 @@ function useMultipleSelection(userProps) {
|
|
|
3656
3650
|
|
|
3657
3651
|
// Effects.
|
|
3658
3652
|
/* Sets a11y status message on changes in selectedItem. */
|
|
3659
|
-
|
|
3653
|
+
React.useEffect(function () {
|
|
3660
3654
|
if (isInitialMountRef.current || false) {
|
|
3661
3655
|
return;
|
|
3662
3656
|
}
|
|
@@ -3677,7 +3671,7 @@ function useMultipleSelection(userProps) {
|
|
|
3677
3671
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
3678
3672
|
}, [selectedItems.length]);
|
|
3679
3673
|
// Sets focus on active item.
|
|
3680
|
-
|
|
3674
|
+
React.useEffect(function () {
|
|
3681
3675
|
if (isInitialMountRef.current) {
|
|
3682
3676
|
return;
|
|
3683
3677
|
}
|
|
@@ -3694,7 +3688,7 @@ function useMultipleSelection(userProps) {
|
|
|
3694
3688
|
});
|
|
3695
3689
|
var setGetterPropCallInfo = useGetterPropsCalledChecker('getDropdownProps');
|
|
3696
3690
|
// Make initial ref false.
|
|
3697
|
-
|
|
3691
|
+
React.useEffect(function () {
|
|
3698
3692
|
isInitialMountRef.current = false;
|
|
3699
3693
|
return function () {
|
|
3700
3694
|
isInitialMountRef.current = true;
|
|
@@ -3702,7 +3696,7 @@ function useMultipleSelection(userProps) {
|
|
|
3702
3696
|
}, []);
|
|
3703
3697
|
|
|
3704
3698
|
// Event handler functions.
|
|
3705
|
-
var selectedItemKeyDownHandlers =
|
|
3699
|
+
var selectedItemKeyDownHandlers = React.useMemo(function () {
|
|
3706
3700
|
var _ref;
|
|
3707
3701
|
return _ref = {}, _ref[keyNavigationPrevious] = function () {
|
|
3708
3702
|
dispatch({
|
|
@@ -3722,7 +3716,7 @@ function useMultipleSelection(userProps) {
|
|
|
3722
3716
|
});
|
|
3723
3717
|
}, _ref;
|
|
3724
3718
|
}, [dispatch, keyNavigationNext, keyNavigationPrevious]);
|
|
3725
|
-
var dropdownKeyDownHandlers =
|
|
3719
|
+
var dropdownKeyDownHandlers = React.useMemo(function () {
|
|
3726
3720
|
var _ref2;
|
|
3727
3721
|
return _ref2 = {}, _ref2[keyNavigationPrevious] = function (event) {
|
|
3728
3722
|
if (isKeyDownOperationPermitted(event)) {
|
|
@@ -3740,7 +3734,7 @@ function useMultipleSelection(userProps) {
|
|
|
3740
3734
|
}, [dispatch, keyNavigationPrevious]);
|
|
3741
3735
|
|
|
3742
3736
|
// Getter props.
|
|
3743
|
-
var getSelectedItemProps =
|
|
3737
|
+
var getSelectedItemProps = React.useCallback(function (_temp) {
|
|
3744
3738
|
var _extends2;
|
|
3745
3739
|
var _ref3 = _temp === void 0 ? {} : _temp,
|
|
3746
3740
|
_ref3$refKey = _ref3.refKey,
|
|
@@ -3773,7 +3767,7 @@ function useMultipleSelection(userProps) {
|
|
|
3773
3767
|
}
|
|
3774
3768
|
}), _extends2.tabIndex = isFocusable ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
|
|
3775
3769
|
}, [dispatch, latest, selectedItemKeyDownHandlers]);
|
|
3776
|
-
var getDropdownProps =
|
|
3770
|
+
var getDropdownProps = React.useCallback(function (_temp2, _temp3) {
|
|
3777
3771
|
var _extends3;
|
|
3778
3772
|
var _ref4 = _temp2 === void 0 ? {} : _temp2,
|
|
3779
3773
|
_ref4$refKey = _ref4.refKey,
|
|
@@ -3810,31 +3804,31 @@ function useMultipleSelection(userProps) {
|
|
|
3810
3804
|
}, [dispatch, dropdownKeyDownHandlers, setGetterPropCallInfo]);
|
|
3811
3805
|
|
|
3812
3806
|
// returns
|
|
3813
|
-
var addSelectedItem =
|
|
3807
|
+
var addSelectedItem = React.useCallback(function (selectedItem) {
|
|
3814
3808
|
dispatch({
|
|
3815
3809
|
type: FunctionAddSelectedItem,
|
|
3816
3810
|
selectedItem: selectedItem
|
|
3817
3811
|
});
|
|
3818
3812
|
}, [dispatch]);
|
|
3819
|
-
var removeSelectedItem =
|
|
3813
|
+
var removeSelectedItem = React.useCallback(function (selectedItem) {
|
|
3820
3814
|
dispatch({
|
|
3821
3815
|
type: FunctionRemoveSelectedItem,
|
|
3822
3816
|
selectedItem: selectedItem
|
|
3823
3817
|
});
|
|
3824
3818
|
}, [dispatch]);
|
|
3825
|
-
var setSelectedItems =
|
|
3819
|
+
var setSelectedItems = React.useCallback(function (newSelectedItems) {
|
|
3826
3820
|
dispatch({
|
|
3827
3821
|
type: FunctionSetSelectedItems,
|
|
3828
3822
|
selectedItems: newSelectedItems
|
|
3829
3823
|
});
|
|
3830
3824
|
}, [dispatch]);
|
|
3831
|
-
var setActiveIndex =
|
|
3825
|
+
var setActiveIndex = React.useCallback(function (newActiveIndex) {
|
|
3832
3826
|
dispatch({
|
|
3833
3827
|
type: FunctionSetActiveIndex,
|
|
3834
3828
|
activeIndex: newActiveIndex
|
|
3835
3829
|
});
|
|
3836
3830
|
}, [dispatch]);
|
|
3837
|
-
var reset =
|
|
3831
|
+
var reset = React.useCallback(function () {
|
|
3838
3832
|
dispatch({
|
|
3839
3833
|
type: FunctionReset
|
|
3840
3834
|
});
|