@progress/kendo-react-grid 5.19.0-dev.202309201348 → 5.19.0-dev.202309211522

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.
Files changed (29) hide show
  1. package/dist/cdn/js/kendo-react-grid.js +1 -1
  2. package/dist/es/columnMenu/GridColumnMenuColumnsList.d.ts +27 -0
  3. package/dist/es/columnMenu/GridColumnMenuColumnsList.js +57 -0
  4. package/dist/es/columnMenu/GridColumnMenuFilter.d.ts +4 -0
  5. package/dist/es/columnMenu/GridColumnMenuFilter.js +3 -2
  6. package/dist/es/columnMenu/GridColumnMenuItem.d.ts +1 -2
  7. package/dist/es/columnMenu/GridColumnMenuItem.js +2 -8
  8. package/dist/es/columnMenu/GridColumnMenuWrapper.d.ts +2 -0
  9. package/dist/es/columnMenu/GridColumnMenuWrapper.js +11 -1
  10. package/dist/es/header/HeaderRow.js +2 -0
  11. package/dist/es/interfaces/GridColumnMenuColumnProps.d.ts +8 -0
  12. package/dist/es/main.d.ts +2 -1
  13. package/dist/es/main.js +2 -1
  14. package/dist/es/package-metadata.js +1 -1
  15. package/dist/npm/columnMenu/GridColumnMenuColumnsList.d.ts +27 -0
  16. package/dist/npm/columnMenu/GridColumnMenuColumnsList.js +61 -0
  17. package/dist/npm/columnMenu/GridColumnMenuFilter.d.ts +4 -0
  18. package/dist/npm/columnMenu/GridColumnMenuFilter.js +3 -2
  19. package/dist/npm/columnMenu/GridColumnMenuItem.d.ts +1 -2
  20. package/dist/npm/columnMenu/GridColumnMenuItem.js +2 -8
  21. package/dist/npm/columnMenu/GridColumnMenuWrapper.d.ts +2 -0
  22. package/dist/npm/columnMenu/GridColumnMenuWrapper.js +11 -1
  23. package/dist/npm/header/HeaderRow.js +2 -0
  24. package/dist/npm/interfaces/GridColumnMenuColumnProps.d.ts +8 -0
  25. package/dist/npm/main.d.ts +2 -1
  26. package/dist/npm/main.js +3 -1
  27. package/dist/npm/package-metadata.js +1 -1
  28. package/dist/systemjs/kendo-react-grid.js +1 -1
  29. package/package.json +18 -18
@@ -0,0 +1,27 @@
1
+ import * as React from 'react';
2
+ import { GridColumnProps } from './../interfaces/GridColumnProps';
3
+ /**
4
+ * Represents the props of the KendoReact GridColumnMenuColumnsList component.
5
+ */
6
+ export interface GridColumnMenuColumnsListProps {
7
+ /**
8
+ * The columns state of the KendoReact GridColumnMenuColumnsList component.
9
+ */
10
+ columnsState: GridColumnProps[];
11
+ /**
12
+ * The initial columns of the KendoReact GridColumnMenuColumnsList component.
13
+ */
14
+ columns: GridColumnProps[];
15
+ /**
16
+ * The onColumnsChange event handler of the KendoReact GridColumnMenuColumnsList component.
17
+ */
18
+ onColumnsChange: (cols: GridColumnProps[]) => void;
19
+ /**
20
+ * The onCloseMenu event handler of the KendoReact GridColumnMenuColumnsList component.
21
+ */
22
+ onCloseMenu: Function;
23
+ }
24
+ /**
25
+ * Represents the KendoReact GridColumnMenuColumnsList component.
26
+ */
27
+ export declare const GridColumnMenuColumnsList: React.FunctionComponent<GridColumnMenuColumnsListProps>;
@@ -0,0 +1,57 @@
1
+ import * as React from 'react';
2
+ import { Checkbox, InputPrefix, TextBox } from '@progress/kendo-react-inputs';
3
+ import { IconWrap } from '@progress/kendo-react-common';
4
+ import { searchIcon } from '@progress/kendo-svg-icons';
5
+ import { Button } from '@progress/kendo-react-buttons';
6
+ /**
7
+ * Represents the KendoReact GridColumnMenuColumnsList component.
8
+ */
9
+ export var GridColumnMenuColumnsList = function (props) {
10
+ var _a = React.useState(''), filter = _a[0], setFilter = _a[1];
11
+ var selectedColumnsIds = React.useMemo(function () { return new Set(props.columnsState.map(function (c) { return c.id; })); }, [props.columnsState]);
12
+ var filtered = React.useMemo(function () {
13
+ return props.columns.filter(function (c) { var _a; return (_a = (c.title || c.field)) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(filter.toLowerCase()); });
14
+ }, [props.columns, filter]);
15
+ var state = props.columns.map(function (c) { return React.useState(selectedColumnsIds.has(c.id)); });
16
+ var onApply = React.useCallback(function () {
17
+ var nextColumns = props.columns.filter(function (_c, i) { return state[i][0]; });
18
+ props.onColumnsChange.call(undefined, nextColumns);
19
+ props.onCloseMenu.call(undefined);
20
+ }, [state, props.columns, props.onColumnsChange, props.onCloseMenu]);
21
+ var onReset = React.useCallback(function () {
22
+ props.columns.forEach(function (c, i) {
23
+ state[i][1](selectedColumnsIds.has(c.id));
24
+ });
25
+ }, [state, selectedColumnsIds, props.columns]);
26
+ var checkedCount = state.filter(function (st) { return st[0]; }).length;
27
+ var allSelected = checkedCount === state.length;
28
+ var onSelectAll = React.useCallback(function () {
29
+ state.forEach(function (st, i) {
30
+ if (allSelected && i === 0) {
31
+ st[1](true);
32
+ }
33
+ else {
34
+ st[1](!allSelected);
35
+ }
36
+ });
37
+ }, [state, allSelected]);
38
+ return (React.createElement("form", { className: "k-filter-menu k-group k-reset" },
39
+ React.createElement("div", { className: "k-filter-menu-container" },
40
+ React.createElement(TextBox, { className: 'k-searchbox', value: filter, onChange: function (e) { return setFilter(String(e.target.value)); }, prefix: function () { return (React.createElement(React.Fragment, null,
41
+ React.createElement(InputPrefix, null,
42
+ React.createElement(IconWrap, { name: "search", icon: searchIcon })))); } }),
43
+ React.createElement("ul", { className: "k-reset k-multicheck-wrap" },
44
+ !filter && React.createElement("li", { className: "k-item k-check-all-wrap" },
45
+ React.createElement(Checkbox, { checked: allSelected, onChange: onSelectAll, label: '(Select all)' })),
46
+ filtered.map(function (c, i) {
47
+ return (React.createElement("li", { key: c.id, className: "k-item" },
48
+ React.createElement(Checkbox, { disabled: state[i][0] && checkedCount === 1, checked: state[i][0], onChange: function (e) { var _a; return state[i][1](Boolean((_a = e.target.element) === null || _a === void 0 ? void 0 : _a.checked)); }, label: c.title || c.field })));
49
+ })),
50
+ React.createElement("div", { className: "k-filter-selected-items" },
51
+ checkedCount,
52
+ " selected items"),
53
+ React.createElement("div", { className: "k-actions k-actions-start k-actions-horizontal" },
54
+ React.createElement(Button, { type: "button", themeColor: 'primary', onClick: onApply }, "Apply"),
55
+ React.createElement(Button, { type: "button", onClick: onReset }, "Reset")))));
56
+ };
57
+ GridColumnMenuColumnsList.displayName = 'GridColumnMenuColumnsList';
@@ -33,6 +33,10 @@ export interface GridColumnMenuFilterProps extends GridColumnMenuFilterBaseProps
33
33
  */
34
34
  filterUI?: ComponentType<GridColumnMenuFilterUIProps>;
35
35
  children?: React.ReactNode;
36
+ /**
37
+ * If set to `true`, filter expand button will not be rendered and filter menu will be expanded.
38
+ */
39
+ alwaysExpand?: boolean;
36
40
  }
37
41
  /**
38
42
  * @hidden
@@ -349,9 +349,10 @@ var GridColumnMenuFilter = /** @class */ (function (_super) {
349
349
  IsUnaryFilter(filters[0].operator) ||
350
350
  IsUnaryFilter(filters[1].operator);
351
351
  var expandState = this.isControlled() ? this.props.expanded : this.state.expanded;
352
+ var alwaysExpand = this.props.alwaysExpand;
352
353
  return (React.createElement(GridColumnMenuItemGroup, null,
353
- React.createElement(GridColumnMenuItem, { title: localizationService.toLanguageString(filterTitle, messages[filterTitle]), iconClass: 'k-i-filter', svgIcon: filterIcon, onClick: this.onFilterExpand }),
354
- React.createElement(GridColumnMenuItemContent, { show: !!expandState },
354
+ !alwaysExpand && React.createElement(GridColumnMenuItem, { title: localizationService.toLanguageString(filterTitle, messages[filterTitle]), iconClass: 'k-i-filter', svgIcon: filterIcon, onClick: this.onFilterExpand }),
355
+ React.createElement(GridColumnMenuItemContent, { show: alwaysExpand || !!expandState },
355
356
  React.createElement("div", { className: 'kendo-grid-filter-menu-container' },
356
357
  React.createElement("form", { className: 'k-filter-menu k-group k-reset k-state-border-up', onSubmit: this.submit, onReset: this.clear, onKeyDown: function (e) { return e.stopPropagation(); } },
357
358
  React.createElement("div", { className: 'k-filter-menu-container' },
@@ -7,7 +7,7 @@ export interface GridColumnMenuItemProps {
7
7
  /**
8
8
  * Triggered each time the title is clicked.
9
9
  */
10
- onClick: Function;
10
+ onClick: React.MouseEventHandler<HTMLElement>;
11
11
  /**
12
12
  * The title of the GridColumnMenuItem component.
13
13
  */
@@ -29,7 +29,6 @@ export interface GridColumnMenuItemProps {
29
29
  * The GridColumnMenuItem component that is used inside the Grid ColumnMenu.
30
30
  */
31
31
  export declare class GridColumnMenuItem extends React.Component<GridColumnMenuItemProps, {}> {
32
- onClick: (e: any) => void;
33
32
  /**
34
33
  * @hidden
35
34
  */
@@ -21,20 +21,14 @@ import { IconWrap, toIconName } from '@progress/kendo-react-common';
21
21
  var GridColumnMenuItem = /** @class */ (function (_super) {
22
22
  __extends(GridColumnMenuItem, _super);
23
23
  function GridColumnMenuItem() {
24
- var _this = _super !== null && _super.apply(this, arguments) || this;
25
- _this.onClick = function (e) {
26
- if (_this.props.onClick) {
27
- _this.props.onClick(e);
28
- }
29
- };
30
- return _this;
24
+ return _super !== null && _super.apply(this, arguments) || this;
31
25
  }
32
26
  /**
33
27
  * @hidden
34
28
  */
35
29
  GridColumnMenuItem.prototype.render = function () {
36
30
  var _a = this.props, title = _a.title, iconClass = _a.iconClass, svgIcon = _a.svgIcon, selected = _a.selected;
37
- return (React.createElement("div", { onClick: this.onClick, className: "k-columnmenu-item ".concat(selected ? 'k-selected' : '') },
31
+ return (React.createElement("div", { onClick: this.props.onClick, className: "k-columnmenu-item ".concat(selected ? 'k-selected' : '') },
38
32
  (iconClass || svgIcon) && React.createElement(IconWrap, { name: iconClass ? toIconName(iconClass) : iconClass, icon: svgIcon }),
39
33
  title));
40
34
  };
@@ -39,5 +39,7 @@ export declare class GridColumnMenuWrapper extends React.Component<GridColumnMen
39
39
  closeMenu: () => void;
40
40
  /** @hidden */
41
41
  onAnchorMouseDown: (event: React.MouseEvent<HTMLAnchorElement>) => void;
42
+ /** @hidden */
43
+ onAnchorFocus: (event: React.FocusEvent<HTMLAnchorElement>) => void;
42
44
  render(): JSX.Element;
43
45
  }
@@ -88,6 +88,16 @@ var GridColumnMenuWrapper = /** @class */ (function (_super) {
88
88
  _this.onAnchorMouseDown = function (event) {
89
89
  _this.willBlur = _this.state.show && event.currentTarget === _this._anchor;
90
90
  };
91
+ /** @hidden */
92
+ _this.onAnchorFocus = function (event) {
93
+ var _a;
94
+ var elementToFocus = event.target;
95
+ var parentScroll = elementToFocus && ((_a = elementToFocus.closest('.k-grid')) === null || _a === void 0 ? void 0 : _a.getElementsByClassName('k-grid-content')[0]);
96
+ var hasHorizontalScrollbar = parentScroll && (parentScroll.scrollWidth > parentScroll.clientWidth);
97
+ if (hasHorizontalScrollbar) {
98
+ elementToFocus.scrollIntoView({ inline: 'center' });
99
+ }
100
+ };
91
101
  return _this;
92
102
  }
93
103
  GridColumnMenuWrapper.prototype.render = function () {
@@ -97,7 +107,7 @@ var GridColumnMenuWrapper = /** @class */ (function (_super) {
97
107
  var localizationService = provideLocalizationService(this);
98
108
  var field = column.field ? "".concat(column.field, " ") : '';
99
109
  return (React.createElement(React.Fragment, null,
100
- React.createElement("a", { className: 'k-grid-header-menu k-grid-column-menu', ref: function (e) { return _this._anchor = e; }, onClick: this.anchorClick, onMouseDown: this.onAnchorMouseDown, href: "#", title: "".concat(field).concat(localizationService.toLanguageString(columnMenu, messages[columnMenu])) },
110
+ React.createElement("a", { className: 'k-grid-header-menu k-grid-column-menu', ref: function (e) { return _this._anchor = e; }, onClick: this.anchorClick, onMouseDown: this.onAnchorMouseDown, onFocus: this.onAnchorFocus, href: "#", title: "".concat(field).concat(localizationService.toLanguageString(columnMenu, messages[columnMenu])) },
101
111
  React.createElement(IconWrap, { name: 'more-vertical', icon: moreVerticalIcon })),
102
112
  React.createElement(Popup, { anchor: this._anchor, show: this.state.show },
103
113
  React.createElement("div", { ref: function (e) { return _this._content = e; }, className: 'k-grid-columnmenu-popup', tabIndex: 0, onBlur: this.blur, onFocus: this.focus, style: { outline: 'none' } }, ColumnMenu && (React.createElement(ColumnMenu, __assign({}, others, { onCloseMenu: this.closeMenu })))))));
@@ -100,6 +100,8 @@ var HeaderRow = /** @class */ (function (_super) {
100
100
  var headerCell = (React.createElement(HeaderCell, { key: 1, field: column.field, onClick: sortable && (function (e) { return _this.cellClick(e, column); }) || undefined, selectionChange: _this.props.selectionChange, title: column.title, selectionValue: column.headerSelectionValue, render: _this.props.cellRender, children: _this.sortIcon(sortIndex), columnMenuWrapperProps: {
101
101
  column: {
102
102
  field: column.field,
103
+ id: column.id,
104
+ locked: column.locked,
103
105
  filter: column.filter
104
106
  },
105
107
  sortable: sortable && _this.props.sortable,
@@ -10,4 +10,12 @@ export interface GridColumnMenuColumnProps {
10
10
  * Defines the filter type that is displayed inside the filter row. Defaults to `text`.
11
11
  */
12
12
  filter?: 'text' | 'numeric' | 'boolean' | 'date';
13
+ /**
14
+ * The column id.
15
+ */
16
+ id?: string;
17
+ /**
18
+ * The column locked state.
19
+ */
20
+ locked?: boolean;
13
21
  }
package/dist/es/main.d.ts CHANGED
@@ -10,6 +10,7 @@ import { GridColumnMenuFilter, rootFilterOrDefault, filterGroupByField, GridColu
10
10
  import { GridColumnMenuFilterUI } from './columnMenu/GridColumnMenuFilterUI';
11
11
  import { GridColumnMenuFilterCell, GridColumnMenuFilterCellProps } from './columnMenu/GridColumnMenuFilterCell';
12
12
  import { GridColumnMenuCheckboxFilter, GridColumnMenuCheckboxFilterProps } from './columnMenu/GridColumnMenuCheckboxFilter';
13
+ import { GridColumnMenuColumnsList, GridColumnMenuColumnsListProps } from './columnMenu/GridColumnMenuColumnsList';
13
14
  import { GridCellProps } from './interfaces/GridCellProps';
14
15
  import { GridCell } from './cells/GridCell';
15
16
  import { GridEditCell } from './cells/GridEditCell';
@@ -46,4 +47,4 @@ import { GRID_COL_INDEX_ATTRIBUTE, GRID_ROW_INDEX_ATTRIBUTE } from './constants'
46
47
  import { getSelectedState, getSelectedStateFromKeyDown, setSelectedState } from '@progress/kendo-react-data-tools';
47
48
  import { CommonDragLogic as GridCommonDragLogic } from './drag/CommonDragLogic';
48
49
  import { booleanFilterValues, operators } from './filterCommon';
49
- export { Grid, GridProps, GridColumn, GridColumnProps, GridCellProps, GridCell, GridEditCell, GridGroupCell, GridHierarchyCell, GridDetailRow, GridDetailRowProps, GridRow, GridRowProps, GridFilterCell, GridFilterCellProps, GridHeaderCell, GridHeaderCellProps, GridSelectionCell, GridColumnMenuProps, GridColumnMenuSort, GridColumnMenuFilter, GridColumnMenuGroup, GridColumnMenuItem, GridColumnMenuItemContent, GridColumnMenuItemGroup, GridColumnMenuFilterUI, GridColumnMenuFilterUIProps, GridColumnMenuFilterCell, GridColumnMenuFilterCellProps, GridColumnMenuCheckboxFilter, GridColumnMenuCheckboxFilterProps, GridToolbar, GridToolbarProps, GridNoRecords, GridNoRecordsProps, GridSortSettings, GridPagerSettings, GridGroupableSettings, GridFooterCellProps, GridSelectableMode, GridFilterOperators, GridFilterOperator, GridColumnMenuWrapper, GridColumnMenuWrapperProps, getSelectedState, setSelectedState, getSelectedStateFromKeyDown, GRID_COL_INDEX_ATTRIBUTE, GRID_ROW_INDEX_ATTRIBUTE, GridCommonDragLogic, rootFilterOrDefault, filterGroupByField, GridColumnMenuFilterProps, booleanFilterValues, operators };
50
+ export { Grid, GridProps, GridColumn, GridColumnProps, GridCellProps, GridCell, GridEditCell, GridGroupCell, GridHierarchyCell, GridDetailRow, GridDetailRowProps, GridRow, GridRowProps, GridFilterCell, GridFilterCellProps, GridHeaderCell, GridHeaderCellProps, GridSelectionCell, GridColumnMenuProps, GridColumnMenuSort, GridColumnMenuFilter, GridColumnMenuGroup, GridColumnMenuItem, GridColumnMenuItemContent, GridColumnMenuItemGroup, GridColumnMenuFilterUI, GridColumnMenuFilterUIProps, GridColumnMenuFilterCell, GridColumnMenuFilterCellProps, GridColumnMenuCheckboxFilter, GridColumnMenuCheckboxFilterProps, GridColumnMenuColumnsList, GridColumnMenuColumnsListProps, GridToolbar, GridToolbarProps, GridNoRecords, GridNoRecordsProps, GridSortSettings, GridPagerSettings, GridGroupableSettings, GridFooterCellProps, GridSelectableMode, GridFilterOperators, GridFilterOperator, GridColumnMenuWrapper, GridColumnMenuWrapperProps, getSelectedState, setSelectedState, getSelectedStateFromKeyDown, GRID_COL_INDEX_ATTRIBUTE, GRID_ROW_INDEX_ATTRIBUTE, GridCommonDragLogic, rootFilterOrDefault, filterGroupByField, GridColumnMenuFilterProps, booleanFilterValues, operators };
package/dist/es/main.js CHANGED
@@ -7,6 +7,7 @@ import { GridColumnMenuFilter, rootFilterOrDefault, filterGroupByField } from '.
7
7
  import { GridColumnMenuFilterUI } from './columnMenu/GridColumnMenuFilterUI';
8
8
  import { GridColumnMenuFilterCell } from './columnMenu/GridColumnMenuFilterCell';
9
9
  import { GridColumnMenuCheckboxFilter } from './columnMenu/GridColumnMenuCheckboxFilter';
10
+ import { GridColumnMenuColumnsList } from './columnMenu/GridColumnMenuColumnsList';
10
11
  import { GridCell } from './cells/GridCell';
11
12
  import { GridEditCell } from './cells/GridEditCell';
12
13
  import { GridGroupCell } from './cells/GridGroupCell';
@@ -28,4 +29,4 @@ import { GRID_COL_INDEX_ATTRIBUTE, GRID_ROW_INDEX_ATTRIBUTE } from './constants'
28
29
  import { getSelectedState, getSelectedStateFromKeyDown, setSelectedState } from '@progress/kendo-react-data-tools';
29
30
  import { CommonDragLogic as GridCommonDragLogic } from './drag/CommonDragLogic';
30
31
  import { booleanFilterValues, operators } from './filterCommon';
31
- export { Grid, GridColumn, GridCell, GridEditCell, GridGroupCell, GridHierarchyCell, GridDetailRow, GridRow, GridFilterCell, GridHeaderCell, GridSelectionCell, GridColumnMenuSort, GridColumnMenuFilter, GridColumnMenuGroup, GridColumnMenuItem, GridColumnMenuItemContent, GridColumnMenuItemGroup, GridColumnMenuFilterUI, GridColumnMenuFilterCell, GridColumnMenuCheckboxFilter, GridToolbar, GridNoRecords, GridColumnMenuWrapper, getSelectedState, setSelectedState, getSelectedStateFromKeyDown, GRID_COL_INDEX_ATTRIBUTE, GRID_ROW_INDEX_ATTRIBUTE, GridCommonDragLogic, rootFilterOrDefault, filterGroupByField, booleanFilterValues, operators };
32
+ export { Grid, GridColumn, GridCell, GridEditCell, GridGroupCell, GridHierarchyCell, GridDetailRow, GridRow, GridFilterCell, GridHeaderCell, GridSelectionCell, GridColumnMenuSort, GridColumnMenuFilter, GridColumnMenuGroup, GridColumnMenuItem, GridColumnMenuItemContent, GridColumnMenuItemGroup, GridColumnMenuFilterUI, GridColumnMenuFilterCell, GridColumnMenuCheckboxFilter, GridColumnMenuColumnsList, GridToolbar, GridNoRecords, GridColumnMenuWrapper, getSelectedState, setSelectedState, getSelectedStateFromKeyDown, GRID_COL_INDEX_ATTRIBUTE, GRID_ROW_INDEX_ATTRIBUTE, GridCommonDragLogic, rootFilterOrDefault, filterGroupByField, booleanFilterValues, operators };
@@ -5,7 +5,7 @@ export var packageMetadata = {
5
5
  name: '@progress/kendo-react-grid',
6
6
  productName: 'KendoReact',
7
7
  productCodes: ['KENDOUIREACT', 'KENDOUICOMPLETE'],
8
- publishDate: 1695215976,
8
+ publishDate: 1695307955,
9
9
  version: '',
10
10
  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'
11
11
  };
@@ -0,0 +1,27 @@
1
+ import * as React from 'react';
2
+ import { GridColumnProps } from './../interfaces/GridColumnProps';
3
+ /**
4
+ * Represents the props of the KendoReact GridColumnMenuColumnsList component.
5
+ */
6
+ export interface GridColumnMenuColumnsListProps {
7
+ /**
8
+ * The columns state of the KendoReact GridColumnMenuColumnsList component.
9
+ */
10
+ columnsState: GridColumnProps[];
11
+ /**
12
+ * The initial columns of the KendoReact GridColumnMenuColumnsList component.
13
+ */
14
+ columns: GridColumnProps[];
15
+ /**
16
+ * The onColumnsChange event handler of the KendoReact GridColumnMenuColumnsList component.
17
+ */
18
+ onColumnsChange: (cols: GridColumnProps[]) => void;
19
+ /**
20
+ * The onCloseMenu event handler of the KendoReact GridColumnMenuColumnsList component.
21
+ */
22
+ onCloseMenu: Function;
23
+ }
24
+ /**
25
+ * Represents the KendoReact GridColumnMenuColumnsList component.
26
+ */
27
+ export declare const GridColumnMenuColumnsList: React.FunctionComponent<GridColumnMenuColumnsListProps>;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GridColumnMenuColumnsList = void 0;
4
+ var React = require("react");
5
+ var kendo_react_inputs_1 = require("@progress/kendo-react-inputs");
6
+ var kendo_react_common_1 = require("@progress/kendo-react-common");
7
+ var kendo_svg_icons_1 = require("@progress/kendo-svg-icons");
8
+ var kendo_react_buttons_1 = require("@progress/kendo-react-buttons");
9
+ /**
10
+ * Represents the KendoReact GridColumnMenuColumnsList component.
11
+ */
12
+ var GridColumnMenuColumnsList = function (props) {
13
+ var _a = React.useState(''), filter = _a[0], setFilter = _a[1];
14
+ var selectedColumnsIds = React.useMemo(function () { return new Set(props.columnsState.map(function (c) { return c.id; })); }, [props.columnsState]);
15
+ var filtered = React.useMemo(function () {
16
+ return props.columns.filter(function (c) { var _a; return (_a = (c.title || c.field)) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(filter.toLowerCase()); });
17
+ }, [props.columns, filter]);
18
+ var state = props.columns.map(function (c) { return React.useState(selectedColumnsIds.has(c.id)); });
19
+ var onApply = React.useCallback(function () {
20
+ var nextColumns = props.columns.filter(function (_c, i) { return state[i][0]; });
21
+ props.onColumnsChange.call(undefined, nextColumns);
22
+ props.onCloseMenu.call(undefined);
23
+ }, [state, props.columns, props.onColumnsChange, props.onCloseMenu]);
24
+ var onReset = React.useCallback(function () {
25
+ props.columns.forEach(function (c, i) {
26
+ state[i][1](selectedColumnsIds.has(c.id));
27
+ });
28
+ }, [state, selectedColumnsIds, props.columns]);
29
+ var checkedCount = state.filter(function (st) { return st[0]; }).length;
30
+ var allSelected = checkedCount === state.length;
31
+ var onSelectAll = React.useCallback(function () {
32
+ state.forEach(function (st, i) {
33
+ if (allSelected && i === 0) {
34
+ st[1](true);
35
+ }
36
+ else {
37
+ st[1](!allSelected);
38
+ }
39
+ });
40
+ }, [state, allSelected]);
41
+ return (React.createElement("form", { className: "k-filter-menu k-group k-reset" },
42
+ React.createElement("div", { className: "k-filter-menu-container" },
43
+ React.createElement(kendo_react_inputs_1.TextBox, { className: 'k-searchbox', value: filter, onChange: function (e) { return setFilter(String(e.target.value)); }, prefix: function () { return (React.createElement(React.Fragment, null,
44
+ React.createElement(kendo_react_inputs_1.InputPrefix, null,
45
+ React.createElement(kendo_react_common_1.IconWrap, { name: "search", icon: kendo_svg_icons_1.searchIcon })))); } }),
46
+ React.createElement("ul", { className: "k-reset k-multicheck-wrap" },
47
+ !filter && React.createElement("li", { className: "k-item k-check-all-wrap" },
48
+ React.createElement(kendo_react_inputs_1.Checkbox, { checked: allSelected, onChange: onSelectAll, label: '(Select all)' })),
49
+ filtered.map(function (c, i) {
50
+ return (React.createElement("li", { key: c.id, className: "k-item" },
51
+ React.createElement(kendo_react_inputs_1.Checkbox, { disabled: state[i][0] && checkedCount === 1, checked: state[i][0], onChange: function (e) { var _a; return state[i][1](Boolean((_a = e.target.element) === null || _a === void 0 ? void 0 : _a.checked)); }, label: c.title || c.field })));
52
+ })),
53
+ React.createElement("div", { className: "k-filter-selected-items" },
54
+ checkedCount,
55
+ " selected items"),
56
+ React.createElement("div", { className: "k-actions k-actions-start k-actions-horizontal" },
57
+ React.createElement(kendo_react_buttons_1.Button, { type: "button", themeColor: 'primary', onClick: onApply }, "Apply"),
58
+ React.createElement(kendo_react_buttons_1.Button, { type: "button", onClick: onReset }, "Reset")))));
59
+ };
60
+ exports.GridColumnMenuColumnsList = GridColumnMenuColumnsList;
61
+ exports.GridColumnMenuColumnsList.displayName = 'GridColumnMenuColumnsList';
@@ -33,6 +33,10 @@ export interface GridColumnMenuFilterProps extends GridColumnMenuFilterBaseProps
33
33
  */
34
34
  filterUI?: ComponentType<GridColumnMenuFilterUIProps>;
35
35
  children?: React.ReactNode;
36
+ /**
37
+ * If set to `true`, filter expand button will not be rendered and filter menu will be expanded.
38
+ */
39
+ alwaysExpand?: boolean;
36
40
  }
37
41
  /**
38
42
  * @hidden
@@ -354,9 +354,10 @@ var GridColumnMenuFilter = /** @class */ (function (_super) {
354
354
  (0, filterCommon_1.IsUnaryFilter)(filters[0].operator) ||
355
355
  (0, filterCommon_1.IsUnaryFilter)(filters[1].operator);
356
356
  var expandState = this.isControlled() ? this.props.expanded : this.state.expanded;
357
+ var alwaysExpand = this.props.alwaysExpand;
357
358
  return (React.createElement(GridColumnMenuItemGroup_1.GridColumnMenuItemGroup, null,
358
- React.createElement(GridColumnMenuItem_1.GridColumnMenuItem, { title: localizationService.toLanguageString(messages_1.filterTitle, messages_1.messages[messages_1.filterTitle]), iconClass: 'k-i-filter', svgIcon: kendo_svg_icons_1.filterIcon, onClick: this.onFilterExpand }),
359
- React.createElement(GridColumnMenuItemContent_1.GridColumnMenuItemContent, { show: !!expandState },
359
+ !alwaysExpand && React.createElement(GridColumnMenuItem_1.GridColumnMenuItem, { title: localizationService.toLanguageString(messages_1.filterTitle, messages_1.messages[messages_1.filterTitle]), iconClass: 'k-i-filter', svgIcon: kendo_svg_icons_1.filterIcon, onClick: this.onFilterExpand }),
360
+ React.createElement(GridColumnMenuItemContent_1.GridColumnMenuItemContent, { show: alwaysExpand || !!expandState },
360
361
  React.createElement("div", { className: 'kendo-grid-filter-menu-container' },
361
362
  React.createElement("form", { className: 'k-filter-menu k-group k-reset k-state-border-up', onSubmit: this.submit, onReset: this.clear, onKeyDown: function (e) { return e.stopPropagation(); } },
362
363
  React.createElement("div", { className: 'k-filter-menu-container' },
@@ -7,7 +7,7 @@ export interface GridColumnMenuItemProps {
7
7
  /**
8
8
  * Triggered each time the title is clicked.
9
9
  */
10
- onClick: Function;
10
+ onClick: React.MouseEventHandler<HTMLElement>;
11
11
  /**
12
12
  * The title of the GridColumnMenuItem component.
13
13
  */
@@ -29,7 +29,6 @@ export interface GridColumnMenuItemProps {
29
29
  * The GridColumnMenuItem component that is used inside the Grid ColumnMenu.
30
30
  */
31
31
  export declare class GridColumnMenuItem extends React.Component<GridColumnMenuItemProps, {}> {
32
- onClick: (e: any) => void;
33
32
  /**
34
33
  * @hidden
35
34
  */
@@ -24,20 +24,14 @@ var kendo_react_common_1 = require("@progress/kendo-react-common");
24
24
  var GridColumnMenuItem = /** @class */ (function (_super) {
25
25
  __extends(GridColumnMenuItem, _super);
26
26
  function GridColumnMenuItem() {
27
- var _this = _super !== null && _super.apply(this, arguments) || this;
28
- _this.onClick = function (e) {
29
- if (_this.props.onClick) {
30
- _this.props.onClick(e);
31
- }
32
- };
33
- return _this;
27
+ return _super !== null && _super.apply(this, arguments) || this;
34
28
  }
35
29
  /**
36
30
  * @hidden
37
31
  */
38
32
  GridColumnMenuItem.prototype.render = function () {
39
33
  var _a = this.props, title = _a.title, iconClass = _a.iconClass, svgIcon = _a.svgIcon, selected = _a.selected;
40
- return (React.createElement("div", { onClick: this.onClick, className: "k-columnmenu-item ".concat(selected ? 'k-selected' : '') },
34
+ return (React.createElement("div", { onClick: this.props.onClick, className: "k-columnmenu-item ".concat(selected ? 'k-selected' : '') },
41
35
  (iconClass || svgIcon) && React.createElement(kendo_react_common_1.IconWrap, { name: iconClass ? (0, kendo_react_common_1.toIconName)(iconClass) : iconClass, icon: svgIcon }),
42
36
  title));
43
37
  };
@@ -39,5 +39,7 @@ export declare class GridColumnMenuWrapper extends React.Component<GridColumnMen
39
39
  closeMenu: () => void;
40
40
  /** @hidden */
41
41
  onAnchorMouseDown: (event: React.MouseEvent<HTMLAnchorElement>) => void;
42
+ /** @hidden */
43
+ onAnchorFocus: (event: React.FocusEvent<HTMLAnchorElement>) => void;
42
44
  render(): JSX.Element;
43
45
  }
@@ -91,6 +91,16 @@ var GridColumnMenuWrapper = /** @class */ (function (_super) {
91
91
  _this.onAnchorMouseDown = function (event) {
92
92
  _this.willBlur = _this.state.show && event.currentTarget === _this._anchor;
93
93
  };
94
+ /** @hidden */
95
+ _this.onAnchorFocus = function (event) {
96
+ var _a;
97
+ var elementToFocus = event.target;
98
+ var parentScroll = elementToFocus && ((_a = elementToFocus.closest('.k-grid')) === null || _a === void 0 ? void 0 : _a.getElementsByClassName('k-grid-content')[0]);
99
+ var hasHorizontalScrollbar = parentScroll && (parentScroll.scrollWidth > parentScroll.clientWidth);
100
+ if (hasHorizontalScrollbar) {
101
+ elementToFocus.scrollIntoView({ inline: 'center' });
102
+ }
103
+ };
94
104
  return _this;
95
105
  }
96
106
  GridColumnMenuWrapper.prototype.render = function () {
@@ -100,7 +110,7 @@ var GridColumnMenuWrapper = /** @class */ (function (_super) {
100
110
  var localizationService = (0, kendo_react_intl_1.provideLocalizationService)(this);
101
111
  var field = column.field ? "".concat(column.field, " ") : '';
102
112
  return (React.createElement(React.Fragment, null,
103
- React.createElement("a", { className: 'k-grid-header-menu k-grid-column-menu', ref: function (e) { return _this._anchor = e; }, onClick: this.anchorClick, onMouseDown: this.onAnchorMouseDown, href: "#", title: "".concat(field).concat(localizationService.toLanguageString(messages_1.columnMenu, messages_1.messages[messages_1.columnMenu])) },
113
+ React.createElement("a", { className: 'k-grid-header-menu k-grid-column-menu', ref: function (e) { return _this._anchor = e; }, onClick: this.anchorClick, onMouseDown: this.onAnchorMouseDown, onFocus: this.onAnchorFocus, href: "#", title: "".concat(field).concat(localizationService.toLanguageString(messages_1.columnMenu, messages_1.messages[messages_1.columnMenu])) },
104
114
  React.createElement(kendo_react_common_1.IconWrap, { name: 'more-vertical', icon: kendo_svg_icons_1.moreVerticalIcon })),
105
115
  React.createElement(kendo_react_popup_1.Popup, { anchor: this._anchor, show: this.state.show },
106
116
  React.createElement("div", { ref: function (e) { return _this._content = e; }, className: 'k-grid-columnmenu-popup', tabIndex: 0, onBlur: this.blur, onFocus: this.focus, style: { outline: 'none' } }, ColumnMenu && (React.createElement(ColumnMenu, __assign({}, others, { onCloseMenu: this.closeMenu })))))));
@@ -103,6 +103,8 @@ var HeaderRow = /** @class */ (function (_super) {
103
103
  var headerCell = (React.createElement(HeaderCell, { key: 1, field: column.field, onClick: sortable && (function (e) { return _this.cellClick(e, column); }) || undefined, selectionChange: _this.props.selectionChange, title: column.title, selectionValue: column.headerSelectionValue, render: _this.props.cellRender, children: _this.sortIcon(sortIndex), columnMenuWrapperProps: {
104
104
  column: {
105
105
  field: column.field,
106
+ id: column.id,
107
+ locked: column.locked,
106
108
  filter: column.filter
107
109
  },
108
110
  sortable: sortable && _this.props.sortable,
@@ -10,4 +10,12 @@ export interface GridColumnMenuColumnProps {
10
10
  * Defines the filter type that is displayed inside the filter row. Defaults to `text`.
11
11
  */
12
12
  filter?: 'text' | 'numeric' | 'boolean' | 'date';
13
+ /**
14
+ * The column id.
15
+ */
16
+ id?: string;
17
+ /**
18
+ * The column locked state.
19
+ */
20
+ locked?: boolean;
13
21
  }
@@ -10,6 +10,7 @@ import { GridColumnMenuFilter, rootFilterOrDefault, filterGroupByField, GridColu
10
10
  import { GridColumnMenuFilterUI } from './columnMenu/GridColumnMenuFilterUI';
11
11
  import { GridColumnMenuFilterCell, GridColumnMenuFilterCellProps } from './columnMenu/GridColumnMenuFilterCell';
12
12
  import { GridColumnMenuCheckboxFilter, GridColumnMenuCheckboxFilterProps } from './columnMenu/GridColumnMenuCheckboxFilter';
13
+ import { GridColumnMenuColumnsList, GridColumnMenuColumnsListProps } from './columnMenu/GridColumnMenuColumnsList';
13
14
  import { GridCellProps } from './interfaces/GridCellProps';
14
15
  import { GridCell } from './cells/GridCell';
15
16
  import { GridEditCell } from './cells/GridEditCell';
@@ -46,4 +47,4 @@ import { GRID_COL_INDEX_ATTRIBUTE, GRID_ROW_INDEX_ATTRIBUTE } from './constants'
46
47
  import { getSelectedState, getSelectedStateFromKeyDown, setSelectedState } from '@progress/kendo-react-data-tools';
47
48
  import { CommonDragLogic as GridCommonDragLogic } from './drag/CommonDragLogic';
48
49
  import { booleanFilterValues, operators } from './filterCommon';
49
- export { Grid, GridProps, GridColumn, GridColumnProps, GridCellProps, GridCell, GridEditCell, GridGroupCell, GridHierarchyCell, GridDetailRow, GridDetailRowProps, GridRow, GridRowProps, GridFilterCell, GridFilterCellProps, GridHeaderCell, GridHeaderCellProps, GridSelectionCell, GridColumnMenuProps, GridColumnMenuSort, GridColumnMenuFilter, GridColumnMenuGroup, GridColumnMenuItem, GridColumnMenuItemContent, GridColumnMenuItemGroup, GridColumnMenuFilterUI, GridColumnMenuFilterUIProps, GridColumnMenuFilterCell, GridColumnMenuFilterCellProps, GridColumnMenuCheckboxFilter, GridColumnMenuCheckboxFilterProps, GridToolbar, GridToolbarProps, GridNoRecords, GridNoRecordsProps, GridSortSettings, GridPagerSettings, GridGroupableSettings, GridFooterCellProps, GridSelectableMode, GridFilterOperators, GridFilterOperator, GridColumnMenuWrapper, GridColumnMenuWrapperProps, getSelectedState, setSelectedState, getSelectedStateFromKeyDown, GRID_COL_INDEX_ATTRIBUTE, GRID_ROW_INDEX_ATTRIBUTE, GridCommonDragLogic, rootFilterOrDefault, filterGroupByField, GridColumnMenuFilterProps, booleanFilterValues, operators };
50
+ export { Grid, GridProps, GridColumn, GridColumnProps, GridCellProps, GridCell, GridEditCell, GridGroupCell, GridHierarchyCell, GridDetailRow, GridDetailRowProps, GridRow, GridRowProps, GridFilterCell, GridFilterCellProps, GridHeaderCell, GridHeaderCellProps, GridSelectionCell, GridColumnMenuProps, GridColumnMenuSort, GridColumnMenuFilter, GridColumnMenuGroup, GridColumnMenuItem, GridColumnMenuItemContent, GridColumnMenuItemGroup, GridColumnMenuFilterUI, GridColumnMenuFilterUIProps, GridColumnMenuFilterCell, GridColumnMenuFilterCellProps, GridColumnMenuCheckboxFilter, GridColumnMenuCheckboxFilterProps, GridColumnMenuColumnsList, GridColumnMenuColumnsListProps, GridToolbar, GridToolbarProps, GridNoRecords, GridNoRecordsProps, GridSortSettings, GridPagerSettings, GridGroupableSettings, GridFooterCellProps, GridSelectableMode, GridFilterOperators, GridFilterOperator, GridColumnMenuWrapper, GridColumnMenuWrapperProps, getSelectedState, setSelectedState, getSelectedStateFromKeyDown, GRID_COL_INDEX_ATTRIBUTE, GRID_ROW_INDEX_ATTRIBUTE, GridCommonDragLogic, rootFilterOrDefault, filterGroupByField, GridColumnMenuFilterProps, booleanFilterValues, operators };
package/dist/npm/main.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.operators = exports.booleanFilterValues = exports.filterGroupByField = exports.rootFilterOrDefault = exports.GridCommonDragLogic = exports.GRID_ROW_INDEX_ATTRIBUTE = exports.GRID_COL_INDEX_ATTRIBUTE = exports.getSelectedStateFromKeyDown = exports.setSelectedState = exports.getSelectedState = exports.GridColumnMenuWrapper = exports.GridNoRecords = exports.GridToolbar = exports.GridColumnMenuCheckboxFilter = exports.GridColumnMenuFilterCell = exports.GridColumnMenuFilterUI = exports.GridColumnMenuItemGroup = exports.GridColumnMenuItemContent = exports.GridColumnMenuItem = exports.GridColumnMenuGroup = exports.GridColumnMenuFilter = exports.GridColumnMenuSort = exports.GridSelectionCell = exports.GridHeaderCell = exports.GridFilterCell = exports.GridRow = exports.GridDetailRow = exports.GridHierarchyCell = exports.GridGroupCell = exports.GridEditCell = exports.GridCell = exports.GridColumn = exports.Grid = exports.pagerItemPerPage = exports.pagerLastPage = exports.pagerNextPage = exports.pagerPreviousPage = exports.pagerFirstPage = exports.pagerInfo = exports.gridMessages = void 0;
17
+ exports.operators = exports.booleanFilterValues = exports.filterGroupByField = exports.rootFilterOrDefault = exports.GridCommonDragLogic = exports.GRID_ROW_INDEX_ATTRIBUTE = exports.GRID_COL_INDEX_ATTRIBUTE = exports.getSelectedStateFromKeyDown = exports.setSelectedState = exports.getSelectedState = exports.GridColumnMenuWrapper = exports.GridNoRecords = exports.GridToolbar = exports.GridColumnMenuColumnsList = exports.GridColumnMenuCheckboxFilter = exports.GridColumnMenuFilterCell = exports.GridColumnMenuFilterUI = exports.GridColumnMenuItemGroup = exports.GridColumnMenuItemContent = exports.GridColumnMenuItem = exports.GridColumnMenuGroup = exports.GridColumnMenuFilter = exports.GridColumnMenuSort = exports.GridSelectionCell = exports.GridHeaderCell = exports.GridFilterCell = exports.GridRow = exports.GridDetailRow = exports.GridHierarchyCell = exports.GridGroupCell = exports.GridEditCell = exports.GridCell = exports.GridColumn = exports.Grid = exports.pagerItemPerPage = exports.pagerLastPage = exports.pagerNextPage = exports.pagerPreviousPage = exports.pagerFirstPage = exports.pagerInfo = exports.gridMessages = void 0;
18
18
  var Grid_1 = require("./Grid");
19
19
  Object.defineProperty(exports, "Grid", { enumerable: true, get: function () { return Grid_1.Grid; } });
20
20
  var GridColumn_1 = require("./GridColumn");
@@ -35,6 +35,8 @@ var GridColumnMenuFilterCell_1 = require("./columnMenu/GridColumnMenuFilterCell"
35
35
  Object.defineProperty(exports, "GridColumnMenuFilterCell", { enumerable: true, get: function () { return GridColumnMenuFilterCell_1.GridColumnMenuFilterCell; } });
36
36
  var GridColumnMenuCheckboxFilter_1 = require("./columnMenu/GridColumnMenuCheckboxFilter");
37
37
  Object.defineProperty(exports, "GridColumnMenuCheckboxFilter", { enumerable: true, get: function () { return GridColumnMenuCheckboxFilter_1.GridColumnMenuCheckboxFilter; } });
38
+ var GridColumnMenuColumnsList_1 = require("./columnMenu/GridColumnMenuColumnsList");
39
+ Object.defineProperty(exports, "GridColumnMenuColumnsList", { enumerable: true, get: function () { return GridColumnMenuColumnsList_1.GridColumnMenuColumnsList; } });
38
40
  var GridCell_1 = require("./cells/GridCell");
39
41
  Object.defineProperty(exports, "GridCell", { enumerable: true, get: function () { return GridCell_1.GridCell; } });
40
42
  var GridEditCell_1 = require("./cells/GridEditCell");
@@ -8,7 +8,7 @@ exports.packageMetadata = {
8
8
  name: '@progress/kendo-react-grid',
9
9
  productName: 'KendoReact',
10
10
  productCodes: ['KENDOUIREACT', 'KENDOUICOMPLETE'],
11
- publishDate: 1695215976,
11
+ publishDate: 1695307955,
12
12
  version: '',
13
13
  licensingDocsUrl: 'https://www.telerik.com/kendo-react-ui/my-license/?utm_medium=product&utm_source=kendoreact&utm_campaign=kendo-ui-react-purchase-license-keys-warning'
14
14
  };