ui.data_grid.grouping.js 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619
  1. /**
  2. * DevExtreme (ui/data_grid/ui.data_grid.grouping.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var _renderer = require("../../core/renderer");
  11. var _renderer2 = _interopRequireDefault(_renderer);
  12. var _uiData_grid = require("./ui.data_grid.core");
  13. var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
  14. var _uiData_gridGrouping = require("./ui.data_grid.grouping.expanded");
  15. var _uiData_gridGrouping2 = require("./ui.data_grid.grouping.collapsed");
  16. var _message = require("../../localization/message");
  17. var _message2 = _interopRequireDefault(_message);
  18. var _uiData_grid3 = require("./ui.data_grid.data_source_adapter");
  19. var _uiData_grid4 = _interopRequireDefault(_uiData_grid3);
  20. var _type = require("../../core/utils/type");
  21. var _iterator = require("../../core/utils/iterator");
  22. var _devices = require("../../core/devices");
  23. var _devices2 = _interopRequireDefault(_devices);
  24. var _deferred = require("../../core/utils/deferred");
  25. var _uiGrid_core = require("../grid_core/ui.grid_core.accessibility");
  26. var _accessibility = require("../shared/accessibility");
  27. function _interopRequireDefault(obj) {
  28. return obj && obj.__esModule ? obj : {
  29. "default": obj
  30. }
  31. }
  32. var DATAGRID_GROUP_PANEL_CLASS = "dx-datagrid-group-panel";
  33. var DATAGRID_GROUP_PANEL_MESSAGE_CLASS = "dx-group-panel-message";
  34. var DATAGRID_GROUP_PANEL_ITEM_CLASS = "dx-group-panel-item";
  35. var DATAGRID_GROUP_PANEL_LABEL_CLASS = "dx-toolbar-label";
  36. var DATAGRID_EXPAND_CLASS = "dx-datagrid-expand";
  37. var DATAGRID_GROUP_ROW_CLASS = "dx-group-row";
  38. var HEADER_FILTER_CLASS_SELECTOR = ".dx-header-filter";
  39. var GroupingDataSourceAdapterExtender = function() {
  40. return {
  41. init: function() {
  42. this.callBase.apply(this, arguments);
  43. this._initGroupingHelper()
  44. },
  45. _initGroupingHelper: function(options) {
  46. var grouping = this._grouping;
  47. var isAutoExpandAll = this.option("grouping.autoExpandAll");
  48. var isFocusedRowEnabled = this.option("focusedRowEnabled");
  49. var remoteOperations = options ? options.remoteOperations : this.remoteOperations();
  50. var isODataRemoteOperations = remoteOperations.filtering && remoteOperations.sorting && remoteOperations.paging;
  51. if (isODataRemoteOperations && !remoteOperations.grouping && (isAutoExpandAll || !isFocusedRowEnabled)) {
  52. if (!grouping || grouping instanceof _uiData_gridGrouping2.GroupingHelper) {
  53. this._grouping = new _uiData_gridGrouping.GroupingHelper(this)
  54. }
  55. } else {
  56. if (!grouping || grouping instanceof _uiData_gridGrouping.GroupingHelper) {
  57. this._grouping = new _uiData_gridGrouping2.GroupingHelper(this)
  58. }
  59. }
  60. },
  61. totalItemsCount: function() {
  62. var that = this;
  63. var totalCount = that.callBase();
  64. return totalCount > 0 && that._dataSource.group() && that._dataSource.requireTotalCount() ? totalCount + that._grouping.totalCountCorrection() : totalCount
  65. },
  66. itemsCount: function() {
  67. return this._dataSource.group() ? this._grouping.itemsCount() || 0 : this.callBase.apply(this, arguments)
  68. },
  69. allowCollapseAll: function() {
  70. return this._grouping.allowCollapseAll()
  71. },
  72. isGroupItemCountable: function(item) {
  73. return this._grouping.isGroupItemCountable(item)
  74. },
  75. isRowExpanded: function(key) {
  76. var groupInfo = this._grouping.findGroupInfo(key);
  77. return groupInfo ? groupInfo.isExpanded : !this._grouping.allowCollapseAll()
  78. },
  79. collapseAll: function(groupIndex) {
  80. return this._collapseExpandAll(groupIndex, false)
  81. },
  82. expandAll: function(groupIndex) {
  83. return this._collapseExpandAll(groupIndex, true)
  84. },
  85. _collapseExpandAll: function(groupIndex, isExpand) {
  86. var that = this;
  87. var dataSource = that._dataSource;
  88. var group = dataSource.group();
  89. var groups = _uiData_grid2.default.normalizeSortingInfo(group || []);
  90. if (groups.length) {
  91. for (var i = 0; i < groups.length; i++) {
  92. if (void 0 === groupIndex || groupIndex === i) {
  93. groups[i].isExpanded = isExpand
  94. } else {
  95. if (group && group[i]) {
  96. groups[i].isExpanded = group[i].isExpanded
  97. }
  98. }
  99. }
  100. dataSource.group(groups);
  101. that._grouping.foreachGroups(function(groupInfo, parents) {
  102. if (void 0 === groupIndex || groupIndex === parents.length - 1) {
  103. groupInfo.isExpanded = isExpand
  104. }
  105. }, false, true);
  106. that.resetPagesCache()
  107. }
  108. return true
  109. },
  110. refresh: function() {
  111. this.callBase.apply(this, arguments);
  112. return this._grouping.refresh.apply(this._grouping, arguments)
  113. },
  114. changeRowExpand: function(path) {
  115. var that = this;
  116. var dataSource = that._dataSource;
  117. if (dataSource.group()) {
  118. dataSource.beginLoading();
  119. if (that._lastLoadOptions) {
  120. that._lastLoadOptions.groupExpand = true
  121. }
  122. return that._changeRowExpandCore(path).always(function() {
  123. dataSource.endLoading()
  124. })
  125. }
  126. },
  127. _changeRowExpandCore: function(path) {
  128. return this._grouping.changeRowExpand(path)
  129. },
  130. _hasGroupLevelsExpandState: function(group, isExpanded) {
  131. if (group && Array.isArray(group)) {
  132. for (var i = 0; i < group.length; i++) {
  133. if (group[i].isExpanded === isExpanded) {
  134. return true
  135. }
  136. }
  137. }
  138. },
  139. _customizeRemoteOperations: function(options, isReload, operationTypes) {
  140. var remoteOperations = options.remoteOperations;
  141. if (options.storeLoadOptions.group) {
  142. if (remoteOperations.grouping && !options.isCustomLoading) {
  143. if (!remoteOperations.groupPaging || this._hasGroupLevelsExpandState(options.storeLoadOptions.group, true)) {
  144. remoteOperations.paging = false
  145. }
  146. }
  147. if (!remoteOperations.grouping && (!remoteOperations.sorting || !remoteOperations.filtering || options.isCustomLoading || this._hasGroupLevelsExpandState(options.storeLoadOptions.group, false))) {
  148. remoteOperations.paging = false
  149. }
  150. } else {
  151. if (!options.isCustomLoading && remoteOperations.paging && operationTypes.grouping) {
  152. this.resetCache()
  153. }
  154. }
  155. this.callBase.apply(this, arguments)
  156. },
  157. _handleDataLoading: function(options) {
  158. this.callBase(options);
  159. this._initGroupingHelper(options);
  160. return this._grouping.handleDataLoading(options)
  161. },
  162. _handleDataLoaded: function(options) {
  163. return this._grouping.handleDataLoaded(options, this.callBase.bind(this))
  164. },
  165. _handleDataLoadedCore: function(options) {
  166. return this._grouping.handleDataLoadedCore(options, this.callBase.bind(this))
  167. }
  168. }
  169. }();
  170. _uiData_grid4.default.extend(GroupingDataSourceAdapterExtender);
  171. var GroupingDataControllerExtender = function() {
  172. return {
  173. init: function() {
  174. var that = this;
  175. that.callBase();
  176. that.createAction("onRowExpanding");
  177. that.createAction("onRowExpanded");
  178. that.createAction("onRowCollapsing");
  179. that.createAction("onRowCollapsed")
  180. },
  181. _beforeProcessItems: function(items) {
  182. var groupColumns = this._columnsController.getGroupColumns();
  183. items = this.callBase(items);
  184. if (items.length && groupColumns.length) {
  185. items = this._processGroupItems(items, groupColumns.length)
  186. }
  187. return items
  188. },
  189. _processItem: function(item, options) {
  190. if ((0, _type.isDefined)(item.groupIndex) && (0, _type.isString)(item.rowType) && 0 === item.rowType.indexOf("group")) {
  191. item = this._processGroupItem(item, options);
  192. options.dataIndex = 0
  193. } else {
  194. item = this.callBase.apply(this, arguments)
  195. }
  196. return item
  197. },
  198. _processGroupItem: function(item) {
  199. return item
  200. },
  201. _processGroupItems: function(items, groupsCount, options) {
  202. var that = this;
  203. var groupedColumns = that._columnsController.getGroupColumns();
  204. var column = groupedColumns[groupedColumns.length - groupsCount];
  205. if (!options) {
  206. var scrollingMode = that.option("scrolling.mode");
  207. options = {
  208. collectContinuationItems: "virtual" !== scrollingMode && "infinite" !== scrollingMode,
  209. resultItems: [],
  210. path: [],
  211. values: []
  212. }
  213. }
  214. var resultItems = options.resultItems;
  215. if (options.data) {
  216. if (options.collectContinuationItems || !options.data.isContinuation) {
  217. resultItems.push({
  218. rowType: "group",
  219. data: options.data,
  220. groupIndex: options.path.length - 1,
  221. isExpanded: !!options.data.items,
  222. key: options.path.slice(0),
  223. values: options.values.slice(0)
  224. })
  225. }
  226. }
  227. if (items) {
  228. if (0 === groupsCount) {
  229. resultItems.push.apply(resultItems, items)
  230. } else {
  231. for (var i = 0; i < items.length; i++) {
  232. var item = items[i];
  233. if (item && "items" in item) {
  234. options.data = item;
  235. options.path.push(item.key);
  236. options.values.push(column && column.deserializeValue && !column.calculateDisplayValue ? column.deserializeValue(item.key) : item.key);
  237. that._processGroupItems(item.items, groupsCount - 1, options);
  238. options.data = void 0;
  239. options.path.pop();
  240. options.values.pop()
  241. } else {
  242. resultItems.push(item)
  243. }
  244. }
  245. }
  246. }
  247. return resultItems
  248. },
  249. publicMethods: function() {
  250. return this.callBase().concat(["collapseAll", "expandAll", "isRowExpanded", "expandRow", "collapseRow"])
  251. },
  252. collapseAll: function(groupIndex) {
  253. var dataSource = this._dataSource;
  254. if (dataSource && dataSource.collapseAll(groupIndex)) {
  255. dataSource.pageIndex(0);
  256. dataSource.reload()
  257. }
  258. },
  259. expandAll: function(groupIndex) {
  260. var dataSource = this._dataSource;
  261. if (dataSource && dataSource.expandAll(groupIndex)) {
  262. dataSource.pageIndex(0);
  263. dataSource.reload()
  264. }
  265. },
  266. changeRowExpand: function(key) {
  267. var that = this;
  268. var expanded = that.isRowExpanded(key);
  269. var args = {
  270. key: key,
  271. expanded: expanded
  272. };
  273. that.executeAction(expanded ? "onRowCollapsing" : "onRowExpanding", args);
  274. if (!args.cancel) {
  275. return (0, _deferred.when)(that._changeRowExpandCore(key)).done(function() {
  276. args.expanded = !expanded;
  277. that.executeAction(expanded ? "onRowCollapsed" : "onRowExpanded", args)
  278. })
  279. }
  280. return (new _deferred.Deferred).resolve()
  281. },
  282. _changeRowExpandCore: function(key) {
  283. var that = this;
  284. var dataSource = this._dataSource;
  285. var d = new _deferred.Deferred;
  286. if (!dataSource) {
  287. d.resolve()
  288. } else {
  289. (0, _deferred.when)(dataSource.changeRowExpand(key)).done(function() {
  290. that.load().done(d.resolve).fail(d.reject)
  291. }).fail(d.reject)
  292. }
  293. return d
  294. },
  295. isRowExpanded: function(key) {
  296. var dataSource = this._dataSource;
  297. return dataSource && dataSource.isRowExpanded(key)
  298. },
  299. expandRow: function(key) {
  300. if (!this.isRowExpanded(key)) {
  301. return this.changeRowExpand(key)
  302. }
  303. return (new _deferred.Deferred).resolve()
  304. },
  305. collapseRow: function(key) {
  306. if (this.isRowExpanded(key)) {
  307. return this.changeRowExpand(key)
  308. }
  309. return (new _deferred.Deferred).resolve()
  310. },
  311. optionChanged: function(args) {
  312. if ("grouping" === args.name) {
  313. args.name = "dataSource"
  314. }
  315. this.callBase(args)
  316. }
  317. }
  318. }();
  319. var onGroupingMenuItemClick = function(column, params) {
  320. var columnsController = this._columnsController;
  321. switch (params.itemData.value) {
  322. case "group":
  323. var groups = columnsController._dataSource.group() || [];
  324. columnsController.columnOption(column.dataField, "groupIndex", groups.length);
  325. break;
  326. case "ungroup":
  327. columnsController.columnOption(column.dataField, "groupIndex", -1);
  328. break;
  329. case "ungroupAll":
  330. this.component.clearGrouping()
  331. }
  332. };
  333. var GroupingHeaderPanelExtender = function() {
  334. return {
  335. _getToolbarItems: function() {
  336. var items = this.callBase();
  337. return this._appendGroupingItem(items)
  338. },
  339. _appendGroupingItem: function(items) {
  340. var that = this;
  341. var isRendered = false;
  342. var groupPanelRenderedCallback = function(e) {
  343. var $groupPanel = (0, _renderer2.default)(e.itemElement).find("." + DATAGRID_GROUP_PANEL_CLASS);
  344. that._updateGroupPanelContent($groupPanel);
  345. (0, _uiGrid_core.registerKeyboardAction)("groupPanel", that, $groupPanel, void 0, that._handleActionKeyDown.bind(that));
  346. isRendered && that.renderCompleted.fire();
  347. isRendered = true
  348. };
  349. if (that._isGroupPanelVisible()) {
  350. var toolbarItem = {
  351. html: "<div class='" + DATAGRID_GROUP_PANEL_CLASS + "'></div>",
  352. name: "groupPanel",
  353. onItemRendered: groupPanelRenderedCallback,
  354. location: "before",
  355. locateInMenu: "never",
  356. sortIndex: 1
  357. };
  358. items.push(toolbarItem)
  359. }
  360. return items
  361. },
  362. _handleActionKeyDown: function(args) {
  363. var event = args.event;
  364. var $target = (0, _renderer2.default)(event.target);
  365. var groupColumnIndex = $target.closest(".".concat(DATAGRID_GROUP_PANEL_ITEM_CLASS)).index();
  366. var column = this._columnsController.getGroupColumns()[groupColumnIndex];
  367. var columnIndex = column && column.index;
  368. if ($target.is(HEADER_FILTER_CLASS_SELECTOR)) {
  369. this.getController("headerFilter").showHeaderFilterMenu(columnIndex, true)
  370. } else {
  371. this._processGroupItemAction(columnIndex)
  372. }
  373. event.preventDefault()
  374. },
  375. _isGroupPanelVisible: function() {
  376. var groupPanelOptions = this.option("groupPanel");
  377. var isVisible;
  378. if (groupPanelOptions) {
  379. isVisible = groupPanelOptions.visible;
  380. if ("auto" === isVisible) {
  381. isVisible = "desktop" === _devices2.default.current().deviceType ? true : false
  382. }
  383. }
  384. return isVisible
  385. },
  386. _renderGroupPanelItems: function($groupPanel, groupColumns) {
  387. var that = this;
  388. $groupPanel.empty();
  389. (0, _iterator.each)(groupColumns, function(index, groupColumn) {
  390. that._createGroupPanelItem($groupPanel, groupColumn)
  391. });
  392. (0, _accessibility.restoreFocus)(this)
  393. },
  394. _createGroupPanelItem: function($rootElement, groupColumn) {
  395. var $groupPanelItem = (0, _renderer2.default)("<div>").addClass(groupColumn.cssClass).addClass(DATAGRID_GROUP_PANEL_ITEM_CLASS).data("columnData", groupColumn).appendTo($rootElement).text(groupColumn.caption);
  396. (0, _accessibility.setTabIndex)(this, $groupPanelItem);
  397. return $groupPanelItem
  398. },
  399. _columnOptionChanged: function(e) {
  400. if (!this._requireReady && !_uiData_grid2.default.checkChanges(e.optionNames, ["width", "visibleWidth"])) {
  401. var $toolbarElement = this.element();
  402. var $groupPanel = $toolbarElement && $toolbarElement.find("." + DATAGRID_GROUP_PANEL_CLASS);
  403. if ($groupPanel && $groupPanel.length) {
  404. this._updateGroupPanelContent($groupPanel);
  405. this.renderCompleted.fire()
  406. }
  407. }
  408. this.callBase()
  409. },
  410. _updateGroupPanelContent: function($groupPanel) {
  411. var that = this;
  412. var groupColumns = that.getController("columns").getGroupColumns();
  413. var groupPanelOptions = that.option("groupPanel");
  414. that._renderGroupPanelItems($groupPanel, groupColumns);
  415. if (groupPanelOptions.allowColumnDragging && !groupColumns.length) {
  416. (0, _renderer2.default)("<div>").addClass(DATAGRID_GROUP_PANEL_MESSAGE_CLASS).text(groupPanelOptions.emptyPanelText).appendTo($groupPanel);
  417. $groupPanel.closest("." + DATAGRID_GROUP_PANEL_LABEL_CLASS).css("maxWidth", "none");
  418. that.updateToolbarDimensions()
  419. }
  420. },
  421. allowDragging: function(column) {
  422. var groupPanelOptions = this.option("groupPanel");
  423. return this._isGroupPanelVisible() && groupPanelOptions.allowColumnDragging && column && column.allowGrouping
  424. },
  425. getColumnElements: function() {
  426. var $element = this.element();
  427. return $element && $element.find("." + DATAGRID_GROUP_PANEL_ITEM_CLASS)
  428. },
  429. getColumns: function() {
  430. return this.getController("columns").getGroupColumns()
  431. },
  432. getBoundingRect: function() {
  433. var that = this;
  434. var $element = that.element();
  435. if ($element && $element.find("." + DATAGRID_GROUP_PANEL_CLASS).length) {
  436. var offset = $element.offset();
  437. return {
  438. top: offset.top,
  439. bottom: offset.top + $element.height()
  440. }
  441. }
  442. return null
  443. },
  444. getName: function() {
  445. return "group"
  446. },
  447. getContextMenuItems: function(options) {
  448. var that = this;
  449. var contextMenuEnabled = that.option("grouping.contextMenuEnabled");
  450. var $groupedColumnElement = (0, _renderer2.default)(options.targetElement).closest("." + DATAGRID_GROUP_PANEL_ITEM_CLASS);
  451. var items;
  452. if ($groupedColumnElement.length) {
  453. options.column = $groupedColumnElement.data("columnData")
  454. }
  455. if (contextMenuEnabled && options.column) {
  456. var column = options.column;
  457. var isGroupingAllowed = (0, _type.isDefined)(column.allowGrouping) ? column.allowGrouping : true;
  458. if (isGroupingAllowed) {
  459. var isColumnGrouped = (0, _type.isDefined)(column.groupIndex) && column.groupIndex > -1;
  460. var groupingTexts = that.option("grouping.texts");
  461. var onItemClick = onGroupingMenuItemClick.bind(that, column);
  462. items = [{
  463. text: groupingTexts.ungroup,
  464. value: "ungroup",
  465. disabled: !isColumnGrouped,
  466. onItemClick: onItemClick
  467. }, {
  468. text: groupingTexts.ungroupAll,
  469. value: "ungroupAll",
  470. onItemClick: onItemClick
  471. }]
  472. }
  473. }
  474. return items
  475. },
  476. isVisible: function() {
  477. return this.callBase() || this._isGroupPanelVisible()
  478. },
  479. optionChanged: function(args) {
  480. if ("groupPanel" === args.name) {
  481. this._invalidate();
  482. args.handled = true
  483. } else {
  484. this.callBase(args)
  485. }
  486. }
  487. }
  488. }();
  489. exports.GroupingHeaderPanelExtender = GroupingHeaderPanelExtender;
  490. var GroupingRowsViewExtender = function() {
  491. return {
  492. getContextMenuItems: function(options) {
  493. var that = this;
  494. var contextMenuEnabled = that.option("grouping.contextMenuEnabled");
  495. var items;
  496. if (contextMenuEnabled && options.row && "group" === options.row.rowType) {
  497. var columnsController = that._columnsController;
  498. var column = columnsController.columnOption("groupIndex:" + options.row.groupIndex);
  499. if (column && column.allowGrouping) {
  500. var groupingTexts = that.option("grouping.texts");
  501. var onItemClick = onGroupingMenuItemClick.bind(that, column);
  502. items = [];
  503. items.push({
  504. text: groupingTexts.ungroup,
  505. value: "ungroup",
  506. onItemClick: onItemClick
  507. }, {
  508. text: groupingTexts.ungroupAll,
  509. value: "ungroupAll",
  510. onItemClick: onItemClick
  511. })
  512. }
  513. }
  514. return items
  515. },
  516. _rowClick: function(e) {
  517. var that = this;
  518. var expandMode = that.option("grouping.expandMode");
  519. var scrollingMode = that.option("scrolling.mode");
  520. var isGroupRowStateChanged = "infinite" !== scrollingMode && "rowClick" === expandMode && (0, _renderer2.default)(e.event.target).closest("." + DATAGRID_GROUP_ROW_CLASS).length;
  521. var isExpandButtonClicked = (0, _renderer2.default)(e.event.target).closest("." + DATAGRID_EXPAND_CLASS).length;
  522. if (isGroupRowStateChanged || isExpandButtonClicked) {
  523. that._changeGroupRowState(e)
  524. }
  525. that.callBase(e)
  526. },
  527. _changeGroupRowState: function(e) {
  528. var dataController = this.getController("data");
  529. var row = dataController.items()[e.rowIndex];
  530. var allowCollapsing = this._columnsController.columnOption("groupIndex:" + row.groupIndex, "allowCollapsing");
  531. if ("data" === row.rowType || "group" === row.rowType && false !== allowCollapsing) {
  532. dataController.changeRowExpand(row.key);
  533. e.event.preventDefault();
  534. e.handled = true
  535. }
  536. }
  537. }
  538. }();
  539. var columnHeadersViewExtender = function() {
  540. return {
  541. getContextMenuItems: function(options) {
  542. var that = this;
  543. var contextMenuEnabled = that.option("grouping.contextMenuEnabled");
  544. var items = that.callBase(options);
  545. if (contextMenuEnabled && options.row && ("header" === options.row.rowType || "detailAdaptive" === options.row.rowType)) {
  546. var column = options.column;
  547. if (!column.command && (!(0, _type.isDefined)(column.allowGrouping) || column.allowGrouping)) {
  548. var groupingTexts = that.option("grouping.texts");
  549. var isColumnGrouped = (0, _type.isDefined)(column.groupIndex) && column.groupIndex > -1;
  550. var onItemClick = onGroupingMenuItemClick.bind(that, column);
  551. items = items || [];
  552. items.push({
  553. text: groupingTexts.groupByThisColumn,
  554. value: "group",
  555. beginGroup: true,
  556. disabled: isColumnGrouped,
  557. onItemClick: onItemClick
  558. });
  559. if (column.showWhenGrouped) {
  560. items.push({
  561. text: groupingTexts.ungroup,
  562. value: "ungroup",
  563. disabled: !isColumnGrouped,
  564. onItemClick: onItemClick
  565. })
  566. }
  567. items.push({
  568. text: groupingTexts.ungroupAll,
  569. value: "ungroupAll",
  570. onItemClick: onItemClick
  571. })
  572. }
  573. }
  574. return items
  575. }
  576. }
  577. }();
  578. _uiData_grid2.default.registerModule("grouping", {
  579. defaultOptions: function() {
  580. return {
  581. grouping: {
  582. autoExpandAll: true,
  583. allowCollapsing: true,
  584. contextMenuEnabled: false,
  585. expandMode: "buttonClick",
  586. texts: {
  587. groupContinuesMessage: _message2.default.format("dxDataGrid-groupContinuesMessage"),
  588. groupContinuedMessage: _message2.default.format("dxDataGrid-groupContinuedMessage"),
  589. groupByThisColumn: _message2.default.format("dxDataGrid-groupHeaderText"),
  590. ungroup: _message2.default.format("dxDataGrid-ungroupHeaderText"),
  591. ungroupAll: _message2.default.format("dxDataGrid-ungroupAllText")
  592. }
  593. },
  594. groupPanel: {
  595. visible: false,
  596. emptyPanelText: _message2.default.format("dxDataGrid-groupPanelEmptyText"),
  597. allowColumnDragging: true
  598. }
  599. }
  600. },
  601. extenders: {
  602. controllers: {
  603. data: GroupingDataControllerExtender,
  604. columns: {
  605. _getExpandColumnOptions: function() {
  606. var options = this.callBase.apply(this, arguments);
  607. options.cellTemplate = _uiData_grid2.default.getExpandCellTemplate();
  608. return options
  609. }
  610. }
  611. },
  612. views: {
  613. headerPanel: GroupingHeaderPanelExtender,
  614. rowsView: GroupingRowsViewExtender,
  615. columnHeadersView: columnHeadersViewExtender
  616. }
  617. }
  618. });