ui.data_grid.focus.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /**
  2. * DevExtreme (ui/data_grid/ui.data_grid.focus.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 _uiData_grid = require("./ui.data_grid.core");
  11. var _uiData_grid2 = _interopRequireDefault(_uiData_grid);
  12. var _uiGrid_core = require("../grid_core/ui.grid_core.focus");
  13. var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
  14. var _deferred = require("../../core/utils/deferred");
  15. var _type = require("../../core/utils/type");
  16. var _common = require("../../core/utils/common");
  17. var _uiData_grid3 = require("./ui.data_grid.utils");
  18. var _data = require("../../core/utils/data");
  19. var _extend = require("../../core/utils/extend");
  20. function _interopRequireDefault(obj) {
  21. return obj && obj.__esModule ? obj : {
  22. "default": obj
  23. }
  24. }
  25. var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
  26. _uiData_grid2.default.registerModule("focus", (0, _extend.extend)(true, {}, _uiGrid_core2.default, {
  27. extenders: {
  28. controllers: {
  29. data: {
  30. changeRowExpand: function(path) {
  31. if (this.option("focusedRowEnabled") && Array.isArray(path) && this.isRowExpanded(path)) {
  32. if (this._isFocusedRowInsideGroup(path)) {
  33. this.option("focusedRowKey", path)
  34. }
  35. }
  36. return this.callBase.apply(this, arguments)
  37. },
  38. _isFocusedRowInsideGroup: function(path) {
  39. var columnsController = this.getController("columns");
  40. var focusedRowKey = this.option("focusedRowKey");
  41. var rowIndex = this.getRowIndexByKey(focusedRowKey);
  42. var focusedRow = rowIndex >= 0 && this.getVisibleRows()[rowIndex];
  43. var groups = columnsController.getGroupDataSourceParameters(true);
  44. if (focusedRow) {
  45. for (var i = 0; i < path.length; ++i) {
  46. var getter = (0, _data.compileGetter)(groups[i] && groups[i].selector);
  47. if (getter(focusedRow.data) !== path[i]) {
  48. return false
  49. }
  50. }
  51. }
  52. return true
  53. },
  54. _getGroupPath: function(group) {
  55. var groupPath = [group.key];
  56. var items = group.items;
  57. while (items && items[0]) {
  58. var item = items[0];
  59. if (void 0 !== item.key) {
  60. groupPath.push(item.key)
  61. }
  62. items = item.items
  63. }
  64. return groupPath
  65. },
  66. _expandGroupByPath: function(that, groupPath, level) {
  67. var d = new _deferred.Deferred;
  68. level++;
  69. that.expandRow(groupPath.slice(0, level)).done(function() {
  70. if (level === groupPath.length) {
  71. d.resolve()
  72. } else {
  73. that._expandGroupByPath(that, groupPath, level).done(d.resolve).fail(d.reject)
  74. }
  75. }).fail(d.reject);
  76. return d.promise()
  77. },
  78. _calculateGlobalRowIndexByGroupedData: function(key) {
  79. var that = this;
  80. var dataSource = that._dataSource;
  81. var filter = that._generateFilterByKey(key);
  82. var deferred = new _deferred.Deferred;
  83. var isGroupKey = Array.isArray(key);
  84. var group = dataSource.group();
  85. if (isGroupKey) {
  86. return deferred.resolve(-1).promise()
  87. }
  88. if (!dataSource._grouping._updatePagingOptions) {
  89. that._calculateGlobalRowIndexByFlatData(key, null, true).done(deferred.resolve).fail(deferred.reject);
  90. return deferred
  91. }
  92. dataSource.load({
  93. filter: that._concatWithCombinedFilter(filter),
  94. group: group
  95. }).done(function(data) {
  96. if (!data || 0 === data.length || !(0, _type.isDefined)(data[0].key) || data[0].key === -1) {
  97. return deferred.resolve(-1).promise()
  98. }
  99. var groupPath = that._getGroupPath(data[0]);
  100. that._expandGroupByPath(that, groupPath, 0).done(function() {
  101. that._calculateExpandedRowGlobalIndex(deferred, key, groupPath, group)
  102. }).fail(deferred.reject)
  103. }).fail(deferred.reject);
  104. return deferred.promise()
  105. },
  106. _calculateExpandedRowGlobalIndex: function(deferred, key, groupPath, group) {
  107. var groupFilter = (0, _uiData_grid3.createGroupFilter)(groupPath, {
  108. group: group
  109. });
  110. var dataSource = this._dataSource;
  111. var scrollingMode = this.option("scrolling.mode");
  112. var isVirtualScrolling = "virtual" === scrollingMode || "infinite" === scrollingMode;
  113. var pageSize = dataSource.pageSize();
  114. var groupOffset;
  115. dataSource._grouping._updatePagingOptions({
  116. skip: 0,
  117. take: MAX_SAFE_INTEGER
  118. }, function(groupInfo, totalOffset) {
  119. if ((0, _common.equalByValue)(groupInfo.path, groupPath)) {
  120. groupOffset = totalOffset
  121. }
  122. });
  123. this._calculateGlobalRowIndexByFlatData(key, groupFilter).done(function(dataOffset) {
  124. var count;
  125. var groupContinuationCount;
  126. if (dataOffset < 0) {
  127. deferred.resolve(-1);
  128. return
  129. }
  130. var currentPageOffset = groupOffset % pageSize || pageSize;
  131. count = currentPageOffset + dataOffset - groupPath.length;
  132. if (isVirtualScrolling) {
  133. groupContinuationCount = 0
  134. } else {
  135. groupContinuationCount = Math.floor(count / (pageSize - groupPath.length)) * groupPath.length
  136. }
  137. count = groupOffset + dataOffset + groupContinuationCount;
  138. deferred.resolve(count)
  139. }).fail(deferred.reject)
  140. }
  141. }
  142. }
  143. }
  144. }));