ui.pivot_grid.data_controller.js 50 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082
  1. /**
  2. * DevExtreme (ui/pivot_grid/ui.pivot_grid.data_controller.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 _callbacks = require("../../core/utils/callbacks");
  11. var _callbacks2 = _interopRequireDefault(_callbacks);
  12. var _deferred = require("../../core/utils/deferred");
  13. var _extend2 = require("../../core/utils/extend");
  14. var _array = require("../../core/utils/array");
  15. var _iterator = require("../../core/utils/iterator");
  16. var _iterator2 = _interopRequireDefault(_iterator);
  17. var _class = require("../../core/class");
  18. var _class2 = _interopRequireDefault(_class);
  19. var _string = require("../../core/utils/string");
  20. var _string2 = _interopRequireDefault(_string);
  21. var _common = require("../../core/utils/common");
  22. var _common2 = _interopRequireDefault(_common);
  23. var _type = require("../../core/utils/type");
  24. var _uiGrid_core = require("../grid_core/ui.grid_core.virtual_scrolling_core");
  25. var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
  26. var _uiGrid_core3 = require("../grid_core/ui.grid_core.virtual_columns_core");
  27. var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
  28. var _uiGrid_core5 = require("../grid_core/ui.grid_core.state_storing_core");
  29. var _uiGrid_core6 = _interopRequireDefault(_uiGrid_core5);
  30. var _data_source = require("./data_source");
  31. var _data_source2 = _interopRequireDefault(_data_source);
  32. var _uiPivot_grid = require("./ui.pivot_grid.utils");
  33. var _uiPivot_grid2 = _interopRequireDefault(_uiPivot_grid);
  34. function _interopRequireDefault(obj) {
  35. return obj && obj.__esModule ? obj : {
  36. "default": obj
  37. }
  38. }
  39. function _defineProperty(obj, key, value) {
  40. if (key in obj) {
  41. Object.defineProperty(obj, key, {
  42. value: value,
  43. enumerable: true,
  44. configurable: true,
  45. writable: true
  46. })
  47. } else {
  48. obj[key] = value
  49. }
  50. return obj
  51. }
  52. var math = Math;
  53. var GRAND_TOTAL_TYPE = "GT";
  54. var TOTAL_TYPE = "T";
  55. var DATA_TYPE = "D";
  56. var NOT_AVAILABLE = "#N/A";
  57. var CHANGING_DURATION_IF_PAGINATE = 300;
  58. var proxyMethod = function(instance, methodName, defaultResult) {
  59. if (!instance[methodName]) {
  60. instance[methodName] = function() {
  61. var dataSource = this._dataSource;
  62. return dataSource ? dataSource[methodName].apply(dataSource, arguments) : defaultResult
  63. }
  64. }
  65. };
  66. exports.DataController = _class2.default.inherit(function() {
  67. function getHeaderItemText(item, description, options) {
  68. var text = item.text;
  69. if ((0, _type.isDefined)(item.displayText)) {
  70. text = item.displayText
  71. } else {
  72. if ((0, _type.isDefined)(item.caption)) {
  73. text = item.caption
  74. } else {
  75. if (item.type === GRAND_TOTAL_TYPE) {
  76. text = options.texts.grandTotal
  77. }
  78. }
  79. }
  80. if (item.isAdditionalTotal) {
  81. text = _string2.default.format(options.texts.total || "", text)
  82. }
  83. return text
  84. }
  85. function formatCellValue(value, dataField, errorText) {
  86. return value === NOT_AVAILABLE ? errorText : (0, _uiPivot_grid.formatValue)(value, dataField)
  87. }
  88. var createHeaderInfo = function() {
  89. var getHeaderItemsDepth = function(headerItems) {
  90. var depth = 0;
  91. (0, _uiPivot_grid.foreachTree)(headerItems, function(items) {
  92. depth = math.max(depth, items.length)
  93. });
  94. return depth
  95. };
  96. var createInfoItem = function(headerItem, breadth, isHorizontal, isTree) {
  97. var infoItem = {
  98. type: headerItem.type,
  99. text: headerItem.text
  100. };
  101. if (headerItem.path) {
  102. infoItem.path = headerItem.path
  103. }
  104. if (headerItem.width) {
  105. infoItem.width = headerItem.width
  106. }
  107. if ((0, _type.isDefined)(headerItem.wordWrapEnabled)) {
  108. infoItem.wordWrapEnabled = headerItem.wordWrapEnabled
  109. }
  110. if (headerItem.isLast) {
  111. infoItem.isLast = true
  112. }
  113. if (headerItem.sorted) {
  114. infoItem.sorted = true
  115. }
  116. if (headerItem.isMetric) {
  117. infoItem.dataIndex = headerItem.dataIndex
  118. }
  119. if ((0, _type.isDefined)(headerItem.expanded)) {
  120. infoItem.expanded = headerItem.expanded
  121. }
  122. if (breadth > 1) {
  123. infoItem[isHorizontal ? "colspan" : "rowspan"] = breadth
  124. }
  125. if (headerItem.depthSize && headerItem.depthSize > 1) {
  126. infoItem[isHorizontal ? "rowspan" : "colspan"] = headerItem.depthSize
  127. }
  128. if (headerItem.index >= 0) {
  129. infoItem.dataSourceIndex = headerItem.index
  130. }
  131. if (isTree && headerItem.children && headerItem.children.length && !headerItem.children[0].isMetric) {
  132. infoItem.width = null;
  133. infoItem.isWhiteSpace = true
  134. }
  135. return infoItem
  136. };
  137. var addInfoItem = function(info, options) {
  138. var breadth = options.lastIndex - options.index || 1;
  139. var addInfoItemCore = function(info, infoItem, itemIndex, depthIndex, isHorizontal) {
  140. var index = isHorizontal ? depthIndex : itemIndex;
  141. while (!info[index]) {
  142. info.push([])
  143. }
  144. if (isHorizontal) {
  145. info[index].push(infoItem)
  146. } else {
  147. info[index].unshift(infoItem)
  148. }
  149. };
  150. var itemInfo = createInfoItem(options.headerItem, breadth, options.isHorizontal, options.isTree);
  151. addInfoItemCore(info, itemInfo, options.index, options.depth, options.isHorizontal);
  152. if (!options.headerItem.children || 0 === options.headerItem.children.length) {
  153. return options.lastIndex + 1
  154. }
  155. return options.lastIndex
  156. };
  157. var isItemSorted = function(items, sortBySummaryPath) {
  158. var path;
  159. var item = items[0];
  160. var stringValuesUsed = (0, _type.isString)(sortBySummaryPath[0]);
  161. var headerItem = item.dataIndex >= 0 ? items[1] : item;
  162. if (stringValuesUsed && sortBySummaryPath[0].indexOf("&[") !== -1 && headerItem.key || !headerItem.key) {
  163. path = (0, _uiPivot_grid.createPath)(items)
  164. } else {
  165. path = _iterator2.default.map(items, function(item) {
  166. return item.dataIndex >= 0 ? item.value : item.text
  167. }).reverse()
  168. }
  169. if (item.type === GRAND_TOTAL_TYPE) {
  170. path = path.slice(1)
  171. }
  172. return path.join("/") === sortBySummaryPath.join("/")
  173. };
  174. var getViewHeaderItems = function(headerItems, headerDescriptions, cellDescriptions, depthSize, options) {
  175. var cellDescriptionsCount = cellDescriptions.length;
  176. var viewHeaderItems = createViewHeaderItems(headerItems, headerDescriptions);
  177. var dataFields = options.dataFields;
  178. var d = new _deferred.Deferred;
  179. (0, _deferred.when)(viewHeaderItems).done(function(viewHeaderItems) {
  180. options.notifyProgress(.5);
  181. if (options.showGrandTotals) {
  182. viewHeaderItems[!options.showTotalsPrior ? "push" : "unshift"]({
  183. type: GRAND_TOTAL_TYPE,
  184. isEmpty: options.isEmptyGrandTotal
  185. })
  186. }
  187. var hideTotals = false === options.showTotals || dataFields.length > 0 && dataFields.length === options.hiddenTotals.length;
  188. var hideData = dataFields.length > 0 && options.hiddenValues.length === dataFields.length;
  189. if (hideData && hideTotals) {
  190. depthSize = 1
  191. }
  192. if (!hideTotals || "tree" === options.layout) {
  193. addAdditionalTotalHeaderItems(viewHeaderItems, headerDescriptions, options.showTotalsPrior, "tree" === options.layout)
  194. }(0, _deferred.when)((0, _uiPivot_grid.foreachTreeAsync)(viewHeaderItems, function(items) {
  195. var item = items[0];
  196. if (!item.children || 0 === item.children.length) {
  197. item.depthSize = depthSize - items.length + 1
  198. }
  199. })).done(function() {
  200. if (cellDescriptionsCount > 1) {
  201. addMetricHeaderItems(viewHeaderItems, cellDescriptions, options)
  202. }!options.showEmpty && removeHiddenItems(viewHeaderItems);
  203. options.notifyProgress(.75);
  204. (0, _deferred.when)((0, _uiPivot_grid.foreachTreeAsync)(viewHeaderItems, function(items) {
  205. var item = items[0];
  206. var isMetric = item.isMetric;
  207. var field = headerDescriptions[items.length - 1] || {};
  208. if (item.type === DATA_TYPE && !isMetric) {
  209. item.width = field.width
  210. }
  211. if (true === hideData && item.type === DATA_TYPE) {
  212. var parentChildren = (items[1] ? items[1].children : viewHeaderItems) || [];
  213. parentChildren.splice((0, _array.inArray)(item, parentChildren), 1);
  214. return
  215. }
  216. if (isMetric) {
  217. item.wordWrapEnabled = cellDescriptions[item.dataIndex].wordWrapEnabled
  218. } else {
  219. item.wordWrapEnabled = field.wordWrapEnabled
  220. }
  221. item.isLast = !item.children || !item.children.length;
  222. if (item.isLast) {
  223. _iterator2.default.each(options.sortBySummaryPaths, function(index, sortBySummaryPath) {
  224. if (!(0, _type.isDefined)(item.dataIndex)) {
  225. sortBySummaryPath = sortBySummaryPath.slice(0);
  226. sortBySummaryPath.pop()
  227. }
  228. if (isItemSorted(items, sortBySummaryPath)) {
  229. item.sorted = true;
  230. return false
  231. }
  232. })
  233. }
  234. item.text = getHeaderItemText(item, field, options)
  235. })).done(function() {
  236. if (!viewHeaderItems.length) {
  237. viewHeaderItems.push({})
  238. }
  239. options.notifyProgress(1);
  240. d.resolve(viewHeaderItems)
  241. })
  242. })
  243. });
  244. return d
  245. };
  246. function createHeaderItem(childrenStack, depth, index) {
  247. var parent = childrenStack[depth] = childrenStack[depth] || [];
  248. var node = parent[index] = {};
  249. if (childrenStack[depth + 1]) {
  250. node.children = childrenStack[depth + 1];
  251. for (var i = depth + 1; i < childrenStack.length; i++) {
  252. childrenStack[i] = void 0
  253. }
  254. childrenStack.length = depth + 1
  255. }
  256. return node
  257. }
  258. function createViewHeaderItems(headerItems, headerDescriptions) {
  259. var headerDescriptionsCount = headerDescriptions && headerDescriptions.length || 0;
  260. var childrenStack = [];
  261. var d = new _deferred.Deferred;
  262. (0, _deferred.when)((0, _uiPivot_grid.foreachTreeAsync)(headerItems, function(items, index) {
  263. var item = items[0];
  264. var path = (0, _uiPivot_grid.createPath)(items);
  265. var headerItem = createHeaderItem(childrenStack, path.length, index);
  266. headerItem.type = DATA_TYPE;
  267. headerItem.value = item.value;
  268. headerItem.path = path;
  269. headerItem.text = item.text;
  270. headerItem.index = item.index;
  271. headerItem.displayText = item.displayText;
  272. headerItem.key = item.key;
  273. headerItem.isEmpty = item.isEmpty;
  274. if (path.length < headerDescriptionsCount && (!item.children || 0 !== item.children.length)) {
  275. headerItem.expanded = !!item.children
  276. }
  277. })).done(function() {
  278. d.resolve(createHeaderItem(childrenStack, 0, 0).children || [])
  279. });
  280. return d
  281. }
  282. var addMetricHeaderItems = function(headerItems, cellDescriptions, options) {
  283. (0, _uiPivot_grid.foreachTree)(headerItems, function(items) {
  284. var item = items[0];
  285. if (!item.children || 0 === item.children.length) {
  286. item.children = [];
  287. for (var i = 0; i < cellDescriptions.length; i++) {
  288. var isGrandTotal = item.type === GRAND_TOTAL_TYPE;
  289. var isTotal = item.type === TOTAL_TYPE;
  290. var isValue = item.type === DATA_TYPE;
  291. var columnIsHidden = false === cellDescriptions[i].visible || isGrandTotal && (0, _array.inArray)(i, options.hiddenGrandTotals) !== -1 || isTotal && (0, _array.inArray)(i, options.hiddenTotals) !== -1 || isValue && (0, _array.inArray)(i, options.hiddenValues) !== -1;
  292. if (columnIsHidden) {
  293. continue
  294. }
  295. item.children.push({
  296. caption: cellDescriptions[i].caption,
  297. path: item.path,
  298. type: item.type,
  299. value: i,
  300. index: item.index,
  301. dataIndex: i,
  302. isMetric: true,
  303. isEmpty: item.isEmpty && item.isEmpty[i]
  304. })
  305. }
  306. }
  307. })
  308. };
  309. var addAdditionalTotalHeaderItems = function(headerItems, headerDescriptions, showTotalsPrior, isTree) {
  310. showTotalsPrior = showTotalsPrior || isTree;
  311. (0, _uiPivot_grid.foreachTree)(headerItems, function(items, index) {
  312. var item = items[0];
  313. var parentChildren = (items[1] ? items[1].children : headerItems) || [];
  314. var dataField = headerDescriptions[items.length - 1];
  315. if (item.type === DATA_TYPE && item.expanded && (false !== dataField.showTotals || isTree)) {
  316. index !== -1 && parentChildren.splice(showTotalsPrior ? index : index + 1, 0, (0, _extend2.extend)({}, item, {
  317. children: null,
  318. type: TOTAL_TYPE,
  319. expanded: showTotalsPrior ? true : null,
  320. isAdditionalTotal: true
  321. }));
  322. if (showTotalsPrior) {
  323. item.expanded = null
  324. }
  325. }
  326. })
  327. };
  328. var removeEmptyParent = function removeEmptyParent(items, index) {
  329. var parent = items[index + 1];
  330. if (!items[index].children.length && parent && parent.children) {
  331. parent.children.splice((0, _array.inArray)(items[index], parent.children), 1);
  332. removeEmptyParent(items, index + 1)
  333. }
  334. };
  335. var removeHiddenItems = function(headerItems) {
  336. (0, _uiPivot_grid.foreachTree)([{
  337. children: headerItems
  338. }], function(items, index) {
  339. var item = items[0];
  340. var parentChildren = (items[1] ? items[1].children : headerItems) || [];
  341. var isEmpty = item.isEmpty;
  342. if (isEmpty && isEmpty.length) {
  343. isEmpty = item.isEmpty.filter(function(isEmpty) {
  344. return isEmpty
  345. }).length === isEmpty.length
  346. }
  347. if (item && !item.children && isEmpty) {
  348. parentChildren.splice(index, 1);
  349. removeEmptyParent(items, 1)
  350. }
  351. })
  352. };
  353. var fillHeaderInfo = function(info, viewHeaderItems, depthSize, isHorizontal, isTree) {
  354. var lastIndex = 0;
  355. var indexesByDepth = [0];
  356. (0, _uiPivot_grid.foreachTree)(viewHeaderItems, function(items) {
  357. var headerItem = items[0];
  358. var depth = headerItem.isMetric ? depthSize : items.length - 1;
  359. while (indexesByDepth.length - 1 < depth) {
  360. indexesByDepth.push(indexesByDepth[indexesByDepth.length - 1])
  361. }
  362. var index = indexesByDepth[depth] || 0;
  363. lastIndex = addInfoItem(info, {
  364. headerItem: headerItem,
  365. index: index,
  366. lastIndex: lastIndex,
  367. depth: depth,
  368. isHorizontal: isHorizontal,
  369. isTree: isTree
  370. });
  371. indexesByDepth.length = depth;
  372. indexesByDepth.push(lastIndex)
  373. })
  374. };
  375. return function(headerItems, headerDescriptions, cellDescriptions, isHorizontal, options) {
  376. var info = [];
  377. var depthSize = getHeaderItemsDepth(headerItems) || 1;
  378. var d = new _deferred.Deferred;
  379. getViewHeaderItems(headerItems, headerDescriptions, cellDescriptions, depthSize, options).done(function(viewHeaderItems) {
  380. fillHeaderInfo(info, viewHeaderItems, depthSize, isHorizontal, "tree" === options.layout);
  381. options.notifyProgress(1);
  382. d.resolve(info)
  383. });
  384. return d
  385. }
  386. }();
  387. function createSortPaths(headerFields, dataFields) {
  388. var sortBySummaryPaths = [];
  389. _iterator2.default.each(headerFields, function(index, headerField) {
  390. var fieldIndex = _uiPivot_grid2.default.findField(dataFields, headerField.sortBySummaryField);
  391. if (fieldIndex >= 0) {
  392. sortBySummaryPaths.push((headerField.sortBySummaryPath || []).concat([fieldIndex]))
  393. }
  394. });
  395. return sortBySummaryPaths
  396. }
  397. function foreachRowInfo(rowsInfo, callback) {
  398. var columnOffset = 0;
  399. var columnOffsetResetIndexes = [];
  400. for (var i = 0; i < rowsInfo.length; i++) {
  401. for (var j = 0; j < rowsInfo[i].length; j++) {
  402. var rowSpanOffset = (rowsInfo[i][j].rowspan || 1) - 1;
  403. var visibleIndex = i + rowSpanOffset;
  404. if (columnOffsetResetIndexes[i]) {
  405. columnOffset -= columnOffsetResetIndexes[i];
  406. columnOffsetResetIndexes[i] = 0
  407. }
  408. if (false === callback(rowsInfo[i][j], visibleIndex, i, j, columnOffset)) {
  409. break
  410. }
  411. columnOffsetResetIndexes[i + (rowsInfo[i][j].rowspan || 1)] = (columnOffsetResetIndexes[i + (rowsInfo[i][j].rowspan || 1)] || 0) + 1;
  412. columnOffset++
  413. }
  414. }
  415. }
  416. function createCellsInfo(rowsInfo, columnsInfo, data, dataFields, dataFieldArea, errorText) {
  417. var info = [];
  418. var dataFieldAreaInRows = "row" === dataFieldArea;
  419. var dataSourceCells = data.values;
  420. dataSourceCells.length && foreachRowInfo(rowsInfo, function(rowInfo, rowIndex) {
  421. var row = info[rowIndex] = [];
  422. var dataRow = dataSourceCells[rowInfo.dataSourceIndex >= 0 ? rowInfo.dataSourceIndex : data.grandTotalRowIndex] || [];
  423. rowInfo.isLast && _uiGrid_core4.default.foreachColumnInfo(columnsInfo, function(columnInfo, columnIndex) {
  424. var dataIndex = (dataFieldAreaInRows ? rowInfo.dataIndex : columnInfo.dataIndex) || 0;
  425. var dataField = dataFields[dataIndex];
  426. if (columnInfo.isLast && dataField) {
  427. var cell = dataRow[columnInfo.dataSourceIndex >= 0 ? columnInfo.dataSourceIndex : data.grandTotalColumnIndex];
  428. if (!Array.isArray(cell)) {
  429. cell = [cell]
  430. }
  431. var cellValue = cell[dataIndex];
  432. row[columnIndex] = {
  433. text: formatCellValue(cellValue, dataField, errorText),
  434. value: cellValue,
  435. format: dataField.format,
  436. dataType: dataField.dataType,
  437. columnType: columnInfo.type,
  438. rowType: rowInfo.type,
  439. rowPath: rowInfo.path || [],
  440. columnPath: columnInfo.path || [],
  441. dataIndex: dataIndex
  442. };
  443. if (dataField.width) {
  444. row[columnIndex].width = dataField.width
  445. }
  446. }
  447. })
  448. });
  449. return info
  450. }
  451. function getHeaderIndexedItems(headerItems, options) {
  452. var visibleIndex = 0;
  453. var indexedItems = [];
  454. (0, _uiPivot_grid.foreachTree)(headerItems, function(items) {
  455. var headerItem = items[0];
  456. var path = (0, _uiPivot_grid.createPath)(items);
  457. if (headerItem.children && false === options.showTotals) {
  458. return
  459. }
  460. var indexedItem = (0, _extend2.extend)(true, {}, headerItem, {
  461. visibleIndex: visibleIndex++,
  462. path: path
  463. });
  464. if ((0, _type.isDefined)(indexedItem.index)) {
  465. indexedItems[indexedItem.index] = indexedItem
  466. } else {
  467. indexedItems.push(indexedItem)
  468. }
  469. });
  470. return indexedItems
  471. }
  472. function createScrollController(dataController, component, dataAdapter) {
  473. if (component && "virtual" === component.option("scrolling.mode")) {
  474. return new _uiGrid_core2.default.VirtualScrollController(component, (0, _extend2.extend)({
  475. hasKnownLastPage: function() {
  476. return true
  477. },
  478. pageCount: function() {
  479. return math.ceil(this.totalItemsCount() / this.pageSize())
  480. },
  481. updateLoading: function() {},
  482. itemsCount: function() {
  483. if (this.pageIndex() < this.pageCount() - 1) {
  484. return this.pageSize()
  485. } else {
  486. return this.totalItemsCount() % this.pageSize()
  487. }
  488. },
  489. items: function() {
  490. return []
  491. },
  492. viewportItems: function() {
  493. return []
  494. },
  495. onChanged: function() {},
  496. isLoading: function() {
  497. return dataController.isLoading()
  498. },
  499. changingDuration: function() {
  500. var dataSource = dataController._dataSource;
  501. if (dataSource.paginate()) {
  502. return CHANGING_DURATION_IF_PAGINATE
  503. }
  504. return dataController._changingDuration || 0
  505. }
  506. }, dataAdapter))
  507. }
  508. }
  509. function getHiddenTotals(dataFields) {
  510. var result = [];
  511. _iterator2.default.each(dataFields, function(index, field) {
  512. if (false === field.showTotals) {
  513. result.push(index)
  514. }
  515. });
  516. return result
  517. }
  518. function getHiddenValues(dataFields) {
  519. var result = [];
  520. dataFields.forEach(function(field, index) {
  521. if (void 0 === field.showValues && false === field.showTotals || false === field.showValues) {
  522. result.push(index)
  523. }
  524. });
  525. return result
  526. }
  527. function getHiddenGrandTotalsTotals(dataFields, columnFields) {
  528. var result = [];
  529. _iterator2.default.each(dataFields, function(index, field) {
  530. if (false === field.showGrandTotals) {
  531. result.push(index)
  532. }
  533. });
  534. if (0 === columnFields.length && result.length === dataFields.length) {
  535. result = []
  536. }
  537. return result
  538. }
  539. var members = {
  540. ctor: function(options) {
  541. var that = this;
  542. var virtualScrollControllerChanged = that._fireChanged.bind(that);
  543. options = that._options = options || {};
  544. that.dataSourceChanged = (0, _callbacks2.default)();
  545. that._dataSource = that._createDataSource(options);
  546. that._rowsScrollController = createScrollController(that, options.component, {
  547. totalItemsCount: function() {
  548. return that.totalRowCount()
  549. },
  550. pageIndex: function(index) {
  551. return that.rowPageIndex(index)
  552. },
  553. pageSize: function() {
  554. return that.rowPageSize()
  555. },
  556. load: function() {
  557. if (that._rowsScrollController.pageIndex() >= this.pageCount()) {
  558. that._rowsScrollController.pageIndex(this.pageCount() - 1)
  559. }
  560. return that._rowsScrollController.handleDataChanged(function() {
  561. if (that._dataSource.paginate()) {
  562. that._dataSource.load()
  563. } else {
  564. virtualScrollControllerChanged.apply(this, arguments)
  565. }
  566. })
  567. }
  568. });
  569. that._columnsScrollController = createScrollController(that, options.component, {
  570. totalItemsCount: function() {
  571. return that.totalColumnCount()
  572. },
  573. pageIndex: function(index) {
  574. return that.columnPageIndex(index)
  575. },
  576. pageSize: function() {
  577. return that.columnPageSize()
  578. },
  579. load: function() {
  580. if (that._columnsScrollController.pageIndex() >= this.pageCount()) {
  581. that._columnsScrollController.pageIndex(this.pageCount() - 1)
  582. }
  583. return that._columnsScrollController.handleDataChanged(function() {
  584. if (that._dataSource.paginate()) {
  585. that._dataSource.load()
  586. } else {
  587. virtualScrollControllerChanged.apply(this, arguments)
  588. }
  589. })
  590. }
  591. });
  592. that._stateStoringController = new _uiGrid_core6.default.StateStoringController(options.component).init();
  593. that._columnsInfo = [];
  594. that._rowsInfo = [];
  595. that._cellsInfo = [];
  596. that.expandValueChanging = (0, _callbacks2.default)();
  597. that.loadingChanged = (0, _callbacks2.default)();
  598. that.progressChanged = (0, _callbacks2.default)();
  599. that.scrollChanged = (0, _callbacks2.default)();
  600. that.load();
  601. that._update();
  602. that.changed = (0, _callbacks2.default)()
  603. },
  604. _fireChanged: function() {
  605. var that = this;
  606. var startChanging = new Date;
  607. that.changed && !that._lockChanged && that.changed.fire();
  608. that._changingDuration = new Date - startChanging
  609. },
  610. _correctSkipsTakes: function(rowIndex, rowSkip, rowSpan, levels, skips, takes) {
  611. var endIndex = rowSpan ? rowIndex + rowSpan - 1 : rowIndex;
  612. skips[levels.length] = skips[levels.length] || 0;
  613. takes[levels.length] = takes[levels.length] || 0;
  614. if (endIndex < rowSkip) {
  615. skips[levels.length]++
  616. } else {
  617. takes[levels.length]++
  618. }
  619. },
  620. _calculatePagingForRowExpandedPaths: function(options, skips, takes, rowExpandedSkips, rowExpandedTakes) {
  621. var rows = this._rowsInfo;
  622. var rowCount = Math.min(options.rowSkip + options.rowTake, rows.length);
  623. var rowExpandedPaths = options.rowExpandedPaths;
  624. var levels = [];
  625. var expandedPathIndexes = {};
  626. var path;
  627. rowExpandedPaths.forEach(function(path, index) {
  628. expandedPathIndexes[path] = index
  629. });
  630. for (var i = 0; i < rowCount; i++) {
  631. takes.length = skips.length = levels.length + 1;
  632. for (var j = 0; j < rows[i].length; j++) {
  633. var cell = rows[i][j];
  634. if ("D" === cell.type) {
  635. this._correctSkipsTakes(i, options.rowSkip, cell.rowspan, levels, skips, takes);
  636. path = cell.path || path;
  637. var expandIndex = path && path.length > 1 ? expandedPathIndexes[path.slice(0, -1)] : -1;
  638. if (expandIndex >= 0) {
  639. rowExpandedSkips[expandIndex] = skips[levels.length] || 0;
  640. rowExpandedTakes[expandIndex] = takes[levels.length] || 0
  641. }
  642. if (cell.rowspan) {
  643. levels.push(cell.rowspan)
  644. }
  645. }
  646. }
  647. levels = levels.map(function(level) {
  648. return level - 1
  649. }).filter(function(level) {
  650. return level > 0
  651. })
  652. }
  653. },
  654. _calculatePagingForColumnExpandedPaths: function(options, skips, takes, expandedSkips, expandedTakes) {
  655. var skipByPath = {};
  656. var takeByPath = {};
  657. _uiGrid_core4.default.foreachColumnInfo(this._columnsInfo, function(columnInfo, columnIndex) {
  658. if ("D" === columnInfo.type && columnInfo.path && void 0 === columnInfo.dataIndex) {
  659. var colspan = columnInfo.colspan || 1;
  660. var path = columnInfo.path.slice(0, -1).toString();
  661. skipByPath[path] = skipByPath[path] || 0;
  662. takeByPath[path] = takeByPath[path] || 0;
  663. if (columnIndex + colspan <= options.columnSkip) {
  664. skipByPath[path]++
  665. } else {
  666. if (columnIndex < options.columnSkip + options.columnTake) {
  667. takeByPath[path]++
  668. }
  669. }
  670. }
  671. });
  672. skips[0] = skipByPath[[]];
  673. takes[0] = takeByPath[[]];
  674. options.columnExpandedPaths.forEach(function(path, index) {
  675. var skip = skipByPath[path];
  676. var take = takeByPath[path];
  677. if (void 0 !== skip) {
  678. expandedSkips[index] = skip
  679. }
  680. if (void 0 !== take) {
  681. expandedTakes[index] = take
  682. }
  683. })
  684. },
  685. _processPagingForExpandedPaths: function(options, area, storeLoadOptions, reload) {
  686. var expandedPaths = options[area + "ExpandedPaths"];
  687. var expandedSkips = expandedPaths.map(function() {
  688. return 0
  689. });
  690. var expandedTakes = expandedPaths.map(function() {
  691. return reload ? options.pageSize : 0
  692. });
  693. var skips = [];
  694. var takes = [];
  695. if (!reload) {
  696. if ("row" === area) {
  697. this._calculatePagingForRowExpandedPaths(options, skips, takes, expandedSkips, expandedTakes)
  698. } else {
  699. this._calculatePagingForColumnExpandedPaths(options, skips, takes, expandedSkips, expandedTakes)
  700. }
  701. }
  702. this._savePagingForExpandedPaths(options, area, storeLoadOptions, skips[0], takes[0], expandedSkips, expandedTakes)
  703. },
  704. _savePagingForExpandedPaths: function(options, area, storeLoadOptions, skip, take, expandedSkips, expandedTakes) {
  705. var expandedPaths = options[area + "ExpandedPaths"];
  706. options[area + "ExpandedPaths"] = [];
  707. options[area + "Skip"] = void 0 !== skip ? skip : options[area + "Skip"];
  708. options[area + "Take"] = void 0 !== take ? take : options[area + "Take"];
  709. for (var i = 0; i < expandedPaths.length; i++) {
  710. if (expandedTakes[i]) {
  711. var _extend;
  712. var isOppositeArea = options.area && options.area !== area;
  713. storeLoadOptions.push((0, _extend2.extend)({
  714. area: area,
  715. headerName: area + "s"
  716. }, options, (_extend = {}, _defineProperty(_extend, area + "Skip", expandedSkips[i]), _defineProperty(_extend, area + "Take", expandedTakes[i]), _defineProperty(_extend, isOppositeArea ? "oppositePath" : "path", expandedPaths[i]), _extend)))
  717. }
  718. }
  719. },
  720. _handleCustomizeStoreLoadOptions: function(storeLoadOptions, reload) {
  721. var _this = this;
  722. var options = storeLoadOptions[0];
  723. var rowsScrollController = this._rowsScrollController;
  724. if (this._dataSource.paginate() && rowsScrollController) {
  725. var rowPageSize = rowsScrollController._dataSource.pageSize();
  726. if ("rows" === options.headerName) {
  727. options.rowSkip = 0;
  728. options.rowTake = rowPageSize;
  729. options.rowExpandedPaths = []
  730. } else {
  731. options.rowSkip = rowsScrollController.beginPageIndex() * rowPageSize;
  732. options.rowTake = (rowsScrollController.endPageIndex() - rowsScrollController.beginPageIndex() + 1) * rowPageSize;
  733. this._processPagingForExpandedPaths(options, "row", storeLoadOptions, reload)
  734. }
  735. }
  736. var columnsScrollController = this._columnsScrollController;
  737. if (this._dataSource.paginate() && columnsScrollController) {
  738. var columnPageSize = columnsScrollController._dataSource.pageSize();
  739. storeLoadOptions.forEach(function(options, index) {
  740. if ("columns" === options.headerName) {
  741. options.columnSkip = 0;
  742. options.columnTake = columnPageSize;
  743. options.columnExpandedPaths = []
  744. } else {
  745. options.columnSkip = columnsScrollController.beginPageIndex() * columnPageSize;
  746. options.columnTake = (columnsScrollController.endPageIndex() - columnsScrollController.beginPageIndex() + 1) * columnPageSize;
  747. _this._processPagingForExpandedPaths(options, "column", storeLoadOptions, reload)
  748. }
  749. })
  750. }
  751. },
  752. load: function() {
  753. var that = this;
  754. var stateStoringController = this._stateStoringController;
  755. if (stateStoringController.isEnabled() && !stateStoringController.isLoaded()) {
  756. stateStoringController.load().always(function(state) {
  757. if (state) {
  758. that._dataSource.state(state)
  759. } else {
  760. that._dataSource.load()
  761. }
  762. })
  763. } else {
  764. that._dataSource.load()
  765. }
  766. },
  767. calculateVirtualContentParams: function(contentParams) {
  768. var that = this;
  769. var rowsScrollController = that._rowsScrollController;
  770. var columnsScrollController = that._columnsScrollController;
  771. if (rowsScrollController && columnsScrollController) {
  772. rowsScrollController.viewportItemSize(contentParams.virtualRowHeight);
  773. rowsScrollController.viewportSize(contentParams.viewportHeight / rowsScrollController.viewportItemSize());
  774. rowsScrollController.setContentSize(contentParams.itemHeights);
  775. columnsScrollController.viewportItemSize(contentParams.virtualColumnWidth);
  776. columnsScrollController.viewportSize(contentParams.viewportWidth / columnsScrollController.viewportItemSize());
  777. columnsScrollController.setContentSize(contentParams.itemWidths);
  778. _common2.default.deferUpdate(function() {
  779. columnsScrollController.loadIfNeed();
  780. rowsScrollController.loadIfNeed()
  781. });
  782. that.scrollChanged.fire({
  783. left: columnsScrollController.getViewportPosition(),
  784. top: rowsScrollController.getViewportPosition()
  785. });
  786. return {
  787. contentTop: rowsScrollController.getContentOffset(),
  788. contentLeft: columnsScrollController.getContentOffset(),
  789. width: columnsScrollController.getVirtualContentSize(),
  790. height: rowsScrollController.getVirtualContentSize()
  791. }
  792. }
  793. },
  794. setViewportPosition: function(left, top) {
  795. this._rowsScrollController.setViewportPosition(top || 0);
  796. this._columnsScrollController.setViewportPosition(left || 0)
  797. },
  798. subscribeToWindowScrollEvents: function($element) {
  799. this._rowsScrollController && this._rowsScrollController.subscribeToWindowScrollEvents($element)
  800. },
  801. updateWindowScrollPosition: function(position) {
  802. this._rowsScrollController && this._rowsScrollController.scrollTo(position)
  803. },
  804. updateViewOptions: function(options) {
  805. (0, _extend2.extend)(this._options, options);
  806. this._update()
  807. },
  808. _handleExpandValueChanging: function(e) {
  809. this.expandValueChanging.fire(e)
  810. },
  811. _handleLoadingChanged: function(isLoading) {
  812. this.loadingChanged.fire(isLoading)
  813. },
  814. _handleProgressChanged: function(progress) {
  815. this.progressChanged.fire(progress)
  816. },
  817. _handleFieldsPrepared: function(e) {
  818. this._options.onFieldsPrepared && this._options.onFieldsPrepared(e)
  819. },
  820. _createDataSource: function(options) {
  821. var that = this;
  822. var dataSourceOptions = options.dataSource;
  823. var dataSource;
  824. that._isSharedDataSource = dataSourceOptions instanceof _data_source2.default;
  825. if (that._isSharedDataSource) {
  826. dataSource = dataSourceOptions
  827. } else {
  828. dataSource = new _data_source2.default(dataSourceOptions)
  829. }
  830. that._expandValueChangingHandler = that._handleExpandValueChanging.bind(that);
  831. that._loadingChangedHandler = that._handleLoadingChanged.bind(that);
  832. that._fieldsPreparedHandler = that._handleFieldsPrepared.bind(that);
  833. that._customizeStoreLoadOptionsHandler = that._handleCustomizeStoreLoadOptions.bind(that);
  834. that._changedHandler = function() {
  835. that._update();
  836. that.dataSourceChanged.fire()
  837. };
  838. that._progressChangedHandler = function(progress) {
  839. that._handleProgressChanged(.8 * progress)
  840. };
  841. dataSource.on("changed", that._changedHandler);
  842. dataSource.on("expandValueChanging", that._expandValueChangingHandler);
  843. dataSource.on("loadingChanged", that._loadingChangedHandler);
  844. dataSource.on("progressChanged", that._progressChangedHandler);
  845. dataSource.on("fieldsPrepared", that._fieldsPreparedHandler);
  846. dataSource.on("customizeStoreLoadOptions", that._customizeStoreLoadOptionsHandler);
  847. return dataSource
  848. },
  849. getDataSource: function() {
  850. return this._dataSource
  851. },
  852. isLoading: function() {
  853. return this._dataSource.isLoading()
  854. },
  855. beginLoading: function() {
  856. this._dataSource.beginLoading()
  857. },
  858. endLoading: function() {
  859. this._dataSource.endLoading()
  860. },
  861. _update: function() {
  862. var that = this;
  863. var dataSource = that._dataSource;
  864. var options = that._options;
  865. var columnFields = dataSource.getAreaFields("column");
  866. var rowFields = dataSource.getAreaFields("row");
  867. var dataFields = dataSource.getAreaFields("data");
  868. var dataFieldsForRows = "row" === options.dataFieldArea ? dataFields : [];
  869. var dataFieldsForColumns = "row" !== options.dataFieldArea ? dataFields : [];
  870. var data = dataSource.getData();
  871. var hiddenTotals = getHiddenTotals(dataFields);
  872. var hiddenValues = getHiddenValues(dataFields);
  873. var hiddenGrandTotals = getHiddenGrandTotalsTotals(dataFields, columnFields);
  874. var grandTotalsAreHiddenForNotAllDataFields = dataFields.length > 0 ? hiddenGrandTotals.length !== dataFields.length : true;
  875. var notifyProgress = function(progress) {
  876. this.progress = progress;
  877. that._handleProgressChanged(.8 + .1 * rowOptions.progress + .1 * columnOptions.progress)
  878. };
  879. var rowOptions = {
  880. isEmptyGrandTotal: data.isEmptyGrandTotalRow,
  881. texts: options.texts || {},
  882. hiddenTotals: hiddenTotals,
  883. hiddenValues: hiddenValues,
  884. hiddenGrandTotals: [],
  885. showTotals: options.showRowTotals,
  886. showGrandTotals: false !== options.showRowGrandTotals && grandTotalsAreHiddenForNotAllDataFields,
  887. sortBySummaryPaths: createSortPaths(columnFields, dataFields),
  888. showTotalsPrior: "rows" === options.showTotalsPrior || "both" === options.showTotalsPrior,
  889. showEmpty: !options.hideEmptySummaryCells,
  890. layout: options.rowHeaderLayout,
  891. fields: rowFields,
  892. dataFields: dataFields,
  893. progress: 0,
  894. notifyProgress: notifyProgress
  895. };
  896. var columnOptions = {
  897. isEmptyGrandTotal: data.isEmptyGrandTotalColumn,
  898. texts: options.texts || {},
  899. hiddenTotals: hiddenTotals,
  900. hiddenValues: hiddenValues,
  901. hiddenGrandTotals: hiddenGrandTotals,
  902. showTotals: options.showColumnTotals,
  903. showTotalsPrior: "columns" === options.showTotalsPrior || "both" === options.showTotalsPrior,
  904. showGrandTotals: false !== options.showColumnGrandTotals && grandTotalsAreHiddenForNotAllDataFields,
  905. sortBySummaryPaths: createSortPaths(rowFields, dataFields),
  906. showEmpty: !options.hideEmptySummaryCells,
  907. fields: columnFields,
  908. dataFields: dataFields,
  909. progress: 0,
  910. notifyProgress: notifyProgress
  911. };
  912. if (!(0, _type.isDefined)(data.grandTotalRowIndex)) {
  913. data.grandTotalRowIndex = getHeaderIndexedItems(data.rows, rowOptions).length
  914. }
  915. if (!(0, _type.isDefined)(data.grandTotalColumnIndex)) {
  916. data.grandTotalColumnIndex = getHeaderIndexedItems(data.columns, columnOptions).length
  917. }
  918. dataSource._changeLoadingCount(1);
  919. (0, _deferred.when)(createHeaderInfo(data.columns, columnFields, dataFieldsForColumns, true, columnOptions), createHeaderInfo(data.rows, rowFields, dataFieldsForRows, false, rowOptions)).always(function() {
  920. dataSource._changeLoadingCount(-1)
  921. }).done(function(columnsInfo, rowsInfo) {
  922. that._columnsInfo = columnsInfo;
  923. that._rowsInfo = rowsInfo;
  924. if (that._rowsScrollController && that._columnsScrollController && that.changed && !that._dataSource.paginate()) {
  925. that._rowsScrollController.reset();
  926. that._columnsScrollController.reset();
  927. that._lockChanged = true;
  928. that._rowsScrollController.load();
  929. that._columnsScrollController.load();
  930. that._lockChanged = false
  931. }
  932. }).done(function() {
  933. that._fireChanged();
  934. if (that._stateStoringController.isEnabled() && !that._dataSource.isLoading()) {
  935. that._stateStoringController.state(that._dataSource.state());
  936. that._stateStoringController.save()
  937. }
  938. })
  939. },
  940. getRowsInfo: function(getAllData) {
  941. var that = this;
  942. var rowsInfo = that._rowsInfo;
  943. var scrollController = that._rowsScrollController;
  944. var rowspan;
  945. var i;
  946. if (scrollController && !getAllData) {
  947. var startIndex = scrollController.beginPageIndex() * that.rowPageSize();
  948. var endIndex = scrollController.endPageIndex() * that.rowPageSize() + that.rowPageSize();
  949. var newRowsInfo = [];
  950. var maxDepth = 1;
  951. foreachRowInfo(rowsInfo, function(rowInfo, visibleIndex, rowIndex, _, columnIndex) {
  952. var isVisible = visibleIndex >= startIndex && rowIndex < endIndex;
  953. var index = rowIndex < startIndex ? 0 : rowIndex - startIndex;
  954. var cell = rowInfo;
  955. if (isVisible) {
  956. newRowsInfo[index] = newRowsInfo[index] || [];
  957. rowspan = rowIndex < startIndex ? rowInfo.rowspan - (startIndex - rowIndex) || 1 : rowInfo.rowspan;
  958. if (startIndex + index + rowspan > endIndex) {
  959. rowspan = endIndex - (index + startIndex) || 1
  960. }
  961. if (rowspan !== rowInfo.rowspan) {
  962. cell = (0, _extend2.extend)({}, cell, {
  963. rowspan: rowspan
  964. })
  965. }
  966. newRowsInfo[index].push(cell);
  967. maxDepth = math.max(maxDepth, columnIndex + 1)
  968. } else {
  969. if (i > endIndex) {
  970. return false
  971. }
  972. }
  973. });
  974. foreachRowInfo(newRowsInfo, function(rowInfo, visibleIndex, rowIndex, columnIndex, realColumnIndex) {
  975. var colspan = rowInfo.colspan || 1;
  976. if (realColumnIndex + colspan > maxDepth) {
  977. newRowsInfo[rowIndex][columnIndex] = (0, _extend2.extend)({}, rowInfo, {
  978. colspan: maxDepth - realColumnIndex || 1
  979. })
  980. }
  981. });
  982. return newRowsInfo
  983. }
  984. return rowsInfo
  985. },
  986. getColumnsInfo: function(getAllData) {
  987. var that = this;
  988. var info = that._columnsInfo;
  989. var scrollController = that._columnsScrollController;
  990. if (scrollController && !getAllData) {
  991. var startIndex = scrollController.beginPageIndex() * that.columnPageSize();
  992. var endIndex = scrollController.endPageIndex() * that.columnPageSize() + that.columnPageSize();
  993. info = _uiGrid_core4.default.createColumnsInfo(info, startIndex, endIndex)
  994. }
  995. return info
  996. },
  997. totalRowCount: function() {
  998. return this._rowsInfo.length
  999. },
  1000. rowPageIndex: function(index) {
  1001. if (void 0 !== index) {
  1002. this._rowPageIndex = index
  1003. }
  1004. return this._rowPageIndex || 0
  1005. },
  1006. totalColumnCount: function() {
  1007. var count = 0;
  1008. if (this._columnsInfo && this._columnsInfo.length) {
  1009. for (var i = 0; i < this._columnsInfo[0].length; i++) {
  1010. count += this._columnsInfo[0][i].colspan || 1
  1011. }
  1012. }
  1013. return count
  1014. },
  1015. rowPageSize: function(size) {
  1016. if (void 0 !== size) {
  1017. this._rowPageSize = size
  1018. }
  1019. return this._rowPageSize || 20
  1020. },
  1021. columnPageSize: function(size) {
  1022. if (void 0 !== size) {
  1023. this._columnPageSize = size
  1024. }
  1025. return this._columnPageSize || 20
  1026. },
  1027. columnPageIndex: function(index) {
  1028. if (void 0 !== index) {
  1029. this._columnPageIndex = index
  1030. }
  1031. return this._columnPageIndex || 0
  1032. },
  1033. getCellsInfo: function(getAllData) {
  1034. var rowsInfo = this.getRowsInfo(getAllData);
  1035. var columnsInfo = this.getColumnsInfo(getAllData);
  1036. var data = this._dataSource.getData();
  1037. var texts = this._options.texts || {};
  1038. return createCellsInfo(rowsInfo, columnsInfo, data, this._dataSource.getAreaFields("data"), this._options.dataFieldArea, texts.dataNotAvailable)
  1039. },
  1040. dispose: function() {
  1041. var that = this;
  1042. if (that._isSharedDataSource) {
  1043. that._dataSource.off("changed", that._changedHandler);
  1044. that._dataSource.off("expandValueChanging", that._expandValueChangingHandler);
  1045. that._dataSource.off("loadingChanged", that._loadingChangedHandler);
  1046. that._dataSource.off("progressChanged", that._progressChangedHandler);
  1047. that._dataSource.off("fieldsPrepared", that._fieldsPreparedHandler);
  1048. that._dataSource.off("customizeStoreLoadOptions", that._customizeStoreLoadOptionsHandler)
  1049. } else {
  1050. that._dataSource.dispose()
  1051. }
  1052. that._columnsScrollController && that._columnsScrollController.dispose();
  1053. that._rowsScrollController && that._rowsScrollController.dispose();
  1054. that._stateStoringController.dispose();
  1055. that.expandValueChanging.empty();
  1056. that.changed.empty();
  1057. that.loadingChanged.empty();
  1058. that.progressChanged.empty();
  1059. that.scrollChanged.empty();
  1060. that.dataSourceChanged.empty()
  1061. }
  1062. };
  1063. proxyMethod(members, "applyPartialDataSource");
  1064. proxyMethod(members, "collapseHeaderItem");
  1065. proxyMethod(members, "expandHeaderItem");
  1066. proxyMethod(members, "getData");
  1067. proxyMethod(members, "isEmpty");
  1068. return members
  1069. }());