@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
|
@@ -31,6 +31,7 @@ var ListFilter_1 = require("../common/ListFilter");
|
|
|
31
31
|
var ListDefaultItem_1 = require("../common/ListDefaultItem");
|
|
32
32
|
var List_1 = require("../common/List");
|
|
33
33
|
var DropDownBase_1 = require("../common/DropDownBase");
|
|
34
|
+
var GroupStickyHeader_1 = require("../common/GroupStickyHeader");
|
|
34
35
|
var main_1 = require("../messages/main");
|
|
35
36
|
var kendo_vue_intl_1 = require("@progress/kendo-vue-intl");
|
|
36
37
|
var utils_1 = require("../common/utils");
|
|
@@ -133,6 +134,8 @@ var DropDownListVue2 = {
|
|
|
133
134
|
}
|
|
134
135
|
},
|
|
135
136
|
itemRender: [String, Function, Object],
|
|
137
|
+
groupHeaderItemRender: [String, Function, Object],
|
|
138
|
+
groupStickyHeaderItemRender: [String, Function, Object],
|
|
136
139
|
listNoDataRender: [String, Function, Object],
|
|
137
140
|
focusedItemIndex: Function,
|
|
138
141
|
header: [String, Function, Object],
|
|
@@ -169,6 +172,9 @@ var DropDownListVue2 = {
|
|
|
169
172
|
validator: function validator(value) {
|
|
170
173
|
return ['small', 'medium', 'large'].includes(value);
|
|
171
174
|
}
|
|
175
|
+
},
|
|
176
|
+
groupField: {
|
|
177
|
+
type: String
|
|
172
178
|
}
|
|
173
179
|
},
|
|
174
180
|
inject: {
|
|
@@ -189,7 +195,10 @@ var DropDownListVue2 = {
|
|
|
189
195
|
},
|
|
190
196
|
_skipFocusEvent: false,
|
|
191
197
|
valueDuringOnChange: {},
|
|
192
|
-
_navigated: false
|
|
198
|
+
_navigated: false,
|
|
199
|
+
group: undefined,
|
|
200
|
+
isScrolling: false,
|
|
201
|
+
itemHeight: 0
|
|
193
202
|
};
|
|
194
203
|
},
|
|
195
204
|
watch: {
|
|
@@ -240,11 +249,14 @@ var DropDownListVue2 = {
|
|
|
240
249
|
this.setValidity();
|
|
241
250
|
},
|
|
242
251
|
updated: function updated() {
|
|
243
|
-
var _a
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
252
|
+
var _a;
|
|
253
|
+
var _b = this.$props,
|
|
254
|
+
_c = _b.dataItems,
|
|
255
|
+
dataItems = _c === void 0 ? [] : _c,
|
|
256
|
+
dataItemKey = _b.dataItemKey,
|
|
257
|
+
virtual = _b.virtual,
|
|
258
|
+
groupField = _b.groupField,
|
|
259
|
+
textField = _b.textField;
|
|
248
260
|
var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
|
|
249
261
|
var prevOpened = this.prevOpened !== undefined ? this.prevOpened : this.prevCurrentOpened;
|
|
250
262
|
var opening = !prevOpened && opened;
|
|
@@ -288,11 +300,19 @@ var DropDownListVue2 = {
|
|
|
288
300
|
var selectedItemIndex = dataItems.findIndex(function (i) {
|
|
289
301
|
return (0, utils_1.areSame)(i, selectedItem_1, dataItemKey);
|
|
290
302
|
});
|
|
303
|
+
// Needed to calculate the proper item index when in grouping mode
|
|
304
|
+
if (groupField) {
|
|
305
|
+
selectedItemIndex = (_a = this.base.getGroupedDataModernMode(dataItems, groupField)) === null || _a === void 0 ? void 0 : _a.indexOf(selectedItem_1);
|
|
306
|
+
}
|
|
291
307
|
var selectedItemChanged = !(0, utils_1.areSame)(prevSelectedItem, selectedItem_1, dataItemKey);
|
|
292
308
|
if (opening && virtual) {
|
|
293
309
|
this.base.scrollToVirtualItem(virtual, selectedItemIndex);
|
|
294
310
|
this.prevCurrentOpened = true;
|
|
295
311
|
} else if (opening && !virtual) {
|
|
312
|
+
// Resets the sticky header group value for scenarios with open/close of component's popup
|
|
313
|
+
if (dataItems && dataItems.length !== 0) {
|
|
314
|
+
this.base.resetGroupStickyHeader(dataItems[0][groupField], this);
|
|
315
|
+
}
|
|
296
316
|
this.base.scrollToItem(selectedItemIndex);
|
|
297
317
|
this.prevCurrentOpened = true;
|
|
298
318
|
} else if (opened && prevOpened && selectedItem_1 && selectedItemChanged && !this._navigated) {
|
|
@@ -493,6 +513,9 @@ var DropDownListVue2 = {
|
|
|
493
513
|
}
|
|
494
514
|
},
|
|
495
515
|
handleKeyDown: function handleKeyDown(event) {
|
|
516
|
+
if (this.isScrolling) {
|
|
517
|
+
this.isScrolling = false;
|
|
518
|
+
}
|
|
496
519
|
var _a = this.$props,
|
|
497
520
|
_b = _a.dataItems,
|
|
498
521
|
dataItems = _b === void 0 ? [] : _b,
|
|
@@ -617,6 +640,8 @@ var DropDownListVue2 = {
|
|
|
617
640
|
state.data.currentText = event.target.value;
|
|
618
641
|
}
|
|
619
642
|
this.base.filterChanged(event.target.value, state);
|
|
643
|
+
// Used to reset the value of the StickyHeader when filtering the data
|
|
644
|
+
state.data.group = undefined;
|
|
620
645
|
this.applyState(state);
|
|
621
646
|
},
|
|
622
647
|
onPopupOpened: function onPopupOpened() {
|
|
@@ -688,6 +713,39 @@ var DropDownListVue2 = {
|
|
|
688
713
|
},
|
|
689
714
|
repositionPopup: function repositionPopup() {
|
|
690
715
|
this.base.repositionPopup();
|
|
716
|
+
},
|
|
717
|
+
onScroll: function onScroll(event) {
|
|
718
|
+
this.isScrolling = true;
|
|
719
|
+
var _a = this.base,
|
|
720
|
+
vs = _a.vs,
|
|
721
|
+
list = _a.list;
|
|
722
|
+
vs.scrollHandler(event);
|
|
723
|
+
var state = this.base.initState();
|
|
724
|
+
var groupField = this.$props.groupField;
|
|
725
|
+
var _b = this.$props.dataItems,
|
|
726
|
+
dataItems = _b === void 0 ? [] : _b;
|
|
727
|
+
if (!groupField || !dataItems.length) {
|
|
728
|
+
return;
|
|
729
|
+
}
|
|
730
|
+
var itemHeight = this.itemHeight = this.itemHeight || (vs.enabled ? vs.itemHeight : list ? list.children[0].offsetHeight : 0);
|
|
731
|
+
var target = event.target;
|
|
732
|
+
var scrollTop = target.scrollTop - vs.skip * itemHeight;
|
|
733
|
+
if (groupField) {
|
|
734
|
+
dataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
|
|
735
|
+
}
|
|
736
|
+
var group = dataItems[0][groupField];
|
|
737
|
+
for (var i = 1; i < dataItems.length; i++) {
|
|
738
|
+
if (itemHeight * i > scrollTop) {
|
|
739
|
+
break;
|
|
740
|
+
}
|
|
741
|
+
if (dataItems[i] && dataItems[i][groupField]) {
|
|
742
|
+
group = dataItems[i][groupField];
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
if (group !== this.group) {
|
|
746
|
+
state.data.group = group;
|
|
747
|
+
this.applyState(state);
|
|
748
|
+
}
|
|
691
749
|
}
|
|
692
750
|
},
|
|
693
751
|
render: function render(createElement) {
|
|
@@ -805,11 +863,18 @@ var DropDownListVue2 = {
|
|
|
805
863
|
};
|
|
806
864
|
var renderList = function renderList() {
|
|
807
865
|
var _this2 = this;
|
|
808
|
-
var
|
|
866
|
+
var _a = this.$props,
|
|
867
|
+
textField = _a.textField,
|
|
868
|
+
groupField = _a.groupField;
|
|
869
|
+
var dataItemsToRender = this.$props.dataItems || [];
|
|
809
870
|
var itemRender = kendo_vue_common_1.templateRendering.call(this, this.$props.itemRender, kendo_vue_common_1.getListeners.call(this));
|
|
871
|
+
var groupHeaderItemRender = kendo_vue_common_1.templateRendering.call(this, this.$props.groupHeaderItemRender, kendo_vue_common_1.getListeners.call(this));
|
|
810
872
|
var listNoDataRender = kendo_vue_common_1.templateRendering.call(this, this.$props.listNoDataRender, kendo_vue_common_1.getListeners.call(this));
|
|
811
873
|
var skip = virtual.skip;
|
|
812
874
|
var translate = "translateY(".concat(vs.translate, "px)");
|
|
875
|
+
if (groupField) {
|
|
876
|
+
dataItemsToRender = this.base.getGroupedDataModernMode(dataItemsToRender, groupField);
|
|
877
|
+
}
|
|
813
878
|
return (
|
|
814
879
|
// @ts-ignore function children
|
|
815
880
|
h(List_1.List, {
|
|
@@ -817,7 +882,7 @@ var DropDownListVue2 = {
|
|
|
817
882
|
attrs: this.v3 ? undefined : {
|
|
818
883
|
id: this.base.listBoxId,
|
|
819
884
|
show: opened,
|
|
820
|
-
dataItems:
|
|
885
|
+
dataItems: dataItemsToRender.slice(),
|
|
821
886
|
focusedIndex: this.focusedIndex(),
|
|
822
887
|
value: this.computedValue(),
|
|
823
888
|
textField: textField,
|
|
@@ -832,10 +897,12 @@ var DropDownListVue2 = {
|
|
|
832
897
|
} : undefined,
|
|
833
898
|
skip: skip,
|
|
834
899
|
itemRender: itemRender,
|
|
835
|
-
|
|
900
|
+
groupHeaderItemRender: groupHeaderItemRender,
|
|
901
|
+
noDataRender: listNoDataRender,
|
|
902
|
+
groupField: groupField
|
|
836
903
|
},
|
|
837
904
|
show: opened,
|
|
838
|
-
dataItems:
|
|
905
|
+
dataItems: dataItemsToRender.slice(),
|
|
839
906
|
focusedIndex: this.focusedIndex(),
|
|
840
907
|
value: this.computedValue(),
|
|
841
908
|
textField: textField,
|
|
@@ -854,11 +921,13 @@ var DropDownListVue2 = {
|
|
|
854
921
|
onListclick: this.handleItemClick,
|
|
855
922
|
on: this.v3 ? undefined : {
|
|
856
923
|
"listclick": this.handleItemClick,
|
|
857
|
-
"scroll":
|
|
924
|
+
"scroll": this.onScroll
|
|
858
925
|
},
|
|
859
926
|
itemRender: itemRender,
|
|
927
|
+
groupHeaderItemRender: groupHeaderItemRender,
|
|
860
928
|
noDataRender: listNoDataRender,
|
|
861
|
-
|
|
929
|
+
groupField: groupField,
|
|
930
|
+
onScroll: this.onScroll
|
|
862
931
|
}, this.v3 ? function () {
|
|
863
932
|
return [renderScrollElement.call(_this2)];
|
|
864
933
|
} : [renderScrollElement.call(_this2)])
|
|
@@ -899,6 +968,7 @@ var DropDownListVue2 = {
|
|
|
899
968
|
var _a;
|
|
900
969
|
var headerTemplate = kendo_vue_common_1.templateRendering.call(this, this.$props.header, kendo_vue_common_1.getListeners.call(this));
|
|
901
970
|
var footerTemplate = kendo_vue_common_1.templateRendering.call(this, this.$props.footer, kendo_vue_common_1.getListeners.call(this));
|
|
971
|
+
var groupStickyHeaderTemplate = kendo_vue_common_1.templateRendering.call(this, this.$props.groupStickyHeaderItemRender, kendo_vue_common_1.getListeners.call(this));
|
|
902
972
|
var header = kendo_vue_common_1.getTemplate.call(this, {
|
|
903
973
|
h: h,
|
|
904
974
|
template: headerTemplate
|
|
@@ -908,6 +978,9 @@ var DropDownListVue2 = {
|
|
|
908
978
|
template: footerTemplate
|
|
909
979
|
});
|
|
910
980
|
var popupWidth = popupSettings.width !== undefined ? popupSettings.width : base.popupWidth;
|
|
981
|
+
if (this.group === undefined && this.$props.groupField !== undefined) {
|
|
982
|
+
this.group = (0, utils_1.getItemValue)(dataItems[0], this.$props.groupField);
|
|
983
|
+
}
|
|
911
984
|
return (
|
|
912
985
|
// @ts-ignore function children
|
|
913
986
|
h(ListContainer_1.ListContainer, {
|
|
@@ -943,12 +1016,26 @@ var DropDownListVue2 = {
|
|
|
943
1016
|
onClose: this.onPopupClosed,
|
|
944
1017
|
onBlur: this.handleBlur
|
|
945
1018
|
}, this.v3 ? function () {
|
|
946
|
-
return [renderListFilter.call(_this3), renderDefaultItem.call(_this3),
|
|
1019
|
+
return [renderListFilter.call(_this3), renderDefaultItem.call(_this3), _this3.group && dataItems.length !== 0 && h(GroupStickyHeader_1.GroupStickyHeader, {
|
|
1020
|
+
group: _this3.group,
|
|
1021
|
+
attrs: _this3.v3 ? undefined : {
|
|
1022
|
+
group: _this3.group,
|
|
1023
|
+
render: groupStickyHeaderTemplate
|
|
1024
|
+
},
|
|
1025
|
+
render: groupStickyHeaderTemplate
|
|
1026
|
+
}), header && h("div", {
|
|
947
1027
|
"class": "k-list-header"
|
|
948
1028
|
}, [header]), renderList.call(_this3), footer && h("div", {
|
|
949
1029
|
"class": "k-list-footer"
|
|
950
1030
|
}, [footer])];
|
|
951
|
-
} : [renderListFilter.call(_this3), renderDefaultItem.call(_this3),
|
|
1031
|
+
} : [renderListFilter.call(_this3), renderDefaultItem.call(_this3), _this3.group && dataItems.length !== 0 && h(GroupStickyHeader_1.GroupStickyHeader, {
|
|
1032
|
+
group: _this3.group,
|
|
1033
|
+
attrs: _this3.v3 ? undefined : {
|
|
1034
|
+
group: _this3.group,
|
|
1035
|
+
render: groupStickyHeaderTemplate
|
|
1036
|
+
},
|
|
1037
|
+
render: groupStickyHeaderTemplate
|
|
1038
|
+
}), header && h("div", {
|
|
952
1039
|
"class": "k-list-header"
|
|
953
1040
|
}, [header]), renderList.call(_this3), footer && h("div", {
|
|
954
1041
|
"class": "k-list-footer"
|
|
@@ -284,4 +284,16 @@ export interface DropDownListProps extends FormComponentProps {
|
|
|
284
284
|
* @default `solid`
|
|
285
285
|
*/
|
|
286
286
|
fillMode?: null | 'solid' | 'outline' | 'flat' | string;
|
|
287
|
+
/**
|
|
288
|
+
* Sets the data item field that represents the start of a group. Applicable to objects data.
|
|
289
|
+
*/
|
|
290
|
+
groupField?: string;
|
|
291
|
+
/**
|
|
292
|
+
* Fires when a DropDownList group header item is about to be rendered. Used to override the default appearance of the group's headers.
|
|
293
|
+
*/
|
|
294
|
+
groupHeaderItemRender?: any;
|
|
295
|
+
/**
|
|
296
|
+
* Fires when a DropDownList sticky group header item is about to be rendered. Used to override the default appearance of the sticky group header of the component.
|
|
297
|
+
*/
|
|
298
|
+
groupStickyHeaderItemRender?: any;
|
|
287
299
|
}
|
|
@@ -39,6 +39,7 @@ var List_1 = require("../common/List");
|
|
|
39
39
|
var TagList_1 = require("./TagList");
|
|
40
40
|
var SearchBar_1 = require("../common/SearchBar");
|
|
41
41
|
var DropDownBase_1 = require("../common/DropDownBase");
|
|
42
|
+
var GroupStickyHeader_1 = require("../common/GroupStickyHeader");
|
|
42
43
|
var ClearButton_1 = require("../common/ClearButton");
|
|
43
44
|
var settings_1 = require("./../common/settings");
|
|
44
45
|
var utils_1 = require("../common/utils");
|
|
@@ -145,6 +146,8 @@ var MultiSelectVue2 = {
|
|
|
145
146
|
}
|
|
146
147
|
},
|
|
147
148
|
itemRender: [String, Function, Object],
|
|
149
|
+
groupHeaderItemRender: [String, Function, Object],
|
|
150
|
+
groupStickyHeaderItemRender: [String, Function, Object],
|
|
148
151
|
listNoDataRender: [String, Function, Object],
|
|
149
152
|
focusedItemIndex: Function,
|
|
150
153
|
virtual: {
|
|
@@ -187,6 +190,9 @@ var MultiSelectVue2 = {
|
|
|
187
190
|
validator: function validator(value) {
|
|
188
191
|
return ['small', 'medium', 'large'].includes(value);
|
|
189
192
|
}
|
|
193
|
+
},
|
|
194
|
+
groupField: {
|
|
195
|
+
type: String
|
|
190
196
|
}
|
|
191
197
|
},
|
|
192
198
|
// @ts-ignore
|
|
@@ -238,7 +244,10 @@ var MultiSelectVue2 = {
|
|
|
238
244
|
last: ''
|
|
239
245
|
},
|
|
240
246
|
suggested: '',
|
|
241
|
-
activedescendant: settings_1.ActiveDescendant.PopupList
|
|
247
|
+
activedescendant: settings_1.ActiveDescendant.PopupList,
|
|
248
|
+
group: undefined,
|
|
249
|
+
isScrolling: false,
|
|
250
|
+
itemHeight: 0
|
|
242
251
|
};
|
|
243
252
|
},
|
|
244
253
|
watch: {
|
|
@@ -255,7 +264,13 @@ var MultiSelectVue2 = {
|
|
|
255
264
|
}
|
|
256
265
|
},
|
|
257
266
|
updated: function updated() {
|
|
258
|
-
var
|
|
267
|
+
var _a;
|
|
268
|
+
var _b = this.$props,
|
|
269
|
+
virtual = _b.virtual,
|
|
270
|
+
_c = _b.groupField,
|
|
271
|
+
groupField = _c === void 0 ? '' : _c,
|
|
272
|
+
_d = _b.dataItems,
|
|
273
|
+
dataItems = _d === void 0 ? [] : _d;
|
|
259
274
|
var skip = virtual ? virtual.skip : 0;
|
|
260
275
|
var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
|
|
261
276
|
var prevOpened = this.prevOpened !== undefined ? this.prevOpened : this.prevCurrentOpened;
|
|
@@ -276,29 +291,38 @@ var MultiSelectVue2 = {
|
|
|
276
291
|
if (scrollElement) {
|
|
277
292
|
this.base.vs.scrollElement = scrollElement;
|
|
278
293
|
}
|
|
279
|
-
if (list &&
|
|
294
|
+
if (list && dataItems.length) {
|
|
280
295
|
// @ts-ignore
|
|
281
296
|
this.base.vs.scrollerRef(list.$el);
|
|
282
297
|
}
|
|
283
298
|
if (!popupSettings.animate && closing) {
|
|
284
299
|
this.onPopupClosed();
|
|
285
300
|
}
|
|
286
|
-
if (
|
|
287
|
-
this.
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
301
|
+
if (!this.isScrolling) {
|
|
302
|
+
if (virtual && this.virtualTotalHasChanged) {
|
|
303
|
+
this.base.vs.calcScrollElementHeight();
|
|
304
|
+
this.base.vs.reset();
|
|
305
|
+
this.virtualTotalHasChanged = false;
|
|
306
|
+
} else {
|
|
307
|
+
var _e = this.getFocusedState(),
|
|
308
|
+
focusedItem = _e.focusedItem,
|
|
309
|
+
focusedIndex = _e.focusedIndex;
|
|
310
|
+
if (groupField !== '') {
|
|
311
|
+
focusedIndex = (_a = this.base.getGroupedDataModernMode(dataItems, groupField)) === null || _a === void 0 ? void 0 : _a.indexOf(focusedItem);
|
|
312
|
+
}
|
|
313
|
+
if (opening && virtual) {
|
|
314
|
+
this.base.scrollToVirtualItem(virtual, focusedIndex - skip);
|
|
315
|
+
this.prevCurrentOpened = true;
|
|
316
|
+
} else if (opening && !virtual) {
|
|
317
|
+
// Resets the sticky header group value for scenarios with open/close of component's popup
|
|
318
|
+
if (dataItems && dataItems.length !== 0) {
|
|
319
|
+
this.base.resetGroupStickyHeader(dataItems[0][groupField], this);
|
|
320
|
+
}
|
|
321
|
+
this.base.scrollToItem(focusedIndex);
|
|
322
|
+
this.prevCurrentOpened = true;
|
|
323
|
+
} else if (opened && prevOpened && focusedItem) {
|
|
324
|
+
this.base.scrollToItem(focusedIndex - skip);
|
|
325
|
+
}
|
|
302
326
|
}
|
|
303
327
|
}
|
|
304
328
|
this.scrollToFocused = false;
|
|
@@ -484,6 +508,10 @@ var MultiSelectVue2 = {
|
|
|
484
508
|
this.base.togglePopup(state);
|
|
485
509
|
}
|
|
486
510
|
this.base.filterChanged(value, state);
|
|
511
|
+
// Resets the value of the StickyHeader when filtering the data or just entering symbols in the input
|
|
512
|
+
if (this.$props.filterable) {
|
|
513
|
+
state.data.group = undefined;
|
|
514
|
+
}
|
|
487
515
|
this.applyState(state);
|
|
488
516
|
},
|
|
489
517
|
clearButtonClick: function clearButtonClick(event) {
|
|
@@ -511,6 +539,9 @@ var MultiSelectVue2 = {
|
|
|
511
539
|
},
|
|
512
540
|
onInputKeyDown: function onInputKeyDown(event) {
|
|
513
541
|
var _this = this;
|
|
542
|
+
if (this.isScrolling) {
|
|
543
|
+
this.isScrolling = false;
|
|
544
|
+
}
|
|
514
545
|
var keyCode = event.keyCode;
|
|
515
546
|
var text = this.$props.filter !== undefined ? this.$props.filter : this.currentText;
|
|
516
547
|
var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
|
|
@@ -800,6 +831,39 @@ var MultiSelectVue2 = {
|
|
|
800
831
|
},
|
|
801
832
|
repositionPopup: function repositionPopup() {
|
|
802
833
|
this.base.repositionPopup();
|
|
834
|
+
},
|
|
835
|
+
onScroll: function onScroll(event) {
|
|
836
|
+
this.isScrolling = true;
|
|
837
|
+
var _a = this.base,
|
|
838
|
+
vs = _a.vs,
|
|
839
|
+
list = _a.list;
|
|
840
|
+
vs.scrollHandler(event);
|
|
841
|
+
var state = this.base.initState();
|
|
842
|
+
var groupField = this.$props.groupField;
|
|
843
|
+
var _b = this.$props.dataItems,
|
|
844
|
+
dataItems = _b === void 0 ? [] : _b;
|
|
845
|
+
if (!groupField || !dataItems.length) {
|
|
846
|
+
return;
|
|
847
|
+
}
|
|
848
|
+
var itemHeight = this.itemHeight = this.itemHeight || (vs.enabled ? vs.itemHeight : list ? list.children[0].offsetHeight : 0);
|
|
849
|
+
var target = event.target;
|
|
850
|
+
var scrollTop = target.scrollTop - vs.skip * itemHeight;
|
|
851
|
+
if (groupField) {
|
|
852
|
+
dataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
|
|
853
|
+
}
|
|
854
|
+
var group = dataItems[0][groupField];
|
|
855
|
+
for (var i = 1; i < dataItems.length; i++) {
|
|
856
|
+
if (itemHeight * i > scrollTop) {
|
|
857
|
+
break;
|
|
858
|
+
}
|
|
859
|
+
if (dataItems[i] && dataItems[i][groupField]) {
|
|
860
|
+
group = dataItems[i][groupField];
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
if (group !== this.group) {
|
|
864
|
+
state.data.group = group;
|
|
865
|
+
this.applyState(state);
|
|
866
|
+
}
|
|
803
867
|
}
|
|
804
868
|
},
|
|
805
869
|
render: function render(createElement) {
|
|
@@ -905,14 +969,18 @@ var MultiSelectVue2 = {
|
|
|
905
969
|
};
|
|
906
970
|
var renderList = function renderList() {
|
|
907
971
|
var _this2 = this;
|
|
908
|
-
var
|
|
909
|
-
|
|
972
|
+
var groupField = this.$props.groupField;
|
|
973
|
+
var dataItems = this.$props.dataItems || [];
|
|
910
974
|
var itemRender = kendo_vue_common_1.templateRendering.call(this, this.$props.itemRender, kendo_vue_common_1.getListeners.call(this));
|
|
975
|
+
var groupHeaderItemRender = kendo_vue_common_1.templateRendering.call(this, this.$props.groupHeaderItemRender, kendo_vue_common_1.getListeners.call(this));
|
|
911
976
|
var listNoDataRender = kendo_vue_common_1.templateRendering.call(this, this.$props.listNoDataRender, kendo_vue_common_1.getListeners.call(this));
|
|
912
977
|
var skip = virtual ? virtual.skip : 0;
|
|
913
978
|
var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
|
|
914
979
|
var focusedIndex = this.getFocusedState().focusedIndex;
|
|
915
980
|
var translate = "translateY(".concat(vs.translate, "px)");
|
|
981
|
+
if (groupField) {
|
|
982
|
+
dataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
|
|
983
|
+
}
|
|
916
984
|
return (
|
|
917
985
|
// @ts-ignore function children
|
|
918
986
|
h(List_1.List, {
|
|
@@ -935,7 +1003,9 @@ var MultiSelectVue2 = {
|
|
|
935
1003
|
} : undefined,
|
|
936
1004
|
skip: skip,
|
|
937
1005
|
itemRender: itemRender,
|
|
938
|
-
|
|
1006
|
+
groupHeaderItemRender: groupHeaderItemRender,
|
|
1007
|
+
noDataRender: listNoDataRender,
|
|
1008
|
+
groupField: groupField
|
|
939
1009
|
},
|
|
940
1010
|
show: opened,
|
|
941
1011
|
dataItems: dataItems.slice(),
|
|
@@ -957,11 +1027,13 @@ var MultiSelectVue2 = {
|
|
|
957
1027
|
onListclick: this.handleItemClick,
|
|
958
1028
|
on: this.v3 ? undefined : {
|
|
959
1029
|
"listclick": this.handleItemClick,
|
|
960
|
-
"scroll":
|
|
1030
|
+
"scroll": this.onScroll
|
|
961
1031
|
},
|
|
962
1032
|
itemRender: itemRender,
|
|
1033
|
+
groupHeaderItemRender: groupHeaderItemRender,
|
|
963
1034
|
noDataRender: listNoDataRender,
|
|
964
|
-
|
|
1035
|
+
groupField: groupField,
|
|
1036
|
+
onScroll: this.onScroll
|
|
965
1037
|
}, this.v3 ? function () {
|
|
966
1038
|
return [renderScrollElement.call(_this2)];
|
|
967
1039
|
} : [renderScrollElement.call(_this2)])
|
|
@@ -983,6 +1055,7 @@ var MultiSelectVue2 = {
|
|
|
983
1055
|
dataItems = _c === void 0 ? [] : _c;
|
|
984
1056
|
var headerTemplate = kendo_vue_common_1.templateRendering.call(this, this.$props.header, kendo_vue_common_1.getListeners.call(this));
|
|
985
1057
|
var footerTemplate = kendo_vue_common_1.templateRendering.call(this, this.$props.footer, kendo_vue_common_1.getListeners.call(this));
|
|
1058
|
+
var groupStickyHeaderTemplate = kendo_vue_common_1.templateRendering.call(this, this.$props.groupStickyHeaderItemRender, kendo_vue_common_1.getListeners.call(this));
|
|
986
1059
|
var header = kendo_vue_common_1.getTemplate.call(this, {
|
|
987
1060
|
h: h,
|
|
988
1061
|
template: headerTemplate
|
|
@@ -1017,6 +1090,9 @@ var MultiSelectVue2 = {
|
|
|
1017
1090
|
float: 'right'
|
|
1018
1091
|
}
|
|
1019
1092
|
})])]);
|
|
1093
|
+
if (this.group === undefined && this.$props.groupField !== undefined) {
|
|
1094
|
+
this.group = (0, utils_1.getItemValue)(dataItems[0], this.$props.groupField);
|
|
1095
|
+
}
|
|
1020
1096
|
return (
|
|
1021
1097
|
// @ts-ignore function children
|
|
1022
1098
|
h(ListContainer_1.ListContainer, {
|
|
@@ -1054,12 +1130,26 @@ var MultiSelectVue2 = {
|
|
|
1054
1130
|
}, this.v3 ? function () {
|
|
1055
1131
|
return [header && h("div", {
|
|
1056
1132
|
"class": "k-list-header"
|
|
1057
|
-
}, [header]), customItem,
|
|
1133
|
+
}, [header]), customItem, _this3.group && dataItems.length !== 0 && h(GroupStickyHeader_1.GroupStickyHeader, {
|
|
1134
|
+
group: _this3.group,
|
|
1135
|
+
attrs: _this3.v3 ? undefined : {
|
|
1136
|
+
group: _this3.group,
|
|
1137
|
+
render: groupStickyHeaderTemplate
|
|
1138
|
+
},
|
|
1139
|
+
render: groupStickyHeaderTemplate
|
|
1140
|
+
}), renderList.call(_this3), footer && h("div", {
|
|
1058
1141
|
"class": "k-list-footer"
|
|
1059
1142
|
}, [footer]), virtual && header];
|
|
1060
1143
|
} : [header && h("div", {
|
|
1061
1144
|
"class": "k-list-header"
|
|
1062
|
-
}, [header]), customItem,
|
|
1145
|
+
}, [header]), customItem, _this3.group && dataItems.length !== 0 && h(GroupStickyHeader_1.GroupStickyHeader, {
|
|
1146
|
+
group: _this3.group,
|
|
1147
|
+
attrs: _this3.v3 ? undefined : {
|
|
1148
|
+
group: _this3.group,
|
|
1149
|
+
render: groupStickyHeaderTemplate
|
|
1150
|
+
},
|
|
1151
|
+
render: groupStickyHeaderTemplate
|
|
1152
|
+
}), renderList.call(_this3), footer && h("div", {
|
|
1063
1153
|
"class": "k-list-footer"
|
|
1064
1154
|
}, [footer]), virtual && header])
|
|
1065
1155
|
);
|
|
@@ -263,4 +263,16 @@ export interface MultiSelectProps extends FormComponentProps {
|
|
|
263
263
|
* @default `solid`
|
|
264
264
|
*/
|
|
265
265
|
fillMode?: null | 'solid' | 'outline' | 'flat' | string;
|
|
266
|
+
/**
|
|
267
|
+
* Sets the data item field that represents the start of a group. Applicable to objects data.
|
|
268
|
+
*/
|
|
269
|
+
groupField?: string;
|
|
270
|
+
/**
|
|
271
|
+
* Fires when a MultiSelect group header item is about to be rendered. Used to override the default appearance of the group's headers.
|
|
272
|
+
*/
|
|
273
|
+
groupHeaderItemRender?: any;
|
|
274
|
+
/**
|
|
275
|
+
* Fires when a MultiSelect sticky group header item is about to be rendered. Used to override the default appearance of the sticky group header of the component.
|
|
276
|
+
*/
|
|
277
|
+
groupStickyHeaderItemRender?: any;
|
|
266
278
|
}
|
|
@@ -82,4 +82,6 @@ export default class DropDownBase {
|
|
|
82
82
|
triggerOnPageChange(state: InternalState, skip: number, take: number): void;
|
|
83
83
|
triggerPageChangeCornerItems(item: any, state: InternalState): void;
|
|
84
84
|
scrollToVirtualItem: (virtual: VirtualizationSettings, selectedItemIndex: number) => void;
|
|
85
|
+
getGroupedDataModernMode: (data: any[], groupField: string) => any[];
|
|
86
|
+
resetGroupStickyHeader: (groupName: string, that: any) => void;
|
|
85
87
|
}
|
|
@@ -118,6 +118,26 @@ var DropDownBase = /** @class */function () {
|
|
|
118
118
|
return vs.enabled = true;
|
|
119
119
|
}, 10);
|
|
120
120
|
};
|
|
121
|
+
this.getGroupedDataModernMode = function (data, groupField) {
|
|
122
|
+
var newData = [];
|
|
123
|
+
data.forEach(function (el, index) {
|
|
124
|
+
var _a;
|
|
125
|
+
if (data[index - 1] && el[groupField] !== data[index - 1][groupField]) {
|
|
126
|
+
newData.push((_a = {}, _a[groupField] = el[groupField], _a));
|
|
127
|
+
newData.push(data[index]);
|
|
128
|
+
} else {
|
|
129
|
+
newData.push(data[index]);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
return newData;
|
|
133
|
+
};
|
|
134
|
+
this.resetGroupStickyHeader = function (groupName, that) {
|
|
135
|
+
var state = _this.initState();
|
|
136
|
+
if (groupName !== that.group && that.state) {
|
|
137
|
+
that.state.data.group = groupName;
|
|
138
|
+
_this.applyState(state);
|
|
139
|
+
}
|
|
140
|
+
};
|
|
121
141
|
(0, kendo_vue_common_1.validatePackage)(package_metadata_1.packageMetadata);
|
|
122
142
|
this.listBoxId = (0, kendo_vue_common_1.guid)();
|
|
123
143
|
this.guid = (0, kendo_vue_common_1.guid)();
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { DefineComponent, RecordPropsDefinition, ComponentOptions, Vue2type } from '../additionalTypes';
|
|
2
|
+
declare type DefaultData<V> = object | ((this: V) => {});
|
|
3
|
+
declare type DefaultMethods<V> = {
|
|
4
|
+
[key: string]: (this: V, ...args: any[]) => any;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Represents the props of the GroupStickyHeader component.
|
|
8
|
+
*/
|
|
9
|
+
export interface GroupStickyHeaderProps {
|
|
10
|
+
/**
|
|
11
|
+
* The group that will be rendered.
|
|
12
|
+
*/
|
|
13
|
+
group?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Fires when a sticky group header item is about to be rendered. Used to override the default appearance of the sticky group header of the component.
|
|
16
|
+
*/
|
|
17
|
+
render?: any;
|
|
18
|
+
}
|
|
19
|
+
export interface GroupStickyHeaderAll extends Vue2type {
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @hidden
|
|
23
|
+
*/
|
|
24
|
+
declare let GroupStickyHeaderVue2: ComponentOptions<Vue2type, DefaultData<{}>, DefaultMethods<{}>, {}, RecordPropsDefinition<GroupStickyHeaderProps>>;
|
|
25
|
+
/**
|
|
26
|
+
* @hidden
|
|
27
|
+
*/
|
|
28
|
+
declare const GroupStickyHeader: DefineComponent<GroupStickyHeaderProps, any, {}, {}, {}, {}, {}, {}, string, GroupStickyHeaderProps, GroupStickyHeaderProps, {}>;
|
|
29
|
+
export { GroupStickyHeader, GroupStickyHeaderVue2 };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __assign = undefined && undefined.__assign || function () {
|
|
4
|
+
__assign = Object.assign || function (t) {
|
|
5
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
6
|
+
s = arguments[i];
|
|
7
|
+
for (var p in s) {
|
|
8
|
+
if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
return __assign.apply(this, arguments);
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", {
|
|
16
|
+
value: true
|
|
17
|
+
});
|
|
18
|
+
exports.GroupStickyHeaderVue2 = exports.GroupStickyHeader = void 0;
|
|
19
|
+
// @ts-ignore
|
|
20
|
+
var Vue = require("vue");
|
|
21
|
+
var allVue = Vue;
|
|
22
|
+
var gh = allVue.h;
|
|
23
|
+
var isV3 = allVue.version && allVue.version[0] === '3';
|
|
24
|
+
var ref = allVue.ref;
|
|
25
|
+
var kendo_vue_common_1 = require("@progress/kendo-vue-common");
|
|
26
|
+
/**
|
|
27
|
+
* @hidden
|
|
28
|
+
*/
|
|
29
|
+
var GroupStickyHeaderVue2 = {
|
|
30
|
+
name: 'KendoGroupStickyHeader',
|
|
31
|
+
props: {
|
|
32
|
+
group: String,
|
|
33
|
+
render: Object
|
|
34
|
+
},
|
|
35
|
+
// @ts-ignore
|
|
36
|
+
setup: !isV3 ? undefined : function () {
|
|
37
|
+
var v3 = !!isV3;
|
|
38
|
+
return {
|
|
39
|
+
v3: v3
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
render: function render(createElement) {
|
|
44
|
+
var h = gh || createElement;
|
|
45
|
+
var _a = this.$props,
|
|
46
|
+
group = _a.group,
|
|
47
|
+
render = _a.render;
|
|
48
|
+
var defaulGroupStickyHeader = h("div", {
|
|
49
|
+
"class": "k-list-group-sticky-header"
|
|
50
|
+
}, [h("div", {
|
|
51
|
+
"class": "k-list-header-text"
|
|
52
|
+
}, [group])]);
|
|
53
|
+
return kendo_vue_common_1.getTemplate.call(this, {
|
|
54
|
+
h: h,
|
|
55
|
+
template: render,
|
|
56
|
+
defaultRendering: defaulGroupStickyHeader,
|
|
57
|
+
additionalProps: __assign({}, this.$props)
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
exports.GroupStickyHeaderVue2 = GroupStickyHeaderVue2;
|
|
62
|
+
/**
|
|
63
|
+
* @hidden
|
|
64
|
+
*/
|
|
65
|
+
var GroupStickyHeader = GroupStickyHeaderVue2;
|
|
66
|
+
exports.GroupStickyHeader = GroupStickyHeader;
|
|
@@ -23,8 +23,10 @@ export interface ListProps {
|
|
|
23
23
|
highlightSelected?: boolean;
|
|
24
24
|
onClick?: (index: number, event: any) => void;
|
|
25
25
|
itemRender?: any;
|
|
26
|
+
groupHeaderItemRender?: any;
|
|
26
27
|
noDataRender?: any;
|
|
27
28
|
scroller?: boolean;
|
|
29
|
+
groupField: string;
|
|
28
30
|
}
|
|
29
31
|
/**
|
|
30
32
|
* @hidden
|