@progress/kendo-react-dropdowns 5.17.0-dev.202308081128 → 5.17.0-dev.202308091121
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/dist/cdn/js/kendo-react-dropdowns.js +1 -1
- package/dist/es/AutoComplete/AutoComplete.d.ts +5 -7
- package/dist/es/AutoComplete/AutoComplete.js +95 -13
- package/dist/es/AutoComplete/AutoCompleteProps.d.ts +4 -0
- package/dist/es/ComboBox/ComboBox.d.ts +7 -1
- package/dist/es/ComboBox/ComboBox.js +137 -23
- package/dist/es/ComboBox/ComboBoxProps.d.ts +4 -0
- package/dist/es/DropDownList/DropDownList.d.ts +5 -5
- package/dist/es/DropDownList/DropDownList.js +128 -22
- package/dist/es/DropDownList/DropDownListProps.d.ts +4 -0
- package/dist/es/MultiColumnComboBox/MultiColumnComboBox.js +2 -1
- package/dist/es/MultiSelect/MultiSelect.d.ts +3 -1
- package/dist/es/MultiSelect/MultiSelect.js +80 -9
- package/dist/es/MultiSelect/MultiSelectProps.d.ts +4 -0
- package/dist/es/common/List.js +2 -2
- package/dist/es/common/ListItem.d.ts +4 -0
- package/dist/es/common/ListItem.js +4 -3
- package/dist/es/common/Navigation.d.ts +1 -0
- package/dist/es/common/Navigation.js +2 -2
- package/dist/es/package-metadata.js +1 -1
- package/dist/npm/AutoComplete/AutoComplete.d.ts +5 -7
- package/dist/npm/AutoComplete/AutoComplete.js +95 -13
- package/dist/npm/AutoComplete/AutoCompleteProps.d.ts +4 -0
- package/dist/npm/ComboBox/ComboBox.d.ts +7 -1
- package/dist/npm/ComboBox/ComboBox.js +137 -23
- package/dist/npm/ComboBox/ComboBoxProps.d.ts +4 -0
- package/dist/npm/DropDownList/DropDownList.d.ts +5 -5
- package/dist/npm/DropDownList/DropDownList.js +127 -21
- package/dist/npm/DropDownList/DropDownListProps.d.ts +4 -0
- package/dist/npm/MultiColumnComboBox/MultiColumnComboBox.js +2 -1
- package/dist/npm/MultiSelect/MultiSelect.d.ts +3 -1
- package/dist/npm/MultiSelect/MultiSelect.js +80 -9
- package/dist/npm/MultiSelect/MultiSelectProps.d.ts +4 -0
- package/dist/npm/common/List.js +2 -2
- package/dist/npm/common/ListItem.d.ts +4 -0
- package/dist/npm/common/ListItem.js +4 -3
- package/dist/npm/common/Navigation.d.ts +1 -0
- package/dist/npm/common/Navigation.js +2 -2
- package/dist/npm/package-metadata.js +1 -1
- package/dist/systemjs/kendo-react-dropdowns.js +1 -1
- package/package.json +16 -16
|
@@ -66,6 +66,7 @@ var DropDownListWithoutContext = /** @class */ (function (_super) {
|
|
|
66
66
|
_this._skipFocusEvent = false;
|
|
67
67
|
_this._filterInput = null;
|
|
68
68
|
_this._navigated = false;
|
|
69
|
+
_this._lastKeypressIsFilter = false;
|
|
69
70
|
_this._inputId = (0, kendo_react_common_1.guid)();
|
|
70
71
|
_this.itemHeight = 0;
|
|
71
72
|
/**
|
|
@@ -141,7 +142,7 @@ var DropDownListWithoutContext = /** @class */ (function (_super) {
|
|
|
141
142
|
var opened = _this.props.opened !== undefined ? _this.props.opened : _this.state.opened;
|
|
142
143
|
var popupSettings = _this.base.getPopupSettings();
|
|
143
144
|
var translate = "translateY(".concat(vs.translate, "px)");
|
|
144
|
-
return (React.createElement(List_1.default, { id: _this.base.listBoxId, show: opened, data: data.slice(), focusedIndex: _this.
|
|
145
|
+
return (React.createElement(List_1.default, { id: _this.base.listBoxId, show: opened, data: data.slice(), focusedIndex: _this.getFocusedIndex(), value: _this.value, textField: textField, valueField: dataItemKey, optionsGuid: _this.base.guid, groupField: _this.props.groupField, groupMode: 'modern', listRef: function (list) { return vs.list = _this.base.list = list; }, wrapperStyle: { maxHeight: popupSettings.height }, wrapperCssClass: "k-list-content", listStyle: vs.enabled ? { transform: translate } : undefined, key: "listkey", skip: skip, onClick: _this.handleItemClick, itemRender: itemRender, groupHeaderItemRender: groupHeaderItemRender, noDataRender: listNoDataRender, onScroll: _this.onScroll, wrapperRef: vs.scrollerRef, scroller: _this.base.renderScrollElement() }));
|
|
145
146
|
};
|
|
146
147
|
_this.onScroll = function (event) {
|
|
147
148
|
var _a = _this.base, vs = _a.vs, list = _a.list;
|
|
@@ -226,7 +227,9 @@ var DropDownListWithoutContext = /** @class */ (function (_super) {
|
|
|
226
227
|
}
|
|
227
228
|
};
|
|
228
229
|
_this.handleKeyDown = function (event) {
|
|
229
|
-
var _a = _this.props, _b = _a.data, data = _b === void 0 ? [] : _b, filterable = _a.filterable, disabled = _a.disabled, _c = _a.leftRightKeysNavigation, leftRightKeysNavigation = _c === void 0 ? true : _c, _d = _a.virtual, virtual = _d === void 0 ? { skip: 0, total: 0, pageSize: 0 } : _d;
|
|
230
|
+
var _a = _this.props, _b = _a.data, data = _b === void 0 ? [] : _b, filterable = _a.filterable, disabled = _a.disabled, defaultItem = _a.defaultItem, _c = _a.leftRightKeysNavigation, leftRightKeysNavigation = _c === void 0 ? true : _c, _d = _a.virtual, virtual = _d === void 0 ? { skip: 0, total: 0, pageSize: 0 } : _d, dataItemKey = _a.dataItemKey, _e = _a.groupField, groupField = _e === void 0 ? '' : _e, textField = _a.textField;
|
|
231
|
+
var value = _this.value;
|
|
232
|
+
var selectedIndex = data.findIndex(function (i) { return (0, utils_1.areSame)(i, value, dataItemKey); });
|
|
230
233
|
var opened = _this.props.opened !== undefined ? _this.props.opened : _this.state.opened;
|
|
231
234
|
var keyCode = event.keyCode;
|
|
232
235
|
var homeOrEndKeys = keyCode === kendo_react_common_1.Keys.home || keyCode === kendo_react_common_1.Keys.end;
|
|
@@ -235,7 +238,7 @@ var DropDownListWithoutContext = /** @class */ (function (_super) {
|
|
|
235
238
|
((event.altKey && keyCode === kendo_react_common_1.Keys.down) || keyCode === kendo_react_common_1.Keys.enter || keyCode === kendo_react_common_1.Keys.space);
|
|
236
239
|
var shouldClose = opened && ((event.altKey && keyCode === kendo_react_common_1.Keys.up) || keyCode === kendo_react_common_1.Keys.esc);
|
|
237
240
|
var leftOrRightKeys = leftRightKeysNavigation && (keyCode === kendo_react_common_1.Keys.left || keyCode === kendo_react_common_1.Keys.right);
|
|
238
|
-
var shouldNavigate = upOrDownKeys || (
|
|
241
|
+
var shouldNavigate = upOrDownKeys || (leftOrRightKeys && !filterable) || homeOrEndKeys;
|
|
239
242
|
var state = _this.base.initState();
|
|
240
243
|
state.syntheticEvent = event;
|
|
241
244
|
if (disabled) {
|
|
@@ -262,19 +265,101 @@ var DropDownListWithoutContext = /** @class */ (function (_super) {
|
|
|
262
265
|
}
|
|
263
266
|
}
|
|
264
267
|
else if (opened && keyCode === kendo_react_common_1.Keys.enter) {
|
|
265
|
-
var focusedIndex = _this.
|
|
266
|
-
if (focusedIndex !== undefined) {
|
|
268
|
+
var focusedIndex = _this.getFocusedIndex();
|
|
269
|
+
if (focusedIndex !== undefined && focusedIndex !== -1 && data[focusedIndex].disabled) {
|
|
270
|
+
_this.triggerOnChange(null, state);
|
|
271
|
+
_this.applyState(state);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
267
274
|
_this.handleItemSelect(focusedIndex, state);
|
|
268
275
|
}
|
|
269
276
|
_this.base.togglePopup(state);
|
|
270
277
|
event.preventDefault();
|
|
271
278
|
}
|
|
272
279
|
else if (shouldOpen || shouldClose) {
|
|
280
|
+
if (shouldClose) {
|
|
281
|
+
_this.resetValueIfDisabledItem();
|
|
282
|
+
}
|
|
273
283
|
_this.base.togglePopup(state);
|
|
274
284
|
event.preventDefault();
|
|
275
285
|
}
|
|
276
286
|
else if (shouldNavigate) {
|
|
277
|
-
_this.
|
|
287
|
+
_this._lastKeypressIsFilter = false;
|
|
288
|
+
if (groupField !== '' && textField) {
|
|
289
|
+
if (!_this.props.skipDisabledItems && opened) {
|
|
290
|
+
_this.onNavigate(state, keyCode);
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
var newIndex = undefined;
|
|
294
|
+
if (keyCode === kendo_react_common_1.Keys.down || keyCode === kendo_react_common_1.Keys.right) {
|
|
295
|
+
var tempnewIndex_1 = data.slice(selectedIndex + 1).find(function (i) { return !i.disabled && i[textField]; });
|
|
296
|
+
newIndex = tempnewIndex_1 && data.findIndex(function (el) { return el[textField] === tempnewIndex_1[textField]; });
|
|
297
|
+
}
|
|
298
|
+
else if (keyCode === kendo_react_common_1.Keys.up || keyCode === kendo_react_common_1.Keys.left) {
|
|
299
|
+
var dataToSearch = void 0;
|
|
300
|
+
if (selectedIndex === 0 && defaultItem) {
|
|
301
|
+
newIndex = -1;
|
|
302
|
+
}
|
|
303
|
+
else if (selectedIndex === -1) {
|
|
304
|
+
dataToSearch = data;
|
|
305
|
+
newIndex = data.findIndex(function (i) { return !i.disabled && i[textField]; });
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
dataToSearch = data.slice(0, selectedIndex);
|
|
309
|
+
var tempnewIndex_2 = dataToSearch.pop();
|
|
310
|
+
while (tempnewIndex_2 && tempnewIndex_2.disabled) {
|
|
311
|
+
tempnewIndex_2 = dataToSearch.pop();
|
|
312
|
+
}
|
|
313
|
+
newIndex = tempnewIndex_2 && data.findIndex(function (el) { return el[textField] === tempnewIndex_2[textField]; });
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
if (newIndex !== undefined) {
|
|
317
|
+
var skipItems = newIndex - selectedIndex;
|
|
318
|
+
_this.onNavigate(state, keyCode, skipItems);
|
|
319
|
+
}
|
|
320
|
+
else if (newIndex === undefined && data.findIndex(function (el) { return el[textField] === value[textField]; }) === data.length - 1) {
|
|
321
|
+
_this.onNavigate(state, keyCode);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
else if (!_this.props.skipDisabledItems && opened || homeOrEndKeys) {
|
|
326
|
+
_this.onNavigate(state, keyCode);
|
|
327
|
+
}
|
|
328
|
+
else if (textField) {
|
|
329
|
+
var newIndex = undefined;
|
|
330
|
+
if (keyCode === kendo_react_common_1.Keys.down || keyCode === kendo_react_common_1.Keys.right) {
|
|
331
|
+
var tempnewIndex_3 = data.slice(selectedIndex + 1).find(function (i) { return !i.disabled && i[textField]; });
|
|
332
|
+
newIndex = tempnewIndex_3 && data.findIndex(function (el) { return el[textField] === tempnewIndex_3[textField]; });
|
|
333
|
+
}
|
|
334
|
+
else if (keyCode === kendo_react_common_1.Keys.up || keyCode === kendo_react_common_1.Keys.left) {
|
|
335
|
+
var dataTest = void 0;
|
|
336
|
+
if (selectedIndex === 0 && defaultItem) {
|
|
337
|
+
newIndex = -1;
|
|
338
|
+
}
|
|
339
|
+
else if (selectedIndex === -1) {
|
|
340
|
+
dataTest = data;
|
|
341
|
+
newIndex = data.find(function (i) { return !i.disabled && i[textField]; });
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
dataTest = data.slice(0, selectedIndex);
|
|
345
|
+
var tempnewIndex_4 = dataTest.pop();
|
|
346
|
+
while (tempnewIndex_4 && tempnewIndex_4.disabled) {
|
|
347
|
+
tempnewIndex_4 = dataTest.pop();
|
|
348
|
+
}
|
|
349
|
+
newIndex = tempnewIndex_4 && data.findIndex(function (el) { return el[textField] === tempnewIndex_4[textField]; });
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
if (newIndex !== undefined) {
|
|
353
|
+
var skipItems = newIndex - selectedIndex;
|
|
354
|
+
_this.onNavigate(state, keyCode, skipItems);
|
|
355
|
+
}
|
|
356
|
+
else if (newIndex === undefined && data.findIndex(function (el) { return el[textField] === value[textField]; }) === data.length - 1) {
|
|
357
|
+
_this.onNavigate(state, keyCode);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
_this.onNavigate(state, keyCode);
|
|
362
|
+
}
|
|
278
363
|
event.preventDefault();
|
|
279
364
|
}
|
|
280
365
|
_this.applyState(state);
|
|
@@ -301,6 +386,9 @@ var DropDownListWithoutContext = /** @class */ (function (_super) {
|
|
|
301
386
|
state.syntheticEvent = event;
|
|
302
387
|
state.data.focused = false;
|
|
303
388
|
state.events.push({ type: 'onBlur' });
|
|
389
|
+
if (opened) {
|
|
390
|
+
_this.resetValueIfDisabledItem();
|
|
391
|
+
}
|
|
304
392
|
if (opened && !renderAdaptive) {
|
|
305
393
|
_this.base.togglePopup(state);
|
|
306
394
|
}
|
|
@@ -322,6 +410,7 @@ var DropDownListWithoutContext = /** @class */ (function (_super) {
|
|
|
322
410
|
if (!_this.state.focused) {
|
|
323
411
|
state.data.focused = true;
|
|
324
412
|
}
|
|
413
|
+
_this.resetValueIfDisabledItem();
|
|
325
414
|
_this.base.togglePopup(state);
|
|
326
415
|
_this.applyState(state);
|
|
327
416
|
};
|
|
@@ -349,6 +438,7 @@ var DropDownListWithoutContext = /** @class */ (function (_super) {
|
|
|
349
438
|
state.data.text = event.target.value;
|
|
350
439
|
}
|
|
351
440
|
_this.base.filterChanged(event.target.value, state);
|
|
441
|
+
_this._lastKeypressIsFilter = true;
|
|
352
442
|
_this.applyState(state);
|
|
353
443
|
_this.setState({ group: undefined });
|
|
354
444
|
};
|
|
@@ -497,7 +587,7 @@ var DropDownListWithoutContext = /** @class */ (function (_super) {
|
|
|
497
587
|
*/
|
|
498
588
|
DropDownListWithoutContext.prototype.componentDidUpdate = function (prevProps, prevState) {
|
|
499
589
|
var _a;
|
|
500
|
-
var _b = this.props, dataItemKey = _b.dataItemKey, virtual = _b.virtual, _c = _b.groupField, groupField = _c === void 0 ? '' : _c;
|
|
590
|
+
var _b = this.props, dataItemKey = _b.dataItemKey, virtual = _b.virtual, _c = _b.groupField, groupField = _c === void 0 ? '' : _c, textField = _b.textField;
|
|
501
591
|
var _d = this.props.data, data = _d === void 0 ? [] : _d;
|
|
502
592
|
var prevTotal = prevProps.virtual ? prevProps.virtual.total : 0;
|
|
503
593
|
var opened = this.props.opened !== undefined ? this.props.opened : this.state.opened;
|
|
@@ -520,8 +610,8 @@ var DropDownListWithoutContext = /** @class */ (function (_super) {
|
|
|
520
610
|
var selectedItem_1 = this.value;
|
|
521
611
|
var prevSelectedItem = prevProps.value !== undefined ? prevProps.value : prevState.value;
|
|
522
612
|
var selectedItemIndex = data.findIndex(function (i) { return (0, utils_1.areSame)(i, selectedItem_1, dataItemKey); });
|
|
523
|
-
if (groupField !== '') {
|
|
524
|
-
selectedItemIndex = (_a = this.base.getGroupedDataModernMode(data, groupField)) === null || _a === void 0 ? void 0 : _a.indexOf(selectedItem_1);
|
|
613
|
+
if (groupField !== '' && selectedItem_1 && textField) {
|
|
614
|
+
selectedItemIndex = (_a = this.base.getGroupedDataModernMode(data, groupField)) === null || _a === void 0 ? void 0 : _a.map(function (el) { return el[textField]; }).indexOf(selectedItem_1[textField]);
|
|
525
615
|
}
|
|
526
616
|
var selectedItemChanged = !(0, utils_1.areSame)(prevSelectedItem, selectedItem_1, dataItemKey);
|
|
527
617
|
if (opening && virtual) {
|
|
@@ -627,7 +717,7 @@ var DropDownListWithoutContext = /** @class */ (function (_super) {
|
|
|
627
717
|
/**
|
|
628
718
|
* @hidden
|
|
629
719
|
*/
|
|
630
|
-
DropDownListWithoutContext.prototype.onNavigate = function (state, keyCode) {
|
|
720
|
+
DropDownListWithoutContext.prototype.onNavigate = function (state, keyCode, skipItems) {
|
|
631
721
|
var _a = this.props, _b = _a.data, data = _b === void 0 ? [] : _b, defaultItem = _a.defaultItem, dataItemKey = _a.dataItemKey, _c = _a.virtual, virtual = _c === void 0 ? { skip: 0, total: 0, pageSize: 0 } : _c;
|
|
632
722
|
var vs = this.base.vs;
|
|
633
723
|
var value = this.value;
|
|
@@ -636,7 +726,8 @@ var DropDownListWithoutContext = /** @class */ (function (_super) {
|
|
|
636
726
|
current: virtual.skip + index,
|
|
637
727
|
max: (vs.enabled ? virtual.total : data.length) - 1,
|
|
638
728
|
min: defaultItem !== undefined ? -1 : 0,
|
|
639
|
-
keyCode: keyCode
|
|
729
|
+
keyCode: keyCode,
|
|
730
|
+
skipItems: skipItems ? skipItems : undefined
|
|
640
731
|
});
|
|
641
732
|
if (newIndex !== undefined) {
|
|
642
733
|
this.handleItemSelect(newIndex, state);
|
|
@@ -681,18 +772,24 @@ var DropDownListWithoutContext = /** @class */ (function (_super) {
|
|
|
681
772
|
this.renderList()),
|
|
682
773
|
footer && React.createElement("div", { className: "k-list-footer" }, footer)))));
|
|
683
774
|
};
|
|
684
|
-
DropDownListWithoutContext.prototype.
|
|
685
|
-
var filterText = (0, utils_1.isPresent)(this.props.filter) ? this.props.filter : this.state.text;
|
|
686
|
-
var _a = this.props, _b = _a.data, data = _b === void 0 ? [] : _b, _c = _a.virtual, virtual = _c === void 0 ? { skip: 0 } : _c, dataItemKey = _a.dataItemKey, textField = _a.textField, focusedItemIndex = _a.focusedItemIndex;
|
|
775
|
+
DropDownListWithoutContext.prototype.getFocusedIndex = function () {
|
|
687
776
|
var value = this.value;
|
|
688
|
-
var
|
|
689
|
-
var
|
|
690
|
-
if (
|
|
691
|
-
return
|
|
692
|
-
|
|
777
|
+
var _a = this.props, _b = _a.data, data = _b === void 0 ? [] : _b, textField = _a.textField, dataItemKey = _a.dataItemKey, _c = _a.virtual, virtual = _c === void 0 ? { skip: 0 } : _c, _d = _a.focusedItemIndex, focusedItemIndex = _d === void 0 ? utils_1.itemIndexStartsWith : _d, filterable = _a.filterable, _e = _a.skipDisabledItems, skipDisabledItems = _e === void 0 ? true : _e;
|
|
778
|
+
var text = this.props.filter ? this.props.filter : this.state.text;
|
|
779
|
+
if (skipDisabledItems && textField && !text && !value) {
|
|
780
|
+
return data.findIndex(function (i) { return !i.disabled && i[textField]; });
|
|
781
|
+
}
|
|
782
|
+
else if ((0, utils_1.isPresent)(value) && text === undefined || filterable && text === '') {
|
|
783
|
+
return data.findIndex(function (i) { return (0, utils_1.areSame)(i, value, dataItemKey); });
|
|
784
|
+
}
|
|
785
|
+
else if (text) {
|
|
786
|
+
if (this._lastKeypressIsFilter) {
|
|
787
|
+
return focusedItemIndex(data, text, textField);
|
|
788
|
+
}
|
|
789
|
+
return data.findIndex(function (i) { return (0, utils_1.areSame)(i, value, dataItemKey); });
|
|
693
790
|
}
|
|
694
791
|
else {
|
|
695
|
-
return
|
|
792
|
+
return virtual.skip === 0 ? 0 : -1;
|
|
696
793
|
}
|
|
697
794
|
};
|
|
698
795
|
DropDownListWithoutContext.prototype.focusElement = function (element) {
|
|
@@ -723,11 +820,20 @@ var DropDownListWithoutContext = /** @class */ (function (_super) {
|
|
|
723
820
|
;
|
|
724
821
|
};
|
|
725
822
|
;
|
|
823
|
+
DropDownListWithoutContext.prototype.resetValueIfDisabledItem = function () {
|
|
824
|
+
var data = this.props.data;
|
|
825
|
+
var state = this.base.initState();
|
|
826
|
+
var focusedIndex = this.getFocusedIndex();
|
|
827
|
+
if (focusedIndex !== undefined && focusedIndex !== -1 && data && data[focusedIndex].disabled) {
|
|
828
|
+
this.triggerOnChange(null, state);
|
|
829
|
+
this.applyState(state);
|
|
830
|
+
}
|
|
831
|
+
};
|
|
726
832
|
DropDownListWithoutContext.displayName = 'DropDownList';
|
|
727
833
|
/**
|
|
728
834
|
* @hidden
|
|
729
835
|
*/
|
|
730
|
-
DropDownListWithoutContext.propTypes = __assign({ delay: PropTypes.number, ignoreCase: PropTypes.bool, iconClassName: PropTypes.string, svgIcon: kendo_react_common_1.svgIconPropType, defaultItem: PropTypes.any, valueRender: PropTypes.func, valueMap: PropTypes.func, validationMessage: PropTypes.string, required: PropTypes.bool, id: PropTypes.string, ariaLabelledBy: PropTypes.string, ariaDescribedBy: PropTypes.string, ariaLabel: PropTypes.string, leftRightKeysNavigation: PropTypes.bool, title: PropTypes.string, groupField: PropTypes.string, list: PropTypes.any }, DropDownBase_1.default.propTypes);
|
|
836
|
+
DropDownListWithoutContext.propTypes = __assign({ delay: PropTypes.number, ignoreCase: PropTypes.bool, iconClassName: PropTypes.string, svgIcon: kendo_react_common_1.svgIconPropType, defaultItem: PropTypes.any, valueRender: PropTypes.func, valueMap: PropTypes.func, validationMessage: PropTypes.string, required: PropTypes.bool, id: PropTypes.string, ariaLabelledBy: PropTypes.string, ariaDescribedBy: PropTypes.string, ariaLabel: PropTypes.string, leftRightKeysNavigation: PropTypes.bool, title: PropTypes.string, groupField: PropTypes.string, list: PropTypes.any, skipDisabledItems: PropTypes.bool }, DropDownBase_1.default.propTypes);
|
|
731
837
|
/**
|
|
732
838
|
* @hidden
|
|
733
839
|
*/
|
|
@@ -319,4 +319,8 @@ export interface DropDownListProps extends FormComponentProps {
|
|
|
319
319
|
* @hidden
|
|
320
320
|
*/
|
|
321
321
|
groupMode?: string;
|
|
322
|
+
/**
|
|
323
|
+
* Defines if DropDownList's disabled items will be skipped or focused when navigating through the list of items using a keyboard. Defaults to `true`.
|
|
324
|
+
*/
|
|
325
|
+
skipDisabledItems?: boolean;
|
|
322
326
|
}
|
|
@@ -118,7 +118,8 @@ exports.MultiColumnComboBox = React.forwardRef(function (directProps, ref) {
|
|
|
118
118
|
'k-table-alt-row': liProps.index % 2 !== 0,
|
|
119
119
|
'k-focus': liProps.focused,
|
|
120
120
|
'k-selected': liProps.selected,
|
|
121
|
-
'k-first': Boolean(group)
|
|
121
|
+
'k-first': Boolean(group),
|
|
122
|
+
'k-disabled': liProps.dataItem.disabled
|
|
122
123
|
}) }), children);
|
|
123
124
|
return props.itemRender ? props.itemRender.call(undefined, rendering, liProps) : rendering;
|
|
124
125
|
}, [columns, props.groupField, props.itemRender, props.data, skip]);
|
|
@@ -42,6 +42,7 @@ export declare class MultiSelectWithoutContext extends React.Component<MultiSele
|
|
|
42
42
|
adaptive: PropTypes.Requireable<boolean>;
|
|
43
43
|
adaptiveTitle: PropTypes.Requireable<string>;
|
|
44
44
|
onCancel: PropTypes.Requireable<(...args: any[]) => any>;
|
|
45
|
+
skipDisabledItems: PropTypes.Requireable<boolean>;
|
|
45
46
|
filterable: PropTypes.Requireable<boolean>;
|
|
46
47
|
filter: PropTypes.Requireable<string>;
|
|
47
48
|
virtual: PropTypes.Requireable<PropTypes.InferProps<{
|
|
@@ -91,6 +92,7 @@ export declare class MultiSelectWithoutContext extends React.Component<MultiSele
|
|
|
91
92
|
rounded: "small" | "medium" | "full" | "large" | null | undefined;
|
|
92
93
|
fillMode: "flat" | "outline" | "solid" | null | undefined;
|
|
93
94
|
groupMode: string | undefined;
|
|
95
|
+
skipDisabledItems: boolean;
|
|
94
96
|
popupSettings: {
|
|
95
97
|
height: string;
|
|
96
98
|
};
|
|
@@ -150,7 +152,7 @@ export declare class MultiSelectWithoutContext extends React.Component<MultiSele
|
|
|
150
152
|
/** @hidden */
|
|
151
153
|
onTagDelete: (itemsToRemove: Array<any>, event: React.MouseEvent<HTMLSpanElement>) => void;
|
|
152
154
|
/** @hidden */
|
|
153
|
-
onNavigate(state: MultiSelectInternalState, keyCode: number): void;
|
|
155
|
+
onNavigate(state: MultiSelectInternalState, keyCode: number, skipItems?: number): void;
|
|
154
156
|
/** @hidden */
|
|
155
157
|
itemFocus: (index: number, state: MultiSelectInternalState) => void;
|
|
156
158
|
/** @hidden */
|
|
@@ -212,9 +212,11 @@ var MultiSelectWithoutContext = /** @class */ (function (_super) {
|
|
|
212
212
|
_this.applyState(state);
|
|
213
213
|
};
|
|
214
214
|
_this.onInputKeyDown = function (event) {
|
|
215
|
+
var _a = _this.props, _b = _a.data, data = _b === void 0 ? [] : _b, textField = _a.textField, groupField = _a.groupField;
|
|
215
216
|
var keyCode = event.keyCode;
|
|
216
217
|
var text = _this.props.filter !== undefined ? _this.props.filter : _this.state.text;
|
|
217
|
-
var
|
|
218
|
+
var opened = _this.props.opened !== undefined ? _this.props.opened : _this.state.opened;
|
|
219
|
+
var _c = _this.getFocusedState(), focusedItem = _c.focusedItem, focusedIndex = _c.focusedIndex;
|
|
218
220
|
var state = _this.base.initState();
|
|
219
221
|
state.syntheticEvent = event;
|
|
220
222
|
if (!text && _this.value.length > 0 &&
|
|
@@ -233,14 +235,74 @@ var MultiSelectWithoutContext = /** @class */ (function (_super) {
|
|
|
233
235
|
togglePopup();
|
|
234
236
|
}
|
|
235
237
|
else if (keyCode === kendo_react_common_1.Keys.up || keyCode === kendo_react_common_1.Keys.down) {
|
|
238
|
+
if (groupField !== '' && textField) {
|
|
239
|
+
if (!_this.props.skipDisabledItems && opened) {
|
|
240
|
+
_this.onNavigate(state, keyCode);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
var newIndex = 0;
|
|
244
|
+
if (keyCode === kendo_react_common_1.Keys.down || keyCode === kendo_react_common_1.Keys.right) {
|
|
245
|
+
var tempnewIndex_1 = data.slice(focusedIndex + 1).find(function (i) { return !i.disabled && i[textField]; });
|
|
246
|
+
newIndex = tempnewIndex_1 && data.findIndex(function (el) { return el[textField] === tempnewIndex_1[textField]; });
|
|
247
|
+
}
|
|
248
|
+
else if (keyCode === kendo_react_common_1.Keys.up || keyCode === kendo_react_common_1.Keys.left) {
|
|
249
|
+
var dataToSearch = void 0;
|
|
250
|
+
if (focusedIndex === -1) {
|
|
251
|
+
dataToSearch = data;
|
|
252
|
+
newIndex = data.findIndex(function (i) { return !i.disabled && i[textField]; });
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
dataToSearch = data.slice(0, focusedIndex);
|
|
256
|
+
var tempnewIndex_2 = dataToSearch.pop();
|
|
257
|
+
while (tempnewIndex_2 && tempnewIndex_2.disabled) {
|
|
258
|
+
tempnewIndex_2 = dataToSearch.pop();
|
|
259
|
+
}
|
|
260
|
+
newIndex = tempnewIndex_2 && data.findIndex(function (el) { return el[textField] === tempnewIndex_2[textField]; });
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (newIndex) {
|
|
264
|
+
var skipItems = newIndex - focusedIndex;
|
|
265
|
+
_this.onNavigate(state, keyCode, skipItems);
|
|
266
|
+
}
|
|
267
|
+
else if (newIndex !== undefined) {
|
|
268
|
+
_this.onNavigate(state, keyCode);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
else if (!_this.props.skipDisabledItems && opened) {
|
|
273
|
+
_this.onNavigate(state, keyCode);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
var newIndex = null;
|
|
277
|
+
if (keyCode === kendo_react_common_1.Keys.down || keyCode === kendo_react_common_1.Keys.right) {
|
|
278
|
+
newIndex = data.slice(focusedIndex + 1).find(function (i) { return !i.disabled; });
|
|
279
|
+
}
|
|
280
|
+
else if (keyCode === kendo_react_common_1.Keys.up || keyCode === kendo_react_common_1.Keys.left) {
|
|
281
|
+
var dataTest = data.slice(0, focusedIndex);
|
|
282
|
+
newIndex = dataTest.pop();
|
|
283
|
+
while (newIndex && newIndex.disabled) {
|
|
284
|
+
newIndex = dataTest.pop();
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (newIndex) {
|
|
288
|
+
var skipItems = newIndex.id - focusedIndex - 1;
|
|
289
|
+
_this.onNavigate(state, keyCode, skipItems);
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
_this.onNavigate(state, keyCode);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
_this.applyState(state);
|
|
236
296
|
event.preventDefault();
|
|
237
|
-
_this.onNavigate(state, keyCode);
|
|
238
297
|
}
|
|
239
298
|
else if (keyCode === kendo_react_common_1.Keys.enter) {
|
|
240
299
|
event.preventDefault();
|
|
241
300
|
if (_this.props.allowCustom && text && focusedItem === null) {
|
|
242
301
|
_this.customItemSelect(event);
|
|
243
302
|
}
|
|
303
|
+
else if (focusedItem.disabled) {
|
|
304
|
+
togglePopup();
|
|
305
|
+
}
|
|
244
306
|
else {
|
|
245
307
|
_this.selectFocusedItem(event);
|
|
246
308
|
}
|
|
@@ -685,7 +747,7 @@ var MultiSelectWithoutContext = /** @class */ (function (_super) {
|
|
|
685
747
|
}
|
|
686
748
|
};
|
|
687
749
|
/** @hidden */
|
|
688
|
-
MultiSelectWithoutContext.prototype.onNavigate = function (state, keyCode) {
|
|
750
|
+
MultiSelectWithoutContext.prototype.onNavigate = function (state, keyCode, skipItems) {
|
|
689
751
|
var _a = this.props, allowCustom = _a.allowCustom, _b = _a.data, data = _b === void 0 ? [] : _b;
|
|
690
752
|
var text = this.props.filter !== undefined ? this.props.filter : this.state.text;
|
|
691
753
|
var _c = this.getFocusedState(), focusedType = _c.focusedType, focusedIndex = _c.focusedIndex;
|
|
@@ -703,7 +765,8 @@ var MultiSelectWithoutContext = /** @class */ (function (_super) {
|
|
|
703
765
|
keyCode: keyCode,
|
|
704
766
|
current: focusedIndex,
|
|
705
767
|
max: (vs.enabled ? vs.total : data.length) - 1,
|
|
706
|
-
min: customItem ? -1 : 0
|
|
768
|
+
min: customItem ? -1 : 0,
|
|
769
|
+
skipItems: skipItems ? skipItems : undefined
|
|
707
770
|
});
|
|
708
771
|
if (newFocused !== undefined) {
|
|
709
772
|
this.itemFocus(newFocused, state);
|
|
@@ -830,9 +893,9 @@ var MultiSelectWithoutContext = /** @class */ (function (_super) {
|
|
|
830
893
|
this.setItems(items, this._valueItemsDuringOnChange);
|
|
831
894
|
state.events.push({ type: 'onChange' });
|
|
832
895
|
};
|
|
833
|
-
MultiSelectWithoutContext.prototype.selectFocusedItem = function (event) {
|
|
896
|
+
MultiSelectWithoutContext.prototype.selectFocusedItem = function (event, itemtoSelect) {
|
|
834
897
|
var _a = this.props, _b = _a.data, data = _b === void 0 ? [] : _b, virtual = _a.virtual;
|
|
835
|
-
var focusedIndex = this.getFocusedState().focusedIndex;
|
|
898
|
+
var focusedIndex = (itemtoSelect || this.getFocusedState()).focusedIndex;
|
|
836
899
|
var skip = virtual ? virtual.skip : 0;
|
|
837
900
|
if (data[focusedIndex - skip] !== undefined) {
|
|
838
901
|
this.handleItemClick(focusedIndex, event);
|
|
@@ -845,7 +908,7 @@ var MultiSelectWithoutContext = /** @class */ (function (_super) {
|
|
|
845
908
|
MultiSelectWithoutContext.prototype.getFocusedState = function () {
|
|
846
909
|
var focusedIndex = this.state.focusedIndex;
|
|
847
910
|
var text = this.props.filter !== undefined ? this.props.filter : this.state.text;
|
|
848
|
-
var _a = this.props, allowCustom = _a.allowCustom, _b = _a.data, data = _b === void 0 ? [] : _b, dataItemKey = _a.dataItemKey, virtual = _a.virtual, textField = _a.textField, _c = _a.focusedItemIndex, focusedItemIndex = _c === void 0 ? utils_1.itemIndexStartsWith : _c;
|
|
911
|
+
var _a = this.props, allowCustom = _a.allowCustom, _b = _a.data, data = _b === void 0 ? [] : _b, dataItemKey = _a.dataItemKey, virtual = _a.virtual, textField = _a.textField, _c = _a.focusedItemIndex, focusedItemIndex = _c === void 0 ? utils_1.itemIndexStartsWith : _c, skipDisabledItems = _a.skipDisabledItems;
|
|
849
912
|
var skip = (virtual && virtual.skip) || 0;
|
|
850
913
|
var focusedInd;
|
|
851
914
|
if (focusedIndex !== undefined) {
|
|
@@ -879,6 +942,14 @@ var MultiSelectWithoutContext = /** @class */ (function (_super) {
|
|
|
879
942
|
}
|
|
880
943
|
return { focusedType: FocusedItemType.None, focusedIndex: -1 };
|
|
881
944
|
}
|
|
945
|
+
else if (skipDisabledItems && textField && !text && skip === 0) {
|
|
946
|
+
var newIndex = data.findIndex(function (i) { return !i.disabled && i[textField]; });
|
|
947
|
+
return {
|
|
948
|
+
focusedIndex: newIndex,
|
|
949
|
+
focusedItem: data[newIndex - skip],
|
|
950
|
+
focusedType: FocusedItemType.ListItem
|
|
951
|
+
};
|
|
952
|
+
}
|
|
882
953
|
return skip === 0 ?
|
|
883
954
|
{ focusedItem: data[0], focusedIndex: 0, focusedType: FocusedItemType.ListItem } :
|
|
884
955
|
{ focusedType: FocusedItemType.None, focusedIndex: -1 };
|
|
@@ -906,9 +977,9 @@ var MultiSelectWithoutContext = /** @class */ (function (_super) {
|
|
|
906
977
|
MultiSelectWithoutContext.propTypes = __assign(__assign({}, DropDownBase_1.default.propTypes), { autoClose: PropTypes.bool, value: PropTypes.arrayOf(PropTypes.any), defaultValue: PropTypes.arrayOf(PropTypes.any), dataItemKey: PropTypes.string, placeholder: PropTypes.string, tags: PropTypes.arrayOf(PropTypes.shape({
|
|
907
978
|
text: PropTypes.string,
|
|
908
979
|
data: PropTypes.arrayOf(PropTypes.any)
|
|
909
|
-
})), tagRender: PropTypes.func, id: PropTypes.string, ariaLabelledBy: PropTypes.string, ariaDescribedBy: PropTypes.string, groupField: PropTypes.string, list: PropTypes.any, adaptive: PropTypes.bool, adaptiveTitle: PropTypes.string, onCancel: PropTypes.func });
|
|
980
|
+
})), tagRender: PropTypes.func, id: PropTypes.string, ariaLabelledBy: PropTypes.string, ariaDescribedBy: PropTypes.string, groupField: PropTypes.string, list: PropTypes.any, adaptive: PropTypes.bool, adaptiveTitle: PropTypes.string, onCancel: PropTypes.func, skipDisabledItems: PropTypes.bool });
|
|
910
981
|
/** @hidden */
|
|
911
|
-
MultiSelectWithoutContext.defaultProps = __assign(__assign({}, DropDownBase_1.default.defaultProps), { autoClose: true, required: false, size: 'medium', rounded: 'medium', fillMode: 'solid', groupMode: 'modern' });
|
|
982
|
+
MultiSelectWithoutContext.defaultProps = __assign(__assign({}, DropDownBase_1.default.defaultProps), { autoClose: true, required: false, size: 'medium', rounded: 'medium', fillMode: 'solid', groupMode: 'modern', skipDisabledItems: true });
|
|
912
983
|
return MultiSelectWithoutContext;
|
|
913
984
|
}(React.Component));
|
|
914
985
|
exports.MultiSelectWithoutContext = MultiSelectWithoutContext;
|
|
@@ -307,4 +307,8 @@ export interface MultiSelectProps extends FormComponentProps {
|
|
|
307
307
|
* Specifies the text that is rendered as title in the adaptive popup.
|
|
308
308
|
*/
|
|
309
309
|
adaptiveTitle?: string;
|
|
310
|
+
/**
|
|
311
|
+
* Defines if MultiSelect's disabled items will be skipped or focused when navigating through the list of items using a keyboard. Defaults to `true`.
|
|
312
|
+
*/
|
|
313
|
+
skipDisabledItems?: boolean;
|
|
310
314
|
}
|
package/dist/npm/common/List.js
CHANGED
|
@@ -37,7 +37,7 @@ var List = /** @class */ (function (_super) {
|
|
|
37
37
|
return data.map(function (item, index) {
|
|
38
38
|
var realIndex = skip + index;
|
|
39
39
|
var idIndex = skip + index + groupCounter;
|
|
40
|
-
var selected = highlightSelected &&
|
|
40
|
+
var selected = item.disabled ? false : highlightSelected &&
|
|
41
41
|
((!isArray && (0, utils_1.areSame)(item, value, valueField)) ||
|
|
42
42
|
(isArray && value.findIndex(function (i) { return (0, utils_1.areSame)(i, item, valueField); }) !== -1));
|
|
43
43
|
var group = undefined;
|
|
@@ -52,7 +52,7 @@ var List = /** @class */ (function (_super) {
|
|
|
52
52
|
group !== undefined && groupMode === 'modern' ? groupCounter += 1 : '';
|
|
53
53
|
return [
|
|
54
54
|
group !== undefined && groupMode === 'modern' && React.createElement(ListGroupItem_1.default, { id: "option-".concat(optionsGuid, "-").concat(idIndex), virtual: virtual, key: realIndex + '-group-item', group: group, isMultiColumn: isMultiColumn, render: groupHeaderItemRender }),
|
|
55
|
-
React.createElement(ListItem_1.default, { id: "option-".concat(optionsGuid, "-").concat(group !== undefined && groupMode === 'modern' ? idIndex + 1 : idIndex), virtual: virtual, dataItem: item, groupMode: groupMode, selected: selected, focused: focusedIndex === index, index: realIndex, key: realIndex, onClick: _this.props.onClick, textField: textField, group: group, render: itemRender })
|
|
55
|
+
React.createElement(ListItem_1.default, { id: "option-".concat(optionsGuid, "-").concat(group !== undefined && groupMode === 'modern' ? idIndex + 1 : idIndex), virtual: virtual, dataItem: item, groupMode: groupMode, selected: selected, focused: focusedIndex === index, index: realIndex, key: realIndex, onClick: _this.props.onClick, textField: textField, group: group, render: itemRender, disabled: item.disabled })
|
|
56
56
|
];
|
|
57
57
|
});
|
|
58
58
|
};
|
|
@@ -30,11 +30,12 @@ var ListItem = /** @class */ (function (_super) {
|
|
|
30
30
|
return _this;
|
|
31
31
|
}
|
|
32
32
|
ListItem.prototype.render = function () {
|
|
33
|
-
var _a = this.props, selected = _a.selected, group = _a.group, dataItem = _a.dataItem, virtual = _a.virtual, groupMode = _a.groupMode, renderer = _a.render;
|
|
34
|
-
var item = (React.createElement("li", { id: this.props.id, role: "option", "aria-selected": selected, className: (0, kendo_react_common_1.classNames)('k-list-item', {
|
|
33
|
+
var _a = this.props, selected = _a.selected, group = _a.group, dataItem = _a.dataItem, virtual = _a.virtual, groupMode = _a.groupMode, disabled = _a.disabled, renderer = _a.render;
|
|
34
|
+
var item = (React.createElement("li", { id: this.props.id, role: "option", "aria-selected": selected, "aria-disabled": disabled ? true : undefined, className: (0, kendo_react_common_1.classNames)('k-list-item', {
|
|
35
35
|
'k-selected': selected,
|
|
36
36
|
'k-focus': this.props.focused,
|
|
37
|
-
'k-first': Boolean(group) && groupMode === 'classic'
|
|
37
|
+
'k-first': Boolean(group) && groupMode === 'classic',
|
|
38
|
+
'k-disabled': disabled
|
|
38
39
|
}), onClick: this.handleClick, style: { position: virtual ? 'relative' : 'unset' } },
|
|
39
40
|
React.createElement("span", { className: 'k-list-item-text' }, (0, utils_1.getItemValue)(dataItem, this.props.textField).toString()),
|
|
40
41
|
group !== undefined && groupMode === 'classic' ? React.createElement("div", { className: "k-list-item-group-label" }, group) : null));
|
|
@@ -12,10 +12,10 @@ var Navigation = /** @class */ (function () {
|
|
|
12
12
|
Navigation.prototype.navigate = function (args) {
|
|
13
13
|
var keyCode = args.keyCode;
|
|
14
14
|
if (keyCode === kendo_react_common_1.Keys.up || keyCode === kendo_react_common_1.Keys.left) {
|
|
15
|
-
return this.next({ current: args.current, min: args.min, max: args.max, step: -1 });
|
|
15
|
+
return this.next({ current: args.current, min: args.min, max: args.max, step: args.skipItems ? args.skipItems : -1 });
|
|
16
16
|
}
|
|
17
17
|
else if (keyCode === kendo_react_common_1.Keys.down || keyCode === kendo_react_common_1.Keys.right) {
|
|
18
|
-
return this.next({ current: args.current, min: args.min, max: args.max, step: 1 });
|
|
18
|
+
return this.next({ current: args.current, min: args.min, max: args.max, step: args.skipItems ? args.skipItems : 1 });
|
|
19
19
|
}
|
|
20
20
|
else if (keyCode === kendo_react_common_1.Keys.home) {
|
|
21
21
|
return 0;
|
|
@@ -8,7 +8,7 @@ exports.packageMetadata = {
|
|
|
8
8
|
name: '@progress/kendo-react-dropdowns',
|
|
9
9
|
productName: 'KendoReact',
|
|
10
10
|
productCodes: ['KENDOUIREACT', 'KENDOUICOMPLETE'],
|
|
11
|
-
publishDate:
|
|
11
|
+
publishDate: 1691577562,
|
|
12
12
|
version: '',
|
|
13
13
|
licensingDocsUrl: 'https://www.telerik.com/kendo-react-ui/my-license/?utm_medium=product&utm_source=kendoreact&utm_campaign=kendo-ui-react-purchase-license-keys-warning'
|
|
14
14
|
};
|