@progress/kendo-react-dropdowns 5.1.0-dev.202202221154 → 5.1.0-dev.202202240928

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.
@@ -25,7 +25,7 @@ var PropTypes = require("prop-types");
25
25
  var MultiColumnList_1 = require("./../common/MultiColumnList");
26
26
  var kendo_react_common_1 = require("@progress/kendo-react-common");
27
27
  var ComboBox_1 = require("../ComboBox/ComboBox");
28
- var sizeMap = kendo_react_common_1.kendoThemeMaps.sizeMap;
28
+ var utils_1 = require("../common/utils");
29
29
  var columnWidth = function (width, defaultWidth) {
30
30
  if (width) {
31
31
  return typeof width === 'number' ? width + 'px' : width;
@@ -47,12 +47,11 @@ exports.MultiColumnComboBoxPropsContext = kendo_react_common_1.createPropsContex
47
47
  *
48
48
  */
49
49
  exports.MultiColumnComboBox = React.forwardRef(function (directProps, ref) {
50
- var _a;
51
50
  var props = kendo_react_common_1.usePropsContext(exports.MultiColumnComboBoxPropsContext, directProps);
52
51
  var target = React.useRef(null);
53
52
  var comboBoxRef = React.useRef(null);
54
53
  var scrollbarWidth = kendo_react_common_1.getScrollbarWidth();
55
- var _b = props.columns, columns = _b === void 0 ? defaultProps.columns : _b, _c = props.popupSettings, popupSettings = _c === void 0 ? defaultProps.popupSettings : _c, size = props.size, onOpen = props.onOpen, onClose = props.onClose, onFocus = props.onFocus, onBlur = props.onBlur, onChange = props.onChange, onFilterChange = props.onFilterChange, onPageChange = props.onPageChange, other = __rest(props, ["columns", "popupSettings", "size", "onOpen", "onClose", "onFocus", "onBlur", "onChange", "onFilterChange", "onPageChange"]);
54
+ var _a = props.columns, columns = _a === void 0 ? defaultProps.columns : _a, _b = props.popupSettings, popupSettings = _b === void 0 ? defaultProps.popupSettings : _b, size = props.size, onOpen = props.onOpen, onClose = props.onClose, onFocus = props.onFocus, onBlur = props.onBlur, onChange = props.onChange, onFilterChange = props.onFilterChange, onPageChange = props.onPageChange, other = __rest(props, ["columns", "popupSettings", "size", "onOpen", "onClose", "onFocus", "onBlur", "onChange", "onFilterChange", "onPageChange"]);
56
55
  React.useImperativeHandle(target, function () {
57
56
  return ({
58
57
  element: comboBoxRef.current && comboBoxRef.current.element,
@@ -67,12 +66,15 @@ exports.MultiColumnComboBox = React.forwardRef(function (directProps, ref) {
67
66
  });
68
67
  });
69
68
  React.useImperativeHandle(ref, function () { return target.current; });
70
- var popupWidth = React.useMemo(function () {
71
- return "calc(" + columns.map(function (column) { return columnWidth(column.width, defaultProps.width); }).filter(Boolean).join(' + ') + " + " + scrollbarWidth + "px)";
72
- }, [columns, scrollbarWidth]);
73
- var header = React.useMemo(function () { return (React.createElement(React.Fragment, null,
74
- props.header,
75
- React.createElement("div", { className: "k-table-header" },
69
+ var initialGroupHeader = React.useMemo(function () {
70
+ if (initialGroupHeader === undefined && props.groupField !== undefined && props.data) {
71
+ return utils_1.getItemValue(props.data[0], props.groupField);
72
+ }
73
+ }, [props.data, props.groupField]);
74
+ var _c = React.useState(initialGroupHeader), groupHeader = _c[0], setGroupHeader = _c[1];
75
+ var header = React.useMemo(function () {
76
+ return (React.createElement(React.Fragment, null,
77
+ props.header,
76
78
  React.createElement("div", { className: "k-table-header-wrap" },
77
79
  React.createElement("table", { className: "k-table", role: "presentation" },
78
80
  React.createElement("colgroup", null, columns.map(function (column, i) {
@@ -81,7 +83,14 @@ exports.MultiColumnComboBox = React.forwardRef(function (directProps, ref) {
81
83
  React.createElement("thead", { className: 'k-table-thead' },
82
84
  React.createElement("tr", { className: 'k-table-row' }, columns.map(function (column, i) {
83
85
  return (React.createElement("th", { className: "k-table-th", key: column.uniqueKey ? column.uniqueKey : i }, column.header || '\u00A0'));
84
- })))))))); }, [props.header, columns]);
86
+ })),
87
+ groupHeader && React.createElement("tr", { className: 'k-table-group-row' },
88
+ React.createElement("th", { className: 'k-table-th', colSpan: columns.length }, groupHeader)))))));
89
+ }, [props.header, columns, groupHeader]);
90
+ var popupWidth = React.useMemo(function () {
91
+ // These additional 4px are coming from the child elements side borders (fixes horizontal scrollbar)
92
+ return "calc(" + columns.map(function (column) { return columnWidth(column.width, defaultProps.width); }).filter(Boolean).join(' + ') + " + " + scrollbarWidth + "px + 4px)";
93
+ }, [columns, scrollbarWidth]);
85
94
  var skip = props.virtual ? props.virtual.skip : 0;
86
95
  var itemRender = React.useCallback(function (li, liProps) {
87
96
  var children = columns.map(function (column, i) { return (React.createElement("span", { className: "k-table-td", style: { width: column.width ? column.width : defaultProps.width }, key: column.uniqueKey ? column.uniqueKey : i }, column.field ? kendo_react_common_1.getter(column.field)(liProps.dataItem) : '')); });
@@ -97,13 +106,14 @@ exports.MultiColumnComboBox = React.forwardRef(function (directProps, ref) {
97
106
  }
98
107
  }
99
108
  if (group) {
100
- children.push(React.createElement("div", { key: "group", className: "k-cell k-group-cell" },
109
+ children.push(React.createElement("div", { key: "group", className: "k-table-td k-table-group-td" },
101
110
  React.createElement("span", null, group)));
102
111
  }
103
112
  var rendering = React.cloneElement(li, __assign({}, li.props, { className: kendo_react_common_1.classNames('k-table-row', {
104
113
  'k-table-alt-row': liProps.index % 2 !== 0,
105
114
  'k-focus': liProps.focused,
106
- 'k-selected': liProps.selected
115
+ 'k-selected': liProps.selected,
116
+ 'k-first': Boolean(group)
107
117
  }) }), children);
108
118
  return props.itemRender ? props.itemRender.call(undefined, rendering, liProps) : rendering;
109
119
  }, [columns, props.groupField, props.itemRender, props.data, skip]);
@@ -119,11 +129,12 @@ exports.MultiColumnComboBox = React.forwardRef(function (directProps, ref) {
119
129
  var onChangeHandler = React.useCallback(function (event) { return handleEvent(onChange, event); }, [onChange]);
120
130
  var onFilterChangeHandler = React.useCallback(function (event) { return handleEvent(onFilterChange, event); }, [onFilterChange]);
121
131
  var onPageChangeHandler = React.useCallback(function (event) { return handleEvent(onPageChange, event); }, [onPageChange]);
132
+ var onGroupScroll = React.useCallback(function (event) {
133
+ setGroupHeader(event.group);
134
+ }, []);
122
135
  React.useEffect(function () { kendo_react_common_1.setScrollbarWidth(); });
123
136
  var List = React.useCallback(function (listProps) { return React.createElement(MultiColumnList_1.MultiColumnList, __assign({}, listProps)); }, []);
124
- return (React.createElement(ComboBox_1.ComboBox, __assign({}, other, { list: List, popupSettings: __assign({ width: popupWidth }, popupSettings, { popupClass: kendo_react_common_1.classNames('k-dropdowngrid-popup k-data-table', (_a = {},
125
- _a["k-table-" + (sizeMap[size] || size)] = size,
126
- _a)), className: popupSettings.className }), ref: comboBoxRef, header: header, itemRender: itemRender, size: props.size, rounded: props.rounded, fillMode: props.fillMode, onOpen: onOpenHandler, onClose: onCloseHandler, onFocus: onFocusHandler, onBlur: onBlurHandler, onChange: onChangeHandler, onFilterChange: onFilterChangeHandler, onPageChange: onPageChangeHandler })));
137
+ return (React.createElement(ComboBox_1.ComboBox, __assign({}, other, { list: List, popupSettings: __assign({ width: popupWidth }, popupSettings, { popupClass: 'k-dropdowngrid-popup k-reset', className: popupSettings.className }), ref: comboBoxRef, header: header, itemRender: itemRender, size: props.size, rounded: props.rounded, fillMode: props.fillMode, onOpen: onOpenHandler, onClose: onCloseHandler, onFocus: onFocusHandler, onBlur: onBlurHandler, onChange: onChangeHandler, onFilterChange: onFilterChangeHandler, onPageChange: onPageChangeHandler, onGroupScroll: onGroupScroll })));
127
138
  });
128
139
  var propTypes = __assign({}, ComboBox_1.ComboBoxWithoutContext.propTypes, { columns: PropTypes.any.isRequired });
129
140
  var defaultProps = {
@@ -6,6 +6,7 @@ import { LocalizationService } from '@progress/kendo-react-intl';
6
6
  */
7
7
  export interface ListProps {
8
8
  id?: string;
9
+ virtual?: boolean;
9
10
  show?: boolean;
10
11
  data: any[];
11
12
  value?: any;
@@ -28,7 +28,7 @@ var List = /** @class */ (function (_super) {
28
28
  }
29
29
  List.prototype.renderItems = function () {
30
30
  var _this = this;
31
- var _a = this.props, textField = _a.textField, valueField = _a.valueField, groupField = _a.groupField, optionsGuid = _a.optionsGuid, _b = _a.skip, skip = _b === void 0 ? 0 : _b, focusedIndex = _a.focusedIndex, _c = _a.highlightSelected, highlightSelected = _c === void 0 ? true : _c, value = _a.value, data = _a.data, itemRender = _a.itemRender;
31
+ var _a = this.props, textField = _a.textField, valueField = _a.valueField, groupField = _a.groupField, optionsGuid = _a.optionsGuid, _b = _a.skip, skip = _b === void 0 ? 0 : _b, virtual = _a.virtual, focusedIndex = _a.focusedIndex, _c = _a.highlightSelected, highlightSelected = _c === void 0 ? true : _c, value = _a.value, data = _a.data, itemRender = _a.itemRender;
32
32
  var isArray = Array.isArray(value);
33
33
  return data.map(function (item, index) {
34
34
  var realIndex = skip + index;
@@ -44,7 +44,7 @@ var List = /** @class */ (function (_super) {
44
44
  group = current;
45
45
  }
46
46
  }
47
- return (React.createElement(ListItem_1.default, { id: "option-" + optionsGuid + "-" + realIndex, dataItem: item, selected: selected, focused: focusedIndex === index, index: realIndex, key: realIndex, onClick: _this.props.onClick, textField: textField, group: group, render: itemRender }));
47
+ return (React.createElement(ListItem_1.default, { id: "option-" + optionsGuid + "-" + realIndex, virtual: virtual, dataItem: item, selected: selected, focused: focusedIndex === index, index: realIndex, key: realIndex, onClick: _this.props.onClick, textField: textField, group: group, render: itemRender }));
48
48
  });
49
49
  };
50
50
  List.prototype.renderNoValueElement = function (localizationService) {
@@ -60,7 +60,7 @@ var List = /** @class */ (function (_super) {
60
60
  var items = this.renderItems();
61
61
  return (items.length ? (React.createElement("div", { className: wrapperCssClass, style: wrapperStyle, ref: wrapperRef, onMouseDown: this.props.onMouseDown, onBlur: this.props.onBlur, onScroll: this.props.onScroll, unselectable: "on" },
62
62
  React.createElement("ul", { id: id, role: "listbox", "aria-hidden": !show ? true : undefined, className: listClassName, ref: listRef, style: listStyle }, items),
63
- this.props.scroller)) : this.renderNoValueElement(localizationService));
63
+ this.props.scroller && React.createElement("div", { className: "k-height-container" }, this.props.scroller))) : this.renderNoValueElement(localizationService));
64
64
  };
65
65
  return List;
66
66
  }(React.Component));
@@ -31,6 +31,10 @@ export interface ListItemProps {
31
31
  * Indicates the selected state of the list item element.
32
32
  */
33
33
  selected: boolean;
34
+ /**
35
+ * @hidden
36
+ */
37
+ virtual?: boolean;
34
38
  /**
35
39
  * Fires when the list item is about to be rendered. Used to override the default appearance of the list item.
36
40
  */
@@ -28,14 +28,14 @@ var ListItem = /** @class */ (function (_super) {
28
28
  return _this;
29
29
  }
30
30
  ListItem.prototype.render = function () {
31
- var _a = this.props, selected = _a.selected, group = _a.group, dataItem = _a.dataItem, renderer = _a.render;
31
+ var _a = this.props, selected = _a.selected, group = _a.group, dataItem = _a.dataItem, virtual = _a.virtual, renderer = _a.render;
32
32
  var item = (React.createElement("li", { id: this.props.id, role: "option", "aria-selected": selected, className: kendo_react_common_1.classNames('k-list-item', {
33
33
  'k-selected': selected,
34
34
  'k-focus': this.props.focused,
35
35
  'k-first': Boolean(group)
36
- }), onClick: this.handleClick, style: { position: 'unset' } },
36
+ }), onClick: this.handleClick, style: { position: virtual ? 'relative' : 'unset' } },
37
37
  React.createElement("span", { className: 'k-list-item-text' }, utils_1.getItemValue(dataItem, this.props.textField).toString()),
38
- group !== undefined ? React.createElement("div", { className: "k-group" }, group) : null));
38
+ group !== undefined ? React.createElement("div", { className: "k-list-item-group-label" }, group) : null));
39
39
  return renderer !== undefined ? renderer.call(undefined, item, this.props) : item;
40
40
  };
41
41
  return ListItem;
@@ -17,5 +17,5 @@ var List_1 = require("./List");
17
17
  * @hidden
18
18
  */
19
19
  exports.MultiColumnList = function (props) {
20
- return (React.createElement(List_1.default, __assign({}, props, { wrapperCssClass: "k-table-scroller", listClassName: "k-table k-table-list", listStyle: __assign({}, props.listStyle) })));
20
+ return (React.createElement(List_1.default, __assign({}, props, { wrapperCssClass: "k-table-body k-table-scroller", listClassName: "k-table k-table-list", listStyle: __assign({}, props.listStyle) })));
21
21
  };
@@ -7,7 +7,7 @@ exports.packageMetadata = {
7
7
  name: '@progress/kendo-react-dropdowns',
8
8
  productName: 'KendoReact',
9
9
  productCodes: ['KENDOUIREACT', 'KENDOUICOMPLETE'],
10
- publishDate: 1645529880,
10
+ publishDate: 1645693883,
11
11
  version: '',
12
12
  licensingDocsUrl: 'https://www.telerik.com/kendo-react-ui/my-license/?utm_medium=product&utm_source=kendoreact&utm_campaign=kendo-ui-react-purchase-license-keys-warning'
13
13
  };