@progress/kendo-vue-dropdowns 3.10.2 → 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 +115 -15
- 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/DropDownTree/DropDownTree.d.ts +49 -1
- package/dist/es/DropDownTree/DropDownTree.js +863 -638
- package/dist/es/DropDownTree/DropDownTreeProps.d.ts +19 -8
- package/dist/es/MultiSelect/MultiSelect.js +122 -28
- package/dist/es/MultiSelect/MultiSelectProps.d.ts +12 -0
- package/dist/es/MultiSelectTree/MultiSelectTree.js +12 -12
- 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/ListFilter.js +47 -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/main.d.ts +2 -1
- package/dist/es/main.js +2 -1
- package/dist/es/package-metadata.js +1 -1
- package/dist/esm/AutoComplete/AutoComplete.js +115 -15
- 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/DropDownTree/DropDownTree.d.ts +49 -1
- package/dist/esm/DropDownTree/DropDownTree.js +863 -638
- package/dist/esm/DropDownTree/DropDownTreeProps.d.ts +19 -8
- package/dist/esm/MultiSelect/MultiSelect.js +122 -28
- package/dist/esm/MultiSelect/MultiSelectProps.d.ts +12 -0
- package/dist/esm/MultiSelectTree/MultiSelectTree.js +12 -12
- 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/ListFilter.js +47 -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/main.d.ts +2 -1
- package/dist/esm/main.js +2 -1
- package/dist/esm/package-metadata.js +1 -1
- package/dist/npm/AutoComplete/AutoComplete.js +114 -14
- 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/DropDownTree/DropDownTree.d.ts +49 -1
- package/dist/npm/DropDownTree/DropDownTree.js +868 -639
- package/dist/npm/DropDownTree/DropDownTreeProps.d.ts +19 -8
- package/dist/npm/MultiSelect/MultiSelect.js +122 -28
- package/dist/npm/MultiSelect/MultiSelectProps.d.ts +12 -0
- package/dist/npm/MultiSelectTree/MultiSelectTree.js +12 -12
- 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/ListFilter.js +47 -25
- 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/main.d.ts +2 -1
- package/dist/npm/main.js +3 -1
- package/dist/npm/package-metadata.js +1 -1
- package/package.json +10 -8
- package/dist/es/DropDownTree/useDropdownWidth.d.ts +0 -4
- package/dist/es/DropDownTree/useDropdownWidth.js +0 -10
- package/dist/esm/DropDownTree/useDropdownWidth.d.ts +0 -4
- package/dist/esm/DropDownTree/useDropdownWidth.js +0 -10
- package/dist/npm/DropDownTree/useDropdownWidth.d.ts +0 -4
- package/dist/npm/DropDownTree/useDropdownWidth.js +0 -17
|
@@ -18,6 +18,7 @@ var isV3 = allVue.version && allVue.version[0] === '3';
|
|
|
18
18
|
var ref = allVue.ref;
|
|
19
19
|
var inject = allVue.inject;
|
|
20
20
|
import DropDownBase from '../common/DropDownBase.js';
|
|
21
|
+
import { GroupStickyHeader } from '../common/GroupStickyHeader.js';
|
|
21
22
|
import { guid, classNames, Keys, templateRendering, getListeners, getTemplate, kendoThemeMaps, getRef, setRef, Icon } from '@progress/kendo-vue-common';
|
|
22
23
|
import { Button as KButton } from '@progress/kendo-vue-buttons';
|
|
23
24
|
var sizeMap = kendoThemeMaps.sizeMap,
|
|
@@ -119,6 +120,8 @@ var ComboBoxVue2 = {
|
|
|
119
120
|
}
|
|
120
121
|
},
|
|
121
122
|
itemRender: [String, Function, Object],
|
|
123
|
+
groupHeaderItemRender: [String, Function, Object],
|
|
124
|
+
groupStickyHeaderItemRender: [String, Function, Object],
|
|
122
125
|
listNoDataRender: [String, Function, Object],
|
|
123
126
|
focusedItemIndex: Function,
|
|
124
127
|
header: [String, Function, Object],
|
|
@@ -168,6 +171,9 @@ var ComboBoxVue2 = {
|
|
|
168
171
|
validator: function validator(value) {
|
|
169
172
|
return ['small', 'medium', 'large'].includes(value);
|
|
170
173
|
}
|
|
174
|
+
},
|
|
175
|
+
groupField: {
|
|
176
|
+
type: String
|
|
171
177
|
}
|
|
172
178
|
},
|
|
173
179
|
inject: {
|
|
@@ -189,7 +195,10 @@ var ComboBoxVue2 = {
|
|
|
189
195
|
_skipFocusEvent: false,
|
|
190
196
|
valueDuringOnChange: {},
|
|
191
197
|
_navigated: false,
|
|
192
|
-
suggested: ''
|
|
198
|
+
suggested: '',
|
|
199
|
+
group: undefined,
|
|
200
|
+
isScrolling: false,
|
|
201
|
+
itemHeight: 0
|
|
193
202
|
};
|
|
194
203
|
},
|
|
195
204
|
created: function created() {
|
|
@@ -228,11 +237,14 @@ var ComboBoxVue2 = {
|
|
|
228
237
|
this.setValidity();
|
|
229
238
|
},
|
|
230
239
|
updated: function updated() {
|
|
231
|
-
var _a
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
240
|
+
var _a;
|
|
241
|
+
var _b = this.$props,
|
|
242
|
+
_c = _b.dataItems,
|
|
243
|
+
dataItems = _c === void 0 ? [] : _c,
|
|
244
|
+
dataItemKey = _b.dataItemKey,
|
|
245
|
+
virtual = _b.virtual,
|
|
246
|
+
groupField = _b.groupField,
|
|
247
|
+
textField = _b.textField;
|
|
236
248
|
var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
|
|
237
249
|
var prevOpened = this.prevOpened !== undefined ? this.prevOpened : this.prevCurrentOpened;
|
|
238
250
|
var opening = !prevOpened && opened;
|
|
@@ -264,17 +276,37 @@ var ComboBoxVue2 = {
|
|
|
264
276
|
var selectedItemIndex = dataItems.findIndex(function (i) {
|
|
265
277
|
return areSame(i, selectedItem, dataItemKey);
|
|
266
278
|
});
|
|
279
|
+
// Needed to calculate the proper item index when in grouping mode
|
|
280
|
+
if (groupField) {
|
|
281
|
+
selectedItemIndex = (_a = this.base.getGroupedDataModernMode(dataItems, groupField)) === null || _a === void 0 ? void 0 : _a.indexOf(selectedItem);
|
|
282
|
+
}
|
|
267
283
|
var selectedItemChanged = !areSame(prevSelectedItem, selectedItem, dataItemKey);
|
|
268
284
|
if (opening && virtual) {
|
|
269
285
|
this.base.scrollToVirtualItem(virtual, selectedItemIndex);
|
|
270
286
|
this.prevCurrentOpened = true;
|
|
271
287
|
} else if (opening && !virtual) {
|
|
272
|
-
|
|
288
|
+
// Resets the sticky header group value for scenarios with open/close of component's popup
|
|
289
|
+
if (dataItems && dataItems.length !== 0) {
|
|
290
|
+
this.base.resetGroupStickyHeader(dataItems[0][groupField], this);
|
|
291
|
+
}
|
|
292
|
+
this.base.scrollToItem(selectedItemIndex);
|
|
273
293
|
this.prevCurrentOpened = true;
|
|
274
294
|
} else if (opened && prevOpened && selectedItem && selectedItemChanged) {
|
|
275
295
|
this.base.scrollToItem(selectedItemIndex);
|
|
276
|
-
} else if (opened && !selectedItem) {
|
|
277
|
-
|
|
296
|
+
} else if (opened && !selectedItem && !this.isScrolling) {
|
|
297
|
+
var groupHeadersBeforeFocus = 0;
|
|
298
|
+
// Handle the items' focusing when working with grouped data
|
|
299
|
+
if (groupField && this.getFocusedIndex() !== -1 && dataItems.length > 0) {
|
|
300
|
+
var focusedElemBeforeGrouping_1 = dataItems[this.getFocusedIndex()][textField];
|
|
301
|
+
var gropedDataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
|
|
302
|
+
var groupedDataIdex = gropedDataItems.findIndex(function (el) {
|
|
303
|
+
return el[textField] === focusedElemBeforeGrouping_1;
|
|
304
|
+
});
|
|
305
|
+
groupHeadersBeforeFocus = gropedDataItems.slice(0, groupedDataIdex).filter(function (el) {
|
|
306
|
+
return Object.keys(el).length === 1;
|
|
307
|
+
}).length;
|
|
308
|
+
}
|
|
309
|
+
this.base.scrollToItem(this.getFocusedIndex() + groupHeadersBeforeFocus);
|
|
278
310
|
}
|
|
279
311
|
}
|
|
280
312
|
if (opening && this.input) {
|
|
@@ -536,6 +568,9 @@ var ComboBoxVue2 = {
|
|
|
536
568
|
},
|
|
537
569
|
onInputKeyDown: function onInputKeyDown(event) {
|
|
538
570
|
var _this = this;
|
|
571
|
+
if (this.isScrolling) {
|
|
572
|
+
this.isScrolling = false;
|
|
573
|
+
}
|
|
539
574
|
var keyCode = event.keyCode;
|
|
540
575
|
var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
|
|
541
576
|
var state = this.base.initState();
|
|
@@ -600,6 +635,10 @@ var ComboBoxVue2 = {
|
|
|
600
635
|
this.base.togglePopup(state);
|
|
601
636
|
}
|
|
602
637
|
this.base.filterChanged(value, state);
|
|
638
|
+
// Resets the value of the StickyHeader when filtering the data or just entering symbols in the input
|
|
639
|
+
if (this.$props.filterable) {
|
|
640
|
+
state.data.group = undefined;
|
|
641
|
+
}
|
|
603
642
|
this.applyState(state);
|
|
604
643
|
},
|
|
605
644
|
clearButtonClick: function clearButtonClick(event) {
|
|
@@ -673,6 +712,39 @@ var ComboBoxVue2 = {
|
|
|
673
712
|
},
|
|
674
713
|
repositionPopup: function repositionPopup() {
|
|
675
714
|
this.base.repositionPopup();
|
|
715
|
+
},
|
|
716
|
+
onScroll: function onScroll(event) {
|
|
717
|
+
this.isScrolling = true;
|
|
718
|
+
var _a = this.base,
|
|
719
|
+
vs = _a.vs,
|
|
720
|
+
list = _a.list;
|
|
721
|
+
vs.scrollHandler(event);
|
|
722
|
+
var state = this.base.initState();
|
|
723
|
+
var groupField = this.$props.groupField;
|
|
724
|
+
var _b = this.$props.dataItems,
|
|
725
|
+
dataItems = _b === void 0 ? [] : _b;
|
|
726
|
+
if (!groupField || !dataItems.length) {
|
|
727
|
+
return;
|
|
728
|
+
}
|
|
729
|
+
var itemHeight = this.itemHeight = this.itemHeight || (vs.enabled ? vs.itemHeight : list ? list.children[0].offsetHeight : 0);
|
|
730
|
+
var target = event.target;
|
|
731
|
+
var scrollTop = target.scrollTop - vs.skip * itemHeight;
|
|
732
|
+
if (groupField) {
|
|
733
|
+
dataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
|
|
734
|
+
}
|
|
735
|
+
var group = dataItems[0][groupField];
|
|
736
|
+
for (var i = 1; i < dataItems.length; i++) {
|
|
737
|
+
if (itemHeight * i > scrollTop) {
|
|
738
|
+
break;
|
|
739
|
+
}
|
|
740
|
+
if (dataItems[i] && dataItems[i][groupField]) {
|
|
741
|
+
group = dataItems[i][groupField];
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
if (group !== this.group) {
|
|
745
|
+
state.data.group = group;
|
|
746
|
+
this.applyState(state);
|
|
747
|
+
}
|
|
676
748
|
}
|
|
677
749
|
},
|
|
678
750
|
render: function render(createElement) {
|
|
@@ -719,9 +791,10 @@ var ComboBoxVue2 = {
|
|
|
719
791
|
var _a;
|
|
720
792
|
var _b = this.$props,
|
|
721
793
|
dataItemKey = _b.dataItemKey,
|
|
722
|
-
|
|
723
|
-
|
|
794
|
+
groupField = _b.groupField;
|
|
795
|
+
var dataItems = this.$props.dataItems || [];
|
|
724
796
|
var itemRender = templateRendering.call(this, this.$props.itemRender, getListeners.call(this));
|
|
797
|
+
var groupHeaderItemRender = templateRendering.call(this, this.$props.groupHeaderItemRender, getListeners.call(this));
|
|
725
798
|
var listNoDataRender = templateRendering.call(this, this.$props.listNoDataRender, getListeners.call(this));
|
|
726
799
|
if (!virtual) {
|
|
727
800
|
virtual = {
|
|
@@ -733,6 +806,9 @@ var ComboBoxVue2 = {
|
|
|
733
806
|
var translate = "translateY(".concat(vs.translate, "px)");
|
|
734
807
|
var focusedIndex = opened ? this.getFocusedIndex() : undefined;
|
|
735
808
|
var value = isPresent(text) && text !== selectedItemText ? null : this.computedValue();
|
|
809
|
+
if (groupField) {
|
|
810
|
+
dataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
|
|
811
|
+
}
|
|
736
812
|
return (
|
|
737
813
|
// @ts-ignore function children
|
|
738
814
|
h(List, {
|
|
@@ -755,7 +831,9 @@ var ComboBoxVue2 = {
|
|
|
755
831
|
} : undefined,
|
|
756
832
|
skip: skip,
|
|
757
833
|
itemRender: itemRender,
|
|
758
|
-
|
|
834
|
+
groupHeaderItemRender: groupHeaderItemRender,
|
|
835
|
+
noDataRender: listNoDataRender,
|
|
836
|
+
groupField: groupField
|
|
759
837
|
},
|
|
760
838
|
show: opened,
|
|
761
839
|
dataItems: dataItems,
|
|
@@ -777,11 +855,13 @@ var ComboBoxVue2 = {
|
|
|
777
855
|
onListclick: this.handleItemClick,
|
|
778
856
|
on: this.v3 ? undefined : {
|
|
779
857
|
"listclick": this.handleItemClick,
|
|
780
|
-
"scroll":
|
|
858
|
+
"scroll": this.onScroll
|
|
781
859
|
},
|
|
782
860
|
itemRender: itemRender,
|
|
861
|
+
groupHeaderItemRender: groupHeaderItemRender,
|
|
783
862
|
noDataRender: listNoDataRender,
|
|
784
|
-
|
|
863
|
+
groupField: groupField,
|
|
864
|
+
onScroll: this.onScroll
|
|
785
865
|
}, this.v3 ? function () {
|
|
786
866
|
return [renderScrollElement.call(_this2)];
|
|
787
867
|
} : [renderScrollElement.call(_this2)])
|
|
@@ -798,6 +878,7 @@ var ComboBoxVue2 = {
|
|
|
798
878
|
var _a;
|
|
799
879
|
var headerTemplate = templateRendering.call(this, this.$props.header, getListeners.call(this));
|
|
800
880
|
var footerTemplate = templateRendering.call(this, this.$props.footer, getListeners.call(this));
|
|
881
|
+
var groupStickyHeaderTemplate = templateRendering.call(this, this.$props.groupStickyHeaderItemRender, getListeners.call(this));
|
|
801
882
|
var header = getTemplate.call(this, {
|
|
802
883
|
h: h,
|
|
803
884
|
template: headerTemplate
|
|
@@ -808,6 +889,10 @@ var ComboBoxVue2 = {
|
|
|
808
889
|
});
|
|
809
890
|
var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
|
|
810
891
|
var popupWidth = popupSettings.width !== undefined ? popupSettings.width : base.popupWidth;
|
|
892
|
+
var dataItems = this.$props.dataItems || [];
|
|
893
|
+
if (this.group === undefined && this.$props.groupField !== undefined) {
|
|
894
|
+
this.group = getItemValue(dataItems[0], this.$props.groupField);
|
|
895
|
+
}
|
|
811
896
|
return (
|
|
812
897
|
// @ts-ignore function children
|
|
813
898
|
h(ListContainer, {
|
|
@@ -841,12 +926,26 @@ var ComboBoxVue2 = {
|
|
|
841
926
|
}, this.v3 ? function () {
|
|
842
927
|
return [header && h("div", {
|
|
843
928
|
"class": "k-list-header"
|
|
844
|
-
}, [header]),
|
|
929
|
+
}, [header]), _this3.group && dataItems.length !== 0 && h(GroupStickyHeader, {
|
|
930
|
+
group: _this3.group,
|
|
931
|
+
attrs: _this3.v3 ? undefined : {
|
|
932
|
+
group: _this3.group,
|
|
933
|
+
render: groupStickyHeaderTemplate
|
|
934
|
+
},
|
|
935
|
+
render: groupStickyHeaderTemplate
|
|
936
|
+
}), renderList.call(_this3), footer && h("div", {
|
|
845
937
|
"class": "k-list-footer"
|
|
846
938
|
}, [footer])];
|
|
847
939
|
} : [header && h("div", {
|
|
848
940
|
"class": "k-list-header"
|
|
849
|
-
}, [header]),
|
|
941
|
+
}, [header]), _this3.group && dataItems.length !== 0 && h(GroupStickyHeader, {
|
|
942
|
+
group: _this3.group,
|
|
943
|
+
attrs: _this3.v3 ? undefined : {
|
|
944
|
+
group: _this3.group,
|
|
945
|
+
render: groupStickyHeaderTemplate
|
|
946
|
+
},
|
|
947
|
+
render: groupStickyHeaderTemplate
|
|
948
|
+
}), renderList.call(_this3), footer && h("div", {
|
|
850
949
|
"class": "k-list-footer"
|
|
851
950
|
}, [footer])])
|
|
852
951
|
);
|
|
@@ -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
|
}
|
|
@@ -25,6 +25,7 @@ import { ListFilter } from '../common/ListFilter.js';
|
|
|
25
25
|
import { ListDefaultItem } from '../common/ListDefaultItem.js';
|
|
26
26
|
import { List } from '../common/List.js';
|
|
27
27
|
import DropDownBase from '../common/DropDownBase.js';
|
|
28
|
+
import { GroupStickyHeader } from '../common/GroupStickyHeader.js';
|
|
28
29
|
import { selectButton, messages } from '../messages/main.js';
|
|
29
30
|
import { provideLocalizationService } from '@progress/kendo-vue-intl';
|
|
30
31
|
import { isPresent, getItemValue, sameCharsOnly, shuffleData, matchText, areSame, preventDefaultNonInputs, getFocusedItem } from '../common/utils.js';
|
|
@@ -127,6 +128,8 @@ var DropDownListVue2 = {
|
|
|
127
128
|
}
|
|
128
129
|
},
|
|
129
130
|
itemRender: [String, Function, Object],
|
|
131
|
+
groupHeaderItemRender: [String, Function, Object],
|
|
132
|
+
groupStickyHeaderItemRender: [String, Function, Object],
|
|
130
133
|
listNoDataRender: [String, Function, Object],
|
|
131
134
|
focusedItemIndex: Function,
|
|
132
135
|
header: [String, Function, Object],
|
|
@@ -163,6 +166,9 @@ var DropDownListVue2 = {
|
|
|
163
166
|
validator: function validator(value) {
|
|
164
167
|
return ['small', 'medium', 'large'].includes(value);
|
|
165
168
|
}
|
|
169
|
+
},
|
|
170
|
+
groupField: {
|
|
171
|
+
type: String
|
|
166
172
|
}
|
|
167
173
|
},
|
|
168
174
|
inject: {
|
|
@@ -183,7 +189,10 @@ var DropDownListVue2 = {
|
|
|
183
189
|
},
|
|
184
190
|
_skipFocusEvent: false,
|
|
185
191
|
valueDuringOnChange: {},
|
|
186
|
-
_navigated: false
|
|
192
|
+
_navigated: false,
|
|
193
|
+
group: undefined,
|
|
194
|
+
isScrolling: false,
|
|
195
|
+
itemHeight: 0
|
|
187
196
|
};
|
|
188
197
|
},
|
|
189
198
|
watch: {
|
|
@@ -234,11 +243,14 @@ var DropDownListVue2 = {
|
|
|
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;
|
|
@@ -282,11 +294,19 @@ var DropDownListVue2 = {
|
|
|
282
294
|
var selectedItemIndex = dataItems.findIndex(function (i) {
|
|
283
295
|
return areSame(i, selectedItem_1, dataItemKey);
|
|
284
296
|
});
|
|
297
|
+
// Needed to calculate the proper item index when in grouping mode
|
|
298
|
+
if (groupField) {
|
|
299
|
+
selectedItemIndex = (_a = this.base.getGroupedDataModernMode(dataItems, groupField)) === null || _a === void 0 ? void 0 : _a.indexOf(selectedItem_1);
|
|
300
|
+
}
|
|
285
301
|
var selectedItemChanged = !areSame(prevSelectedItem, selectedItem_1, dataItemKey);
|
|
286
302
|
if (opening && virtual) {
|
|
287
303
|
this.base.scrollToVirtualItem(virtual, selectedItemIndex);
|
|
288
304
|
this.prevCurrentOpened = true;
|
|
289
305
|
} else if (opening && !virtual) {
|
|
306
|
+
// Resets the sticky header group value for scenarios with open/close of component's popup
|
|
307
|
+
if (dataItems && dataItems.length !== 0) {
|
|
308
|
+
this.base.resetGroupStickyHeader(dataItems[0][groupField], this);
|
|
309
|
+
}
|
|
290
310
|
this.base.scrollToItem(selectedItemIndex);
|
|
291
311
|
this.prevCurrentOpened = true;
|
|
292
312
|
} else if (opened && prevOpened && selectedItem_1 && selectedItemChanged && !this._navigated) {
|
|
@@ -487,6 +507,9 @@ var DropDownListVue2 = {
|
|
|
487
507
|
}
|
|
488
508
|
},
|
|
489
509
|
handleKeyDown: function handleKeyDown(event) {
|
|
510
|
+
if (this.isScrolling) {
|
|
511
|
+
this.isScrolling = false;
|
|
512
|
+
}
|
|
490
513
|
var _a = this.$props,
|
|
491
514
|
_b = _a.dataItems,
|
|
492
515
|
dataItems = _b === void 0 ? [] : _b,
|
|
@@ -611,6 +634,8 @@ var DropDownListVue2 = {
|
|
|
611
634
|
state.data.currentText = event.target.value;
|
|
612
635
|
}
|
|
613
636
|
this.base.filterChanged(event.target.value, state);
|
|
637
|
+
// Used to reset the value of the StickyHeader when filtering the data
|
|
638
|
+
state.data.group = undefined;
|
|
614
639
|
this.applyState(state);
|
|
615
640
|
},
|
|
616
641
|
onPopupOpened: function onPopupOpened() {
|
|
@@ -682,6 +707,39 @@ var DropDownListVue2 = {
|
|
|
682
707
|
},
|
|
683
708
|
repositionPopup: function repositionPopup() {
|
|
684
709
|
this.base.repositionPopup();
|
|
710
|
+
},
|
|
711
|
+
onScroll: function onScroll(event) {
|
|
712
|
+
this.isScrolling = true;
|
|
713
|
+
var _a = this.base,
|
|
714
|
+
vs = _a.vs,
|
|
715
|
+
list = _a.list;
|
|
716
|
+
vs.scrollHandler(event);
|
|
717
|
+
var state = this.base.initState();
|
|
718
|
+
var groupField = this.$props.groupField;
|
|
719
|
+
var _b = this.$props.dataItems,
|
|
720
|
+
dataItems = _b === void 0 ? [] : _b;
|
|
721
|
+
if (!groupField || !dataItems.length) {
|
|
722
|
+
return;
|
|
723
|
+
}
|
|
724
|
+
var itemHeight = this.itemHeight = this.itemHeight || (vs.enabled ? vs.itemHeight : list ? list.children[0].offsetHeight : 0);
|
|
725
|
+
var target = event.target;
|
|
726
|
+
var scrollTop = target.scrollTop - vs.skip * itemHeight;
|
|
727
|
+
if (groupField) {
|
|
728
|
+
dataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
|
|
729
|
+
}
|
|
730
|
+
var group = dataItems[0][groupField];
|
|
731
|
+
for (var i = 1; i < dataItems.length; i++) {
|
|
732
|
+
if (itemHeight * i > scrollTop) {
|
|
733
|
+
break;
|
|
734
|
+
}
|
|
735
|
+
if (dataItems[i] && dataItems[i][groupField]) {
|
|
736
|
+
group = dataItems[i][groupField];
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
if (group !== this.group) {
|
|
740
|
+
state.data.group = group;
|
|
741
|
+
this.applyState(state);
|
|
742
|
+
}
|
|
685
743
|
}
|
|
686
744
|
},
|
|
687
745
|
render: function render(createElement) {
|
|
@@ -799,11 +857,18 @@ var DropDownListVue2 = {
|
|
|
799
857
|
};
|
|
800
858
|
var renderList = function renderList() {
|
|
801
859
|
var _this2 = this;
|
|
802
|
-
var
|
|
860
|
+
var _a = this.$props,
|
|
861
|
+
textField = _a.textField,
|
|
862
|
+
groupField = _a.groupField;
|
|
863
|
+
var dataItemsToRender = this.$props.dataItems || [];
|
|
803
864
|
var itemRender = templateRendering.call(this, this.$props.itemRender, getListeners.call(this));
|
|
865
|
+
var groupHeaderItemRender = templateRendering.call(this, this.$props.groupHeaderItemRender, getListeners.call(this));
|
|
804
866
|
var listNoDataRender = templateRendering.call(this, this.$props.listNoDataRender, getListeners.call(this));
|
|
805
867
|
var skip = virtual.skip;
|
|
806
868
|
var translate = "translateY(".concat(vs.translate, "px)");
|
|
869
|
+
if (groupField) {
|
|
870
|
+
dataItemsToRender = this.base.getGroupedDataModernMode(dataItemsToRender, groupField);
|
|
871
|
+
}
|
|
807
872
|
return (
|
|
808
873
|
// @ts-ignore function children
|
|
809
874
|
h(List, {
|
|
@@ -811,7 +876,7 @@ var DropDownListVue2 = {
|
|
|
811
876
|
attrs: this.v3 ? undefined : {
|
|
812
877
|
id: this.base.listBoxId,
|
|
813
878
|
show: opened,
|
|
814
|
-
dataItems:
|
|
879
|
+
dataItems: dataItemsToRender.slice(),
|
|
815
880
|
focusedIndex: this.focusedIndex(),
|
|
816
881
|
value: this.computedValue(),
|
|
817
882
|
textField: textField,
|
|
@@ -826,10 +891,12 @@ var DropDownListVue2 = {
|
|
|
826
891
|
} : undefined,
|
|
827
892
|
skip: skip,
|
|
828
893
|
itemRender: itemRender,
|
|
829
|
-
|
|
894
|
+
groupHeaderItemRender: groupHeaderItemRender,
|
|
895
|
+
noDataRender: listNoDataRender,
|
|
896
|
+
groupField: groupField
|
|
830
897
|
},
|
|
831
898
|
show: opened,
|
|
832
|
-
dataItems:
|
|
899
|
+
dataItems: dataItemsToRender.slice(),
|
|
833
900
|
focusedIndex: this.focusedIndex(),
|
|
834
901
|
value: this.computedValue(),
|
|
835
902
|
textField: textField,
|
|
@@ -848,11 +915,13 @@ var DropDownListVue2 = {
|
|
|
848
915
|
onListclick: this.handleItemClick,
|
|
849
916
|
on: this.v3 ? undefined : {
|
|
850
917
|
"listclick": this.handleItemClick,
|
|
851
|
-
"scroll":
|
|
918
|
+
"scroll": this.onScroll
|
|
852
919
|
},
|
|
853
920
|
itemRender: itemRender,
|
|
921
|
+
groupHeaderItemRender: groupHeaderItemRender,
|
|
854
922
|
noDataRender: listNoDataRender,
|
|
855
|
-
|
|
923
|
+
groupField: groupField,
|
|
924
|
+
onScroll: this.onScroll
|
|
856
925
|
}, this.v3 ? function () {
|
|
857
926
|
return [renderScrollElement.call(_this2)];
|
|
858
927
|
} : [renderScrollElement.call(_this2)])
|
|
@@ -893,6 +962,7 @@ var DropDownListVue2 = {
|
|
|
893
962
|
var _a;
|
|
894
963
|
var headerTemplate = templateRendering.call(this, this.$props.header, getListeners.call(this));
|
|
895
964
|
var footerTemplate = templateRendering.call(this, this.$props.footer, getListeners.call(this));
|
|
965
|
+
var groupStickyHeaderTemplate = templateRendering.call(this, this.$props.groupStickyHeaderItemRender, getListeners.call(this));
|
|
896
966
|
var header = getTemplate.call(this, {
|
|
897
967
|
h: h,
|
|
898
968
|
template: headerTemplate
|
|
@@ -902,6 +972,9 @@ var DropDownListVue2 = {
|
|
|
902
972
|
template: footerTemplate
|
|
903
973
|
});
|
|
904
974
|
var popupWidth = popupSettings.width !== undefined ? popupSettings.width : base.popupWidth;
|
|
975
|
+
if (this.group === undefined && this.$props.groupField !== undefined) {
|
|
976
|
+
this.group = getItemValue(dataItems[0], this.$props.groupField);
|
|
977
|
+
}
|
|
905
978
|
return (
|
|
906
979
|
// @ts-ignore function children
|
|
907
980
|
h(ListContainer, {
|
|
@@ -937,12 +1010,26 @@ var DropDownListVue2 = {
|
|
|
937
1010
|
onClose: this.onPopupClosed,
|
|
938
1011
|
onBlur: this.handleBlur
|
|
939
1012
|
}, this.v3 ? function () {
|
|
940
|
-
return [renderListFilter.call(_this3), renderDefaultItem.call(_this3),
|
|
1013
|
+
return [renderListFilter.call(_this3), renderDefaultItem.call(_this3), _this3.group && dataItems.length !== 0 && h(GroupStickyHeader, {
|
|
1014
|
+
group: _this3.group,
|
|
1015
|
+
attrs: _this3.v3 ? undefined : {
|
|
1016
|
+
group: _this3.group,
|
|
1017
|
+
render: groupStickyHeaderTemplate
|
|
1018
|
+
},
|
|
1019
|
+
render: groupStickyHeaderTemplate
|
|
1020
|
+
}), header && h("div", {
|
|
941
1021
|
"class": "k-list-header"
|
|
942
1022
|
}, [header]), renderList.call(_this3), footer && h("div", {
|
|
943
1023
|
"class": "k-list-footer"
|
|
944
1024
|
}, [footer])];
|
|
945
|
-
} : [renderListFilter.call(_this3), renderDefaultItem.call(_this3),
|
|
1025
|
+
} : [renderListFilter.call(_this3), renderDefaultItem.call(_this3), _this3.group && dataItems.length !== 0 && h(GroupStickyHeader, {
|
|
1026
|
+
group: _this3.group,
|
|
1027
|
+
attrs: _this3.v3 ? undefined : {
|
|
1028
|
+
group: _this3.group,
|
|
1029
|
+
render: groupStickyHeaderTemplate
|
|
1030
|
+
},
|
|
1031
|
+
render: groupStickyHeaderTemplate
|
|
1032
|
+
}), header && h("div", {
|
|
946
1033
|
"class": "k-list-header"
|
|
947
1034
|
}, [header]), renderList.call(_this3), footer && h("div", {
|
|
948
1035
|
"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
|
}
|
|
@@ -1 +1,49 @@
|
|
|
1
|
-
|
|
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
|
+
import { DropDownTreeProps } from './DropDownTreeProps';
|
|
7
|
+
/**
|
|
8
|
+
* @hidden
|
|
9
|
+
*/
|
|
10
|
+
export interface DropDownTreeState {
|
|
11
|
+
calculatedId: string;
|
|
12
|
+
anchor: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* @hidden
|
|
16
|
+
*/
|
|
17
|
+
export interface DropDownTreeComputed {
|
|
18
|
+
[key: string]: any;
|
|
19
|
+
isOpen: boolean;
|
|
20
|
+
computedValue: any;
|
|
21
|
+
hasValue: boolean;
|
|
22
|
+
currentValueText: string;
|
|
23
|
+
wrapperClass: object;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* @hidden
|
|
27
|
+
*/
|
|
28
|
+
export interface DropDownTreeMethods {
|
|
29
|
+
[key: string]: any;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* @hidden
|
|
33
|
+
*/
|
|
34
|
+
export interface DropDownTreeData {
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @hidden
|
|
38
|
+
*/
|
|
39
|
+
export interface DropDownTreeAll extends Vue2type, DropDownTreeMethods, DropDownTreeData, DropDownTreeComputed, DropDownTreeState {
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @hidden
|
|
43
|
+
*/
|
|
44
|
+
declare let DropDownTreeVue2: ComponentOptions<DropDownTreeAll, DefaultData<DropDownTreeData>, DefaultMethods<DropDownTreeAll>, DropDownTreeComputed, RecordPropsDefinition<DropDownTreeProps>>;
|
|
45
|
+
/**
|
|
46
|
+
* @hidden
|
|
47
|
+
*/
|
|
48
|
+
declare const DropDownTree: DefineComponent<DropDownTreeProps, any, DropDownTreeData, DropDownTreeComputed, DropDownTreeMethods, {}, {}, {}, string, DropDownTreeProps, DropDownTreeProps, {}>;
|
|
49
|
+
export { DropDownTree, DropDownTreeVue2 };
|