@progress/kendo-vue-dropdowns 3.11.0-dev.202305230623 → 3.11.0-dev.202305230751
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-vue-dropdowns.js +1 -1
- package/dist/es/AutoComplete/AutoComplete.js +108 -12
- package/dist/es/AutoComplete/AutoCompleteProps.d.ts +12 -0
- package/dist/es/ComboBox/ComboBox.js +115 -16
- package/dist/es/ComboBox/ComboBoxProps.d.ts +12 -0
- package/dist/es/DropDownList/DropDownList.js +101 -14
- package/dist/es/DropDownList/DropDownListProps.d.ts +12 -0
- package/dist/es/MultiSelect/MultiSelect.js +116 -26
- package/dist/es/MultiSelect/MultiSelectProps.d.ts +12 -0
- package/dist/es/common/DropDownBase.d.ts +2 -0
- package/dist/es/common/DropDownBase.js +20 -0
- package/dist/es/common/GroupStickyHeader.d.ts +29 -0
- package/dist/es/common/GroupStickyHeader.js +59 -0
- package/dist/es/common/List.d.ts +2 -0
- package/dist/es/common/List.js +53 -25
- package/dist/es/common/ListGroupItem.d.ts +41 -0
- package/dist/es/common/ListGroupItem.js +71 -0
- package/dist/es/common/settings.d.ts +1 -0
- package/dist/es/package-metadata.js +1 -1
- package/dist/esm/AutoComplete/AutoComplete.js +108 -12
- package/dist/esm/AutoComplete/AutoCompleteProps.d.ts +12 -0
- package/dist/esm/ComboBox/ComboBox.js +115 -16
- package/dist/esm/ComboBox/ComboBoxProps.d.ts +12 -0
- package/dist/esm/DropDownList/DropDownList.js +101 -14
- package/dist/esm/DropDownList/DropDownListProps.d.ts +12 -0
- package/dist/esm/MultiSelect/MultiSelect.js +116 -26
- package/dist/esm/MultiSelect/MultiSelectProps.d.ts +12 -0
- package/dist/esm/common/DropDownBase.d.ts +2 -0
- package/dist/esm/common/DropDownBase.js +20 -0
- package/dist/esm/common/GroupStickyHeader.d.ts +29 -0
- package/dist/esm/common/GroupStickyHeader.js +59 -0
- package/dist/esm/common/List.d.ts +2 -0
- package/dist/esm/common/List.js +53 -25
- package/dist/esm/common/ListGroupItem.d.ts +41 -0
- package/dist/esm/common/ListGroupItem.js +71 -0
- package/dist/esm/common/settings.d.ts +1 -0
- package/dist/esm/package-metadata.js +1 -1
- package/dist/npm/AutoComplete/AutoComplete.js +108 -12
- package/dist/npm/AutoComplete/AutoCompleteProps.d.ts +12 -0
- package/dist/npm/ComboBox/ComboBox.js +115 -16
- package/dist/npm/ComboBox/ComboBoxProps.d.ts +12 -0
- package/dist/npm/DropDownList/DropDownList.js +101 -14
- package/dist/npm/DropDownList/DropDownListProps.d.ts +12 -0
- package/dist/npm/MultiSelect/MultiSelect.js +116 -26
- package/dist/npm/MultiSelect/MultiSelectProps.d.ts +12 -0
- package/dist/npm/common/DropDownBase.d.ts +2 -0
- package/dist/npm/common/DropDownBase.js +20 -0
- package/dist/npm/common/GroupStickyHeader.d.ts +29 -0
- package/dist/npm/common/GroupStickyHeader.js +66 -0
- package/dist/npm/common/List.d.ts +2 -0
- package/dist/npm/common/List.js +52 -24
- package/dist/npm/common/ListGroupItem.d.ts +41 -0
- package/dist/npm/common/ListGroupItem.js +78 -0
- package/dist/npm/common/settings.d.ts +1 -0
- package/dist/npm/package-metadata.js +1 -1
- package/package.json +9 -9
|
@@ -26,6 +26,7 @@ var SearchBar_1 = require("./../common/SearchBar");
|
|
|
26
26
|
var ListContainer_1 = require("./../common/ListContainer");
|
|
27
27
|
var List_1 = require("./../common/List");
|
|
28
28
|
var DropDownBase_1 = require("../common/DropDownBase");
|
|
29
|
+
var GroupStickyHeader_1 = require("../common/GroupStickyHeader");
|
|
29
30
|
var ClearButton_1 = require("../common/ClearButton");
|
|
30
31
|
var utils_1 = require("../common/utils");
|
|
31
32
|
var kendo_vue_common_1 = require("@progress/kendo-vue-common");
|
|
@@ -103,6 +104,8 @@ var AutoCompleteVue2 = {
|
|
|
103
104
|
}
|
|
104
105
|
},
|
|
105
106
|
itemRender: [String, Function, Object],
|
|
107
|
+
groupHeaderItemRender: [String, Function, Object],
|
|
108
|
+
groupStickyHeaderItemRender: [String, Function, Object],
|
|
106
109
|
listNoDataRender: [String, Function, Object],
|
|
107
110
|
focusedItemIndex: Function,
|
|
108
111
|
header: [String, Function, Object],
|
|
@@ -133,6 +136,9 @@ var AutoCompleteVue2 = {
|
|
|
133
136
|
validator: function validator(value) {
|
|
134
137
|
return ['small', 'medium', 'large'].includes(value);
|
|
135
138
|
}
|
|
139
|
+
},
|
|
140
|
+
groupField: {
|
|
141
|
+
type: String
|
|
136
142
|
}
|
|
137
143
|
},
|
|
138
144
|
data: function data() {
|
|
@@ -148,7 +154,10 @@ var AutoCompleteVue2 = {
|
|
|
148
154
|
last: ''
|
|
149
155
|
},
|
|
150
156
|
valueDuringOnChange: {},
|
|
151
|
-
suggested: ''
|
|
157
|
+
suggested: '',
|
|
158
|
+
group: undefined,
|
|
159
|
+
isScrolling: false,
|
|
160
|
+
itemHeight: 0
|
|
152
161
|
};
|
|
153
162
|
},
|
|
154
163
|
created: function created() {
|
|
@@ -196,8 +205,12 @@ var AutoCompleteVue2 = {
|
|
|
196
205
|
}
|
|
197
206
|
},
|
|
198
207
|
updated: function updated() {
|
|
199
|
-
var _a
|
|
200
|
-
|
|
208
|
+
var _a;
|
|
209
|
+
var _b = this.$props,
|
|
210
|
+
_c = _b.groupField,
|
|
211
|
+
groupField = _c === void 0 ? '' : _c,
|
|
212
|
+
_d = _b.dataItems,
|
|
213
|
+
dataItems = _d === void 0 ? [] : _d;
|
|
201
214
|
var focusedIndex = this.focusedIndex();
|
|
202
215
|
var focusedItem = dataItems[focusedIndex];
|
|
203
216
|
var dataChanged = this.prevData !== dataItems;
|
|
@@ -212,8 +225,22 @@ var AutoCompleteVue2 = {
|
|
|
212
225
|
// @ts-ignore
|
|
213
226
|
this.base.list = list.list;
|
|
214
227
|
}
|
|
215
|
-
if (
|
|
216
|
-
|
|
228
|
+
if (groupField === '') {
|
|
229
|
+
if (opened && (focusedItemChanged || dataChanged) || opening) {
|
|
230
|
+
this.base.scrollToItem(focusedIndex);
|
|
231
|
+
}
|
|
232
|
+
} else if (!this.isScrolling) {
|
|
233
|
+
var focusedItemIndex = (_a = this.base.getGroupedDataModernMode(dataItems, groupField)) === null || _a === void 0 ? void 0 : _a.indexOf(focusedItem);
|
|
234
|
+
if (opening) {
|
|
235
|
+
// Resets the sticky header group value for scenarios with open/close of component's popup
|
|
236
|
+
if (dataItems && dataItems.length !== 0) {
|
|
237
|
+
this.base.resetGroupStickyHeader(dataItems[0][groupField], this);
|
|
238
|
+
}
|
|
239
|
+
this.base.scrollToItem(focusedItemIndex);
|
|
240
|
+
}
|
|
241
|
+
if (opened && prevOpened && focusedItemChanged) {
|
|
242
|
+
this.base.scrollToItem(focusedItemIndex);
|
|
243
|
+
}
|
|
217
244
|
}
|
|
218
245
|
this.setValidity();
|
|
219
246
|
},
|
|
@@ -383,6 +410,10 @@ var AutoCompleteVue2 = {
|
|
|
383
410
|
this.togglePopup(state);
|
|
384
411
|
}
|
|
385
412
|
state.data.focusedItem = undefined;
|
|
413
|
+
// Resets the value of the StickyHeader when filtering the data or just entering symbols in the input
|
|
414
|
+
if (this.prevData && this.prevData.length !== this.$props.dataItems) {
|
|
415
|
+
state.data.group = undefined;
|
|
416
|
+
}
|
|
386
417
|
this.applyState(state);
|
|
387
418
|
},
|
|
388
419
|
clearButtonClick: function clearButtonClick(event) {
|
|
@@ -402,6 +433,9 @@ var AutoCompleteVue2 = {
|
|
|
402
433
|
this.applyState(state);
|
|
403
434
|
},
|
|
404
435
|
onInputKeyDown: function onInputKeyDown(event) {
|
|
436
|
+
if (this.isScrolling) {
|
|
437
|
+
this.isScrolling = false;
|
|
438
|
+
}
|
|
405
439
|
var keyCode = event.keyCode;
|
|
406
440
|
var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
|
|
407
441
|
var state = this.base.initState();
|
|
@@ -487,6 +521,39 @@ var AutoCompleteVue2 = {
|
|
|
487
521
|
},
|
|
488
522
|
repositionPopup: function repositionPopup() {
|
|
489
523
|
this.base.repositionPopup();
|
|
524
|
+
},
|
|
525
|
+
onScroll: function onScroll(event) {
|
|
526
|
+
this.isScrolling = true;
|
|
527
|
+
var state = this.base.initState();
|
|
528
|
+
var list = this.base.list;
|
|
529
|
+
var groupField = this.$props.groupField;
|
|
530
|
+
var _a = this.$props.dataItems,
|
|
531
|
+
dataItems = _a === void 0 ? [] : _a;
|
|
532
|
+
if (!groupField || !dataItems.length) {
|
|
533
|
+
return;
|
|
534
|
+
}
|
|
535
|
+
var itemHeight = this.itemHeight || (list.children ? list.children[0].offsetHeight : 0);
|
|
536
|
+
var target = event.target;
|
|
537
|
+
var scrollTop = target.scrollTop;
|
|
538
|
+
if (groupField) {
|
|
539
|
+
dataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
|
|
540
|
+
}
|
|
541
|
+
var group = dataItems[0][groupField];
|
|
542
|
+
if (itemHeight === 0) {
|
|
543
|
+
itemHeight = 28;
|
|
544
|
+
}
|
|
545
|
+
for (var i = 1; i < dataItems.length; i++) {
|
|
546
|
+
if (itemHeight * i > scrollTop) {
|
|
547
|
+
break;
|
|
548
|
+
}
|
|
549
|
+
if (dataItems[i] && dataItems[i][groupField]) {
|
|
550
|
+
group = dataItems[i][groupField];
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
if (group !== this.group) {
|
|
554
|
+
state.data.group = group;
|
|
555
|
+
this.applyState(state);
|
|
556
|
+
}
|
|
490
557
|
}
|
|
491
558
|
},
|
|
492
559
|
render: function render(createElement) {
|
|
@@ -578,11 +645,15 @@ var AutoCompleteVue2 = {
|
|
|
578
645
|
var renderList = function renderList() {
|
|
579
646
|
var _a = this.$props,
|
|
580
647
|
textField = _a.textField,
|
|
581
|
-
|
|
582
|
-
|
|
648
|
+
groupField = _a.groupField;
|
|
649
|
+
var dataItems = this.$props.dataItems || [];
|
|
583
650
|
var itemRender = kendo_vue_common_1.templateRendering.call(this, this.$props.itemRender, kendo_vue_common_1.getListeners.call(this));
|
|
651
|
+
var groupHeaderItemRender = kendo_vue_common_1.templateRendering.call(this, this.$props.groupHeaderItemRender, kendo_vue_common_1.getListeners.call(this));
|
|
584
652
|
var listNoDataRender = kendo_vue_common_1.templateRendering.call(this, this.$props.listNoDataRender, kendo_vue_common_1.getListeners.call(this));
|
|
585
653
|
var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
|
|
654
|
+
if (groupField) {
|
|
655
|
+
dataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
|
|
656
|
+
}
|
|
586
657
|
return (
|
|
587
658
|
// @ts-ignore
|
|
588
659
|
h(List_1.List, {
|
|
@@ -602,7 +673,9 @@ var AutoCompleteVue2 = {
|
|
|
602
673
|
},
|
|
603
674
|
wrapperCssClass: "k-list-content",
|
|
604
675
|
itemRender: itemRender,
|
|
605
|
-
|
|
676
|
+
groupHeaderItemRender: groupHeaderItemRender,
|
|
677
|
+
noDataRender: listNoDataRender,
|
|
678
|
+
groupField: groupField
|
|
606
679
|
},
|
|
607
680
|
show: opened,
|
|
608
681
|
dataItems: dataItems.slice(),
|
|
@@ -619,10 +692,14 @@ var AutoCompleteVue2 = {
|
|
|
619
692
|
wrapperCssClass: "k-list-content",
|
|
620
693
|
onListclick: this.handleItemClick,
|
|
621
694
|
on: this.v3 ? undefined : {
|
|
622
|
-
"listclick": this.handleItemClick
|
|
695
|
+
"listclick": this.handleItemClick,
|
|
696
|
+
"scroll": this.onScroll
|
|
623
697
|
},
|
|
624
698
|
itemRender: itemRender,
|
|
625
|
-
|
|
699
|
+
groupHeaderItemRender: groupHeaderItemRender,
|
|
700
|
+
noDataRender: listNoDataRender,
|
|
701
|
+
groupField: groupField,
|
|
702
|
+
onScroll: this.onScroll
|
|
626
703
|
})
|
|
627
704
|
);
|
|
628
705
|
};
|
|
@@ -631,6 +708,7 @@ var AutoCompleteVue2 = {
|
|
|
631
708
|
var _a;
|
|
632
709
|
var headerTemplate = kendo_vue_common_1.templateRendering.call(this, this.$props.header, kendo_vue_common_1.getListeners.call(this));
|
|
633
710
|
var footerTemplate = kendo_vue_common_1.templateRendering.call(this, this.$props.footer, kendo_vue_common_1.getListeners.call(this));
|
|
711
|
+
var groupStickyHeaderTemplate = kendo_vue_common_1.templateRendering.call(this, this.$props.groupStickyHeaderItemRender, kendo_vue_common_1.getListeners.call(this));
|
|
634
712
|
var header = kendo_vue_common_1.getTemplate.call(this, {
|
|
635
713
|
h: h,
|
|
636
714
|
template: headerTemplate
|
|
@@ -641,6 +719,10 @@ var AutoCompleteVue2 = {
|
|
|
641
719
|
});
|
|
642
720
|
var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
|
|
643
721
|
var popupWidth = popupSettings.width !== undefined ? popupSettings.width : base.popupWidth;
|
|
722
|
+
var dataItems = this.$props.dataItems || [];
|
|
723
|
+
if (this.group === undefined && this.$props.groupField !== undefined) {
|
|
724
|
+
this.group = (0, utils_1.getItemValue)(dataItems[0], this.$props.groupField);
|
|
725
|
+
}
|
|
644
726
|
return (
|
|
645
727
|
// @ts-ignore function children
|
|
646
728
|
h(ListContainer_1.ListContainer, {
|
|
@@ -674,12 +756,26 @@ var AutoCompleteVue2 = {
|
|
|
674
756
|
}, this.v3 ? function () {
|
|
675
757
|
return [header && h("div", {
|
|
676
758
|
"class": "k-list-header"
|
|
677
|
-
}, [header]),
|
|
759
|
+
}, [header]), _this2.group && dataItems.length !== 0 && h(GroupStickyHeader_1.GroupStickyHeader, {
|
|
760
|
+
group: _this2.group,
|
|
761
|
+
attrs: _this2.v3 ? undefined : {
|
|
762
|
+
group: _this2.group,
|
|
763
|
+
render: groupStickyHeaderTemplate
|
|
764
|
+
},
|
|
765
|
+
render: groupStickyHeaderTemplate
|
|
766
|
+
}), renderList.call(_this2), footer && h("div", {
|
|
678
767
|
"class": "k-list-footer"
|
|
679
768
|
}, [footer])];
|
|
680
769
|
} : [header && h("div", {
|
|
681
770
|
"class": "k-list-header"
|
|
682
|
-
}, [header]),
|
|
771
|
+
}, [header]), _this2.group && dataItems.length !== 0 && h(GroupStickyHeader_1.GroupStickyHeader, {
|
|
772
|
+
group: _this2.group,
|
|
773
|
+
attrs: _this2.v3 ? undefined : {
|
|
774
|
+
group: _this2.group,
|
|
775
|
+
render: groupStickyHeaderTemplate
|
|
776
|
+
},
|
|
777
|
+
render: groupStickyHeaderTemplate
|
|
778
|
+
}), renderList.call(_this2), footer && h("div", {
|
|
683
779
|
"class": "k-list-footer"
|
|
684
780
|
}, [footer])])
|
|
685
781
|
);
|
|
@@ -215,4 +215,16 @@ export interface AutoCompleteProps extends FormComponentProps {
|
|
|
215
215
|
* @default `solid`
|
|
216
216
|
*/
|
|
217
217
|
fillMode?: null | 'solid' | 'outline' | 'flat' | string;
|
|
218
|
+
/**
|
|
219
|
+
* Sets the data item field that represents the start of a group. Applicable to objects data.
|
|
220
|
+
*/
|
|
221
|
+
groupField?: string;
|
|
222
|
+
/**
|
|
223
|
+
* Fires when a AutoComplete group header item is about to be rendered. Used to override the default appearance of the group's headers.
|
|
224
|
+
*/
|
|
225
|
+
groupHeaderItemRender?: any;
|
|
226
|
+
/**
|
|
227
|
+
* Fires when a AutoComplete sticky group header item is about to be rendered. Used to override the default appearance of the sticky group header of the component.
|
|
228
|
+
*/
|
|
229
|
+
groupStickyHeaderItemRender?: any;
|
|
218
230
|
}
|
|
@@ -24,6 +24,7 @@ var isV3 = allVue.version && allVue.version[0] === '3';
|
|
|
24
24
|
var ref = allVue.ref;
|
|
25
25
|
var inject = allVue.inject;
|
|
26
26
|
var DropDownBase_1 = require("../common/DropDownBase");
|
|
27
|
+
var GroupStickyHeader_1 = require("../common/GroupStickyHeader");
|
|
27
28
|
var kendo_vue_common_1 = require("@progress/kendo-vue-common");
|
|
28
29
|
var kendo_vue_buttons_1 = require("@progress/kendo-vue-buttons");
|
|
29
30
|
var sizeMap = kendo_vue_common_1.kendoThemeMaps.sizeMap,
|
|
@@ -125,6 +126,8 @@ var ComboBoxVue2 = {
|
|
|
125
126
|
}
|
|
126
127
|
},
|
|
127
128
|
itemRender: [String, Function, Object],
|
|
129
|
+
groupHeaderItemRender: [String, Function, Object],
|
|
130
|
+
groupStickyHeaderItemRender: [String, Function, Object],
|
|
128
131
|
listNoDataRender: [String, Function, Object],
|
|
129
132
|
focusedItemIndex: Function,
|
|
130
133
|
header: [String, Function, Object],
|
|
@@ -174,6 +177,9 @@ var ComboBoxVue2 = {
|
|
|
174
177
|
validator: function validator(value) {
|
|
175
178
|
return ['small', 'medium', 'large'].includes(value);
|
|
176
179
|
}
|
|
180
|
+
},
|
|
181
|
+
groupField: {
|
|
182
|
+
type: String
|
|
177
183
|
}
|
|
178
184
|
},
|
|
179
185
|
inject: {
|
|
@@ -195,7 +201,10 @@ var ComboBoxVue2 = {
|
|
|
195
201
|
_skipFocusEvent: false,
|
|
196
202
|
valueDuringOnChange: {},
|
|
197
203
|
_navigated: false,
|
|
198
|
-
suggested: ''
|
|
204
|
+
suggested: '',
|
|
205
|
+
group: undefined,
|
|
206
|
+
isScrolling: false,
|
|
207
|
+
itemHeight: 0
|
|
199
208
|
};
|
|
200
209
|
},
|
|
201
210
|
created: function created() {
|
|
@@ -234,11 +243,14 @@ var ComboBoxVue2 = {
|
|
|
234
243
|
this.setValidity();
|
|
235
244
|
},
|
|
236
245
|
updated: function updated() {
|
|
237
|
-
var _a
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
246
|
+
var _a;
|
|
247
|
+
var _b = this.$props,
|
|
248
|
+
_c = _b.dataItems,
|
|
249
|
+
dataItems = _c === void 0 ? [] : _c,
|
|
250
|
+
dataItemKey = _b.dataItemKey,
|
|
251
|
+
virtual = _b.virtual,
|
|
252
|
+
groupField = _b.groupField,
|
|
253
|
+
textField = _b.textField;
|
|
242
254
|
var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
|
|
243
255
|
var prevOpened = this.prevOpened !== undefined ? this.prevOpened : this.prevCurrentOpened;
|
|
244
256
|
var opening = !prevOpened && opened;
|
|
@@ -270,17 +282,37 @@ var ComboBoxVue2 = {
|
|
|
270
282
|
var selectedItemIndex = dataItems.findIndex(function (i) {
|
|
271
283
|
return (0, utils_1.areSame)(i, selectedItem, dataItemKey);
|
|
272
284
|
});
|
|
285
|
+
// Needed to calculate the proper item index when in grouping mode
|
|
286
|
+
if (groupField) {
|
|
287
|
+
selectedItemIndex = (_a = this.base.getGroupedDataModernMode(dataItems, groupField)) === null || _a === void 0 ? void 0 : _a.indexOf(selectedItem);
|
|
288
|
+
}
|
|
273
289
|
var selectedItemChanged = !(0, utils_1.areSame)(prevSelectedItem, selectedItem, dataItemKey);
|
|
274
290
|
if (opening && virtual) {
|
|
275
291
|
this.base.scrollToVirtualItem(virtual, selectedItemIndex);
|
|
276
292
|
this.prevCurrentOpened = true;
|
|
277
293
|
} else if (opening && !virtual) {
|
|
278
|
-
|
|
294
|
+
// Resets the sticky header group value for scenarios with open/close of component's popup
|
|
295
|
+
if (dataItems && dataItems.length !== 0) {
|
|
296
|
+
this.base.resetGroupStickyHeader(dataItems[0][groupField], this);
|
|
297
|
+
}
|
|
298
|
+
this.base.scrollToItem(selectedItemIndex);
|
|
279
299
|
this.prevCurrentOpened = true;
|
|
280
300
|
} else if (opened && prevOpened && selectedItem && selectedItemChanged) {
|
|
281
301
|
this.base.scrollToItem(selectedItemIndex);
|
|
282
|
-
} else if (opened && !selectedItem) {
|
|
283
|
-
|
|
302
|
+
} else if (opened && !selectedItem && !this.isScrolling) {
|
|
303
|
+
var groupHeadersBeforeFocus = 0;
|
|
304
|
+
// Handle the items' focusing when working with grouped data
|
|
305
|
+
if (groupField && this.getFocusedIndex() !== -1 && dataItems.length > 0) {
|
|
306
|
+
var focusedElemBeforeGrouping_1 = dataItems[this.getFocusedIndex()][textField];
|
|
307
|
+
var gropedDataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
|
|
308
|
+
var groupedDataIdex = gropedDataItems.findIndex(function (el) {
|
|
309
|
+
return el[textField] === focusedElemBeforeGrouping_1;
|
|
310
|
+
});
|
|
311
|
+
groupHeadersBeforeFocus = gropedDataItems.slice(0, groupedDataIdex).filter(function (el) {
|
|
312
|
+
return Object.keys(el).length === 1;
|
|
313
|
+
}).length;
|
|
314
|
+
}
|
|
315
|
+
this.base.scrollToItem(this.getFocusedIndex() + groupHeadersBeforeFocus);
|
|
284
316
|
}
|
|
285
317
|
}
|
|
286
318
|
if (opening && this.input) {
|
|
@@ -542,6 +574,9 @@ var ComboBoxVue2 = {
|
|
|
542
574
|
},
|
|
543
575
|
onInputKeyDown: function onInputKeyDown(event) {
|
|
544
576
|
var _this = this;
|
|
577
|
+
if (this.isScrolling) {
|
|
578
|
+
this.isScrolling = false;
|
|
579
|
+
}
|
|
545
580
|
var keyCode = event.keyCode;
|
|
546
581
|
var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
|
|
547
582
|
var state = this.base.initState();
|
|
@@ -606,6 +641,10 @@ var ComboBoxVue2 = {
|
|
|
606
641
|
this.base.togglePopup(state);
|
|
607
642
|
}
|
|
608
643
|
this.base.filterChanged(value, state);
|
|
644
|
+
// Resets the value of the StickyHeader when filtering the data or just entering symbols in the input
|
|
645
|
+
if (this.$props.filterable) {
|
|
646
|
+
state.data.group = undefined;
|
|
647
|
+
}
|
|
609
648
|
this.applyState(state);
|
|
610
649
|
},
|
|
611
650
|
clearButtonClick: function clearButtonClick(event) {
|
|
@@ -679,6 +718,39 @@ var ComboBoxVue2 = {
|
|
|
679
718
|
},
|
|
680
719
|
repositionPopup: function repositionPopup() {
|
|
681
720
|
this.base.repositionPopup();
|
|
721
|
+
},
|
|
722
|
+
onScroll: function onScroll(event) {
|
|
723
|
+
this.isScrolling = true;
|
|
724
|
+
var _a = this.base,
|
|
725
|
+
vs = _a.vs,
|
|
726
|
+
list = _a.list;
|
|
727
|
+
vs.scrollHandler(event);
|
|
728
|
+
var state = this.base.initState();
|
|
729
|
+
var groupField = this.$props.groupField;
|
|
730
|
+
var _b = this.$props.dataItems,
|
|
731
|
+
dataItems = _b === void 0 ? [] : _b;
|
|
732
|
+
if (!groupField || !dataItems.length) {
|
|
733
|
+
return;
|
|
734
|
+
}
|
|
735
|
+
var itemHeight = this.itemHeight = this.itemHeight || (vs.enabled ? vs.itemHeight : list ? list.children[0].offsetHeight : 0);
|
|
736
|
+
var target = event.target;
|
|
737
|
+
var scrollTop = target.scrollTop - vs.skip * itemHeight;
|
|
738
|
+
if (groupField) {
|
|
739
|
+
dataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
|
|
740
|
+
}
|
|
741
|
+
var group = dataItems[0][groupField];
|
|
742
|
+
for (var i = 1; i < dataItems.length; i++) {
|
|
743
|
+
if (itemHeight * i > scrollTop) {
|
|
744
|
+
break;
|
|
745
|
+
}
|
|
746
|
+
if (dataItems[i] && dataItems[i][groupField]) {
|
|
747
|
+
group = dataItems[i][groupField];
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
if (group !== this.group) {
|
|
751
|
+
state.data.group = group;
|
|
752
|
+
this.applyState(state);
|
|
753
|
+
}
|
|
682
754
|
}
|
|
683
755
|
},
|
|
684
756
|
render: function render(createElement) {
|
|
@@ -725,9 +797,10 @@ var ComboBoxVue2 = {
|
|
|
725
797
|
var _a;
|
|
726
798
|
var _b = this.$props,
|
|
727
799
|
dataItemKey = _b.dataItemKey,
|
|
728
|
-
|
|
729
|
-
|
|
800
|
+
groupField = _b.groupField;
|
|
801
|
+
var dataItems = this.$props.dataItems || [];
|
|
730
802
|
var itemRender = kendo_vue_common_1.templateRendering.call(this, this.$props.itemRender, kendo_vue_common_1.getListeners.call(this));
|
|
803
|
+
var groupHeaderItemRender = kendo_vue_common_1.templateRendering.call(this, this.$props.groupHeaderItemRender, kendo_vue_common_1.getListeners.call(this));
|
|
731
804
|
var listNoDataRender = kendo_vue_common_1.templateRendering.call(this, this.$props.listNoDataRender, kendo_vue_common_1.getListeners.call(this));
|
|
732
805
|
if (!virtual) {
|
|
733
806
|
virtual = {
|
|
@@ -739,6 +812,9 @@ var ComboBoxVue2 = {
|
|
|
739
812
|
var translate = "translateY(".concat(vs.translate, "px)");
|
|
740
813
|
var focusedIndex = opened ? this.getFocusedIndex() : undefined;
|
|
741
814
|
var value = (0, utils_1.isPresent)(text) && text !== selectedItemText ? null : this.computedValue();
|
|
815
|
+
if (groupField) {
|
|
816
|
+
dataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
|
|
817
|
+
}
|
|
742
818
|
return (
|
|
743
819
|
// @ts-ignore function children
|
|
744
820
|
h(List_1.List, {
|
|
@@ -761,7 +837,9 @@ var ComboBoxVue2 = {
|
|
|
761
837
|
} : undefined,
|
|
762
838
|
skip: skip,
|
|
763
839
|
itemRender: itemRender,
|
|
764
|
-
|
|
840
|
+
groupHeaderItemRender: groupHeaderItemRender,
|
|
841
|
+
noDataRender: listNoDataRender,
|
|
842
|
+
groupField: groupField
|
|
765
843
|
},
|
|
766
844
|
show: opened,
|
|
767
845
|
dataItems: dataItems,
|
|
@@ -783,11 +861,13 @@ var ComboBoxVue2 = {
|
|
|
783
861
|
onListclick: this.handleItemClick,
|
|
784
862
|
on: this.v3 ? undefined : {
|
|
785
863
|
"listclick": this.handleItemClick,
|
|
786
|
-
"scroll":
|
|
864
|
+
"scroll": this.onScroll
|
|
787
865
|
},
|
|
788
866
|
itemRender: itemRender,
|
|
867
|
+
groupHeaderItemRender: groupHeaderItemRender,
|
|
789
868
|
noDataRender: listNoDataRender,
|
|
790
|
-
|
|
869
|
+
groupField: groupField,
|
|
870
|
+
onScroll: this.onScroll
|
|
791
871
|
}, this.v3 ? function () {
|
|
792
872
|
return [renderScrollElement.call(_this2)];
|
|
793
873
|
} : [renderScrollElement.call(_this2)])
|
|
@@ -804,6 +884,7 @@ var ComboBoxVue2 = {
|
|
|
804
884
|
var _a;
|
|
805
885
|
var headerTemplate = kendo_vue_common_1.templateRendering.call(this, this.$props.header, kendo_vue_common_1.getListeners.call(this));
|
|
806
886
|
var footerTemplate = kendo_vue_common_1.templateRendering.call(this, this.$props.footer, kendo_vue_common_1.getListeners.call(this));
|
|
887
|
+
var groupStickyHeaderTemplate = kendo_vue_common_1.templateRendering.call(this, this.$props.groupStickyHeaderItemRender, kendo_vue_common_1.getListeners.call(this));
|
|
807
888
|
var header = kendo_vue_common_1.getTemplate.call(this, {
|
|
808
889
|
h: h,
|
|
809
890
|
template: headerTemplate
|
|
@@ -814,6 +895,10 @@ var ComboBoxVue2 = {
|
|
|
814
895
|
});
|
|
815
896
|
var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
|
|
816
897
|
var popupWidth = popupSettings.width !== undefined ? popupSettings.width : base.popupWidth;
|
|
898
|
+
var dataItems = this.$props.dataItems || [];
|
|
899
|
+
if (this.group === undefined && this.$props.groupField !== undefined) {
|
|
900
|
+
this.group = (0, utils_1.getItemValue)(dataItems[0], this.$props.groupField);
|
|
901
|
+
}
|
|
817
902
|
return (
|
|
818
903
|
// @ts-ignore function children
|
|
819
904
|
h(ListContainer_1.ListContainer, {
|
|
@@ -847,12 +932,26 @@ var ComboBoxVue2 = {
|
|
|
847
932
|
}, this.v3 ? function () {
|
|
848
933
|
return [header && h("div", {
|
|
849
934
|
"class": "k-list-header"
|
|
850
|
-
}, [header]),
|
|
935
|
+
}, [header]), _this3.group && dataItems.length !== 0 && h(GroupStickyHeader_1.GroupStickyHeader, {
|
|
936
|
+
group: _this3.group,
|
|
937
|
+
attrs: _this3.v3 ? undefined : {
|
|
938
|
+
group: _this3.group,
|
|
939
|
+
render: groupStickyHeaderTemplate
|
|
940
|
+
},
|
|
941
|
+
render: groupStickyHeaderTemplate
|
|
942
|
+
}), renderList.call(_this3), footer && h("div", {
|
|
851
943
|
"class": "k-list-footer"
|
|
852
944
|
}, [footer])];
|
|
853
945
|
} : [header && h("div", {
|
|
854
946
|
"class": "k-list-header"
|
|
855
|
-
}, [header]),
|
|
947
|
+
}, [header]), _this3.group && dataItems.length !== 0 && h(GroupStickyHeader_1.GroupStickyHeader, {
|
|
948
|
+
group: _this3.group,
|
|
949
|
+
attrs: _this3.v3 ? undefined : {
|
|
950
|
+
group: _this3.group,
|
|
951
|
+
render: groupStickyHeaderTemplate
|
|
952
|
+
},
|
|
953
|
+
render: groupStickyHeaderTemplate
|
|
954
|
+
}), renderList.call(_this3), footer && h("div", {
|
|
856
955
|
"class": "k-list-footer"
|
|
857
956
|
}, [footer])])
|
|
858
957
|
);
|
|
@@ -250,4 +250,16 @@ export interface ComboBoxProps extends FormComponentProps {
|
|
|
250
250
|
* @default `solid`
|
|
251
251
|
*/
|
|
252
252
|
fillMode?: null | 'solid' | 'outline' | 'flat' | string;
|
|
253
|
+
/**
|
|
254
|
+
* Sets the data item field that represents the start of a group. Applicable to objects data.
|
|
255
|
+
*/
|
|
256
|
+
groupField?: string;
|
|
257
|
+
/**
|
|
258
|
+
* Fires when a ComboBox group header item is about to be rendered. Used to override the default appearance of the group's headers.
|
|
259
|
+
*/
|
|
260
|
+
groupHeaderItemRender?: any;
|
|
261
|
+
/**
|
|
262
|
+
* Fires when a ComboBox sticky group header item is about to be rendered. Used to override the default appearance of the sticky group header of the component.
|
|
263
|
+
*/
|
|
264
|
+
groupStickyHeaderItemRender?: any;
|
|
253
265
|
}
|