devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
946 lines (941 loc) • 57.1 kB
JavaScript
/**
* DevExtreme (ui/grid_core/ui.grid_core.data_controller.js)
* Version: 18.2.18
* Build date: Tue Oct 18 2022
*
* Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
"use strict";
var _renderer = require("../../core/renderer");
var _renderer2 = _interopRequireDefault(_renderer);
var _uiGrid_core = require("./ui.grid_core.modules");
var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
var _uiGrid_core3 = require("./ui.grid_core.utils");
var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
var _array_store = require("../../data/array_store");
var _array_store2 = _interopRequireDefault(_array_store);
var _custom_store = require("../../data/custom_store");
var _custom_store2 = _interopRequireDefault(_custom_store);
var _ui = require("../widget/ui.errors");
var _ui2 = _interopRequireDefault(_ui);
var _common = require("../../core/utils/common");
var _iterator = require("../../core/utils/iterator");
var _type = require("../../core/utils/type");
var _type2 = _interopRequireDefault(_type);
var _extend = require("../../core/utils/extend");
var _data_helper = require("../../data_helper");
var _data_helper2 = _interopRequireDefault(_data_helper);
var _deferred = require("../../core/utils/deferred");
var _array_compare = require("../../core/utils/array_compare");
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
"default": obj
}
}
module.exports = {
defaultOptions: function() {
return {
loadingTimeout: 0,
dataSource: null,
cacheEnabled: true,
repaintChangesOnly: false,
highlightChanges: false,
onDataErrorOccurred: null,
remoteOperations: "auto",
paging: {
enabled: true,
pageSize: void 0,
pageIndex: void 0
}
}
},
controllers: {
data: _uiGrid_core2.default.Controller.inherit({}).include(_data_helper2.default).inherit(function() {
var changePaging = function(that, optionName, value) {
var dataSource = that._dataSource;
if (dataSource) {
if (void 0 !== value) {
if (dataSource[optionName]() !== value) {
if ("pageSize" === optionName) {
dataSource.pageIndex(0)
}
dataSource[optionName](value);
that._skipProcessingPagingChange = true;
that.option("paging." + optionName, value);
that._skipProcessingPagingChange = false;
return dataSource["pageIndex" === optionName ? "load" : "reload"]().done(that.pageChanged.fire.bind(that.pageChanged))
}
return (0, _deferred.Deferred)().resolve().promise()
}
return dataSource[optionName]()
}
return 0
};
var members = {
init: function() {
var that = this;
that._items = [];
that._columnsController = that.getController("columns");
that._columnsChangedHandler = that._handleColumnsChanged.bind(that);
that._dataChangedHandler = that._handleDataChanged.bind(that);
that._loadingChangedHandler = that._handleLoadingChanged.bind(that);
that._loadErrorHandler = that._handleLoadError.bind(that);
that._customizeStoreLoadOptionsHandler = that._handleCustomizeStoreLoadOptions.bind(that);
that._changingHandler = that._handleChanging.bind(that);
that._columnsController.columnsChanged.add(that._columnsChangedHandler);
that._isLoading = false;
that._isCustomLoading = false;
that._repaintChangesOnly = void 0;
that._changes = [];
that.createAction("onDataErrorOccurred");
that.dataErrorOccurred.add(function(error) {
return that.executeAction("onDataErrorOccurred", {
error: error
})
});
that._refreshDataSource()
},
callbackNames: function() {
return ["changed", "loadingChanged", "dataErrorOccurred", "pageChanged", "dataSourceChanged"]
},
callbackFlags: function(name) {
if ("dataErrorOccurred" === name) {
return {
stopOnFalse: true
}
}
},
publicMethods: function() {
return ["beginCustomLoading", "endCustomLoading", "refresh", "filter", "clearFilter", "getCombinedFilter", "keyOf", "byKey", "getDataByKeys", "pageIndex", "pageSize", "pageCount", "totalCount", "_disposeDataSource", "getKeyByRowIndex", "getRowIndexByKey", "getDataSource", "getVisibleRows", "repaintRows"]
},
reset: function() {
this._columnsController.reset();
this._items = [];
this._refreshDataSource()
},
optionChanged: function(args) {
var dataSource, that = this;
function handled() {
args.handled = true
}
if ("dataSource" === args.name && args.name === args.fullName && (args.value === args.previousValue || that.option("columns") && Array.isArray(args.value) && Array.isArray(args.previousValue))) {
if (args.value !== args.previousValue) {
var store = that.store();
if (store) {
store._array = args.value
}
}
handled();
that.refresh(that.option("repaintChangesOnly"));
return
}
switch (args.name) {
case "cacheEnabled":
case "repaintChangesOnly":
case "highlightChanges":
case "loadingTimeout":
case "remoteOperations":
handled();
break;
case "keyExpr":
case "dataSource":
case "scrolling":
handled();
if (!that.skipProcessingPagingChange(args.fullName)) {
that.reset()
}
break;
case "paging":
dataSource = that.dataSource();
if (dataSource && that._setPagingOptions(dataSource)) {
dataSource.load().done(that.pageChanged.fire.bind(that.pageChanged))
}
handled();
break;
case "rtlEnabled":
that.reset();
break;
case "columns":
dataSource = that.dataSource();
if (dataSource && dataSource.isLoading() && args.name === args.fullName) {
dataSource.load()
}
break;
default:
that.callBase(args)
}
},
isReady: function() {
return !this._isLoading
},
getDataSource: function() {
return this._dataSource && this._dataSource._dataSource
},
getCombinedFilter: function(returnDataField) {
return this.combinedFilter(void 0, returnDataField)
},
combinedFilter: function(filter, returnDataField) {
var additionalFilter, that = this,
dataSource = that._dataSource,
columnsController = that._columnsController;
if (dataSource) {
if (void 0 === filter) {
filter = dataSource.filter()
}
additionalFilter = that._calculateAdditionalFilter();
if (additionalFilter) {
if (columnsController.isDataSourceApplied() || columnsController.isAllDataTypesDefined()) {
filter = _uiGrid_core4.default.combineFilters([additionalFilter, filter])
}
}
filter = columnsController.updateFilter(filter, returnDataField || dataSource.remoteOperations().filtering)
}
return filter
},
waitReady: function() {
if (this._updateLockCount) {
this._readyDeferred = new _deferred.Deferred;
return this._readyDeferred
}
return (0, _deferred.when)()
},
_endUpdateCore: function() {
var changes = this._changes;
if (changes.length) {
this._changes = [];
var repaintChangesOnly = changes.every(function(change) {
return change.repaintChangesOnly
});
this.updateItems(1 === changes.length ? changes[0] : {
repaintChangesOnly: repaintChangesOnly
})
}
if (this._readyDeferred) {
this._readyDeferred.resolve();
this._readyDeferred = null
}
},
_handleCustomizeStoreLoadOptions: function(e) {
var columnsController = this._columnsController,
dataSource = this._dataSource,
storeLoadOptions = e.storeLoadOptions;
if (e.isCustomLoading && !storeLoadOptions.isLoadingAll) {
return
}
storeLoadOptions.filter = this.combinedFilter(storeLoadOptions.filter);
if (!columnsController.isDataSourceApplied()) {
columnsController.updateColumnDataTypes(dataSource)
}
this._columnsUpdating = true;
columnsController.updateSortingGrouping(dataSource, !this._isFirstLoading);
this._columnsUpdating = false;
storeLoadOptions.sort = columnsController.getSortDataSourceParameters();
storeLoadOptions.group = columnsController.getGroupDataSourceParameters();
dataSource.sort(storeLoadOptions.sort);
dataSource.group(storeLoadOptions.group);
storeLoadOptions.sort = columnsController.getSortDataSourceParameters(!dataSource.remoteOperations().sorting);
e.group = columnsController.getGroupDataSourceParameters(!dataSource.remoteOperations().grouping)
},
_handleColumnsChanged: function(e) {
var filterValue, filterValues, filterApplied, that = this,
changeTypes = e.changeTypes,
optionNames = e.optionNames;
var updateItemsHandler = function updateItemsHandler() {
that._columnsController.columnsChanged.remove(updateItemsHandler);
that.updateItems()
};
if (changeTypes.sorting || changeTypes.grouping) {
if (that._dataSource && !that._columnsUpdating) {
that._dataSource.group(that._columnsController.getGroupDataSourceParameters());
that._dataSource.sort(that._columnsController.getSortDataSourceParameters());
that.reload()
}
} else {
if (changeTypes.columns) {
if (optionNames.filterValues || optionNames.filterValue || optionNames.selectedFilterOperation) {
filterValue = that._columnsController.columnOption(e.columnIndex, "filterValue");
filterValues = that._columnsController.columnOption(e.columnIndex, "filterValues");
if (Array.isArray(filterValues) || void 0 === e.columnIndex || _type2.default.isDefined(filterValue) || !optionNames.selectedFilterOperation || optionNames.filterValue) {
that._applyFilter();
filterApplied = true
}
}
if (!that._needApplyFilter && !_uiGrid_core4.default.checkChanges(optionNames, ["width", "visibleWidth", "filterValue", "bufferedFilterValue", "selectedFilterOperation", "filterValues", "filterType"])) {
that._columnsController.columnsChanged.add(updateItemsHandler)
}
if (_type2.default.isDefined(optionNames.visible)) {
var column = that._columnsController.columnOption(e.columnIndex);
if (column && (_type2.default.isDefined(column.filterValue) || _type2.default.isDefined(column.filterValues))) {
that._applyFilter();
filterApplied = true
}
}
}
}
if (!filterApplied && changeTypes.filtering) {
that.reload()
}
},
_handleDataChanged: function(e) {
var that = this,
dataSource = that._dataSource,
columnsController = that._columnsController,
isAsyncDataSourceApplying = false;
this._isFirstLoading = false;
if (dataSource && !that._isDataSourceApplying) {
that._isDataSourceApplying = true;
(0, _deferred.when)(that._columnsController.applyDataSource(dataSource)).done(function() {
if (that._isLoading) {
that._handleLoadingChanged(false)
}
if (isAsyncDataSourceApplying && e && e.isDelayed) {
e.isDelayed = false
}
that._isDataSourceApplying = false;
var hasAdditionalFilter = function() {
var additionalFilter = that._calculateAdditionalFilter();
return additionalFilter && additionalFilter.length
},
needApplyFilter = that._needApplyFilter;
that._needApplyFilter = false;
if (needApplyFilter && !that._isAllDataTypesDefined && hasAdditionalFilter()) {
_ui2.default.log("W1005", that.component.NAME);
that._applyFilter()
} else {
that.updateItems(e, true)
}
}).fail(function() {
that._isDataSourceApplying = false
});
if (that._isDataSourceApplying) {
isAsyncDataSourceApplying = true;
that._handleLoadingChanged(true)
}
that._needApplyFilter = !that._columnsController.isDataSourceApplied();
that._isAllDataTypesDefined = columnsController.isAllDataTypesDefined()
}
},
_handleLoadingChanged: function(isLoading) {
this._isLoading = isLoading;
this._fireLoadingChanged()
},
_handleLoadError: function(e) {
this.dataErrorOccurred.fire(e)
},
fireError: function() {
this.dataErrorOccurred.fire(_ui2.default.Error.apply(_ui2.default, arguments))
},
_setPagingOptions: function(dataSource) {
var pageIndex = this.option("paging.pageIndex"),
pageSize = this.option("paging.pageSize"),
pagingEnabled = this.option("paging.enabled"),
scrollingMode = this.option("scrolling.mode"),
appendMode = "infinite" === scrollingMode,
virtualMode = "virtual" === scrollingMode,
paginate = pagingEnabled || virtualMode || appendMode,
isChanged = false;
dataSource.requireTotalCount(!appendMode);
if (void 0 !== pagingEnabled && dataSource.paginate() !== paginate) {
dataSource.paginate(paginate);
isChanged = true
}
if (void 0 !== pageSize && dataSource.pageSize() !== pageSize) {
dataSource.pageSize(pageSize);
isChanged = true
}
if (void 0 !== pageIndex && dataSource.pageIndex() !== pageIndex) {
dataSource.pageIndex(pageIndex);
isChanged = true
}
return isChanged
},
_getSpecificDataSourceOption: function() {
var dataSource = this.option("dataSource");
if (Array.isArray(dataSource)) {
return {
store: {
type: "array",
data: dataSource,
key: this.option("keyExpr")
}
}
}
return dataSource
},
_initDataSource: function() {
var that = this,
dataSource = this.option("dataSource"),
oldDataSource = this._dataSource;
that.callBase();
dataSource = that._dataSource;
that._isFirstLoading = true;
if (dataSource) {
that._setPagingOptions(dataSource);
that.setDataSource(dataSource)
} else {
if (oldDataSource) {
that.updateItems()
}
}
},
_loadDataSource: function() {
var that = this,
dataSource = that._dataSource,
result = new _deferred.Deferred;
(0, _deferred.when)(this._columnsController.refresh(true)).always(function() {
if (dataSource) {
dataSource.load().done(result.resolve).fail(result.reject)
} else {
result.resolve()
}
});
return result.promise()
},
_beforeProcessItems: function(items) {
return items.slice(0)
},
getRowIndexDelta: function() {
return 0
},
_processItems: function(items, changeType) {
var that = this,
rowIndexDelta = that.getRowIndexDelta(),
visibleColumns = that._columnsController.getVisibleColumns(null, "loadingAll" === changeType),
visibleItems = that._items,
dataIndex = "append" === changeType && visibleItems.length > 0 ? visibleItems[visibleItems.length - 1].dataIndex + 1 : 0,
options = {
visibleColumns: visibleColumns,
dataIndex: dataIndex
},
result = [];
(0, _iterator.each)(items, function(index, item) {
if (_type2.default.isDefined(item)) {
options.rowIndex = index - rowIndexDelta;
item = that._processItem(item, options);
result.push(item)
}
});
return result
},
_processItem: function(item, options) {
item = this._generateDataItem(item, options);
item = this._processDataItem(item, options);
item.dataIndex = options.dataIndex++;
return item
},
_generateDataItem: function(data) {
return {
rowType: "data",
data: data,
key: this.keyOf(data)
}
},
_processDataItem: function(dataItem, options) {
dataItem.values = this.generateDataValues(dataItem.data, options.visibleColumns);
return dataItem
},
generateDataValues: function(data, columns, isModified) {
var column, value, values = [];
for (var i = 0; i < columns.length; i++) {
column = columns[i];
value = isModified ? void 0 : null;
if (!column.command) {
if (column.calculateCellValue) {
value = column.calculateCellValue(data)
} else {
if (column.dataField) {
value = data[column.dataField]
}
}
}
values.push(value)
}
return values
},
_applyChange: function(change) {
var that = this;
if ("update" === change.changeType) {
that._applyChangeUpdate(change)
} else {
if (that.items().length && change.repaintChangesOnly && "refresh" === change.changeType) {
that._applyChangesOnly(change)
} else {
if ("refresh" === change.changeType) {
that._applyChangeFull(change)
}
}
}
},
_applyChangeFull: function(change) {
this._items = change.items.slice(0)
},
_applyChangeUpdate: function(change) {
var changeType, that = this,
items = change.items,
rowIndices = change.rowIndices.slice(0),
rowIndexDelta = that.getRowIndexDelta(),
repaintChangesOnly = that.option("repaintChangesOnly"),
prevIndex = -1,
rowIndexCorrection = 0;
rowIndices.sort(function(a, b) {
return a - b
});
for (var i = 0; i < rowIndices.length; i++) {
if (rowIndices[i] < 0) {
rowIndices.splice(i, 1);
i--
}
}
change.items = [];
change.rowIndices = [];
change.columnIndices = [];
change.changeTypes = [];
var equalItems = function(item1, item2, strict) {
var result = item1 && item2 && (0, _common.equalByValue)(item1.key, item2.key);
if (result && strict) {
result = item1.rowType === item2.rowType && ("detail" !== item2.rowType || item1.isEditing === item2.isEditing)
}
return result
};
(0, _iterator.each)(rowIndices, function(index, rowIndex) {
var oldItem, newItem, oldNextItem, newNextItem, strict, columnIndices;
rowIndex += rowIndexCorrection + rowIndexDelta;
if (prevIndex === rowIndex) {
return
}
prevIndex = rowIndex;
oldItem = that._items[rowIndex];
oldNextItem = that._items[rowIndex + 1];
newItem = items[rowIndex];
newNextItem = items[rowIndex + 1];
strict = equalItems(oldItem, oldNextItem) || equalItems(newItem, newNextItem);
if (newItem) {
newItem.rowIndex = rowIndex;
change.items.push(newItem)
}
if (oldItem && newItem && equalItems(oldItem, newItem, strict)) {
changeType = "update";
that._items[rowIndex] = newItem;
if (oldItem.visible !== newItem.visible) {
change.items.splice(-1, 1, {
visible: newItem.visible
})
} else {
if (repaintChangesOnly && !change.isFullUpdate) {
newItem.cells = oldItem.cells;
columnIndices = that._getChangedColumnIndices(oldItem, newItem, rowIndex)
}
}
} else {
if (newItem && !oldItem || newNextItem && equalItems(oldItem, newNextItem, strict)) {
changeType = "insert";
that._items.splice(rowIndex, 0, newItem);
rowIndexCorrection++
} else {
if (oldItem && !newItem || oldNextItem && equalItems(newItem, oldNextItem, strict)) {
changeType = "remove";
that._items.splice(rowIndex, 1);
rowIndexCorrection--;
prevIndex = -1
} else {
if (newItem) {
changeType = "update";
that._items[rowIndex] = newItem
} else {
return
}
}
}
}
change.rowIndices.push(rowIndex - rowIndexDelta);
change.changeTypes.push(changeType);
change.columnIndices.push(columnIndices)
})
},
_isCellChanged: function(oldRow, newRow, rowIndex, columnIndex, isLiveUpdate) {
if (JSON.stringify(oldRow.values[columnIndex]) !== JSON.stringify(newRow.values[columnIndex])) {
return true
}
function isCellModified(row, columnIndex) {
return row.modifiedValues ? void 0 !== row.modifiedValues[columnIndex] : false
}
if (isCellModified(oldRow, columnIndex) !== isCellModified(newRow, columnIndex)) {
return true
}
return false
},
_getChangedColumnIndices: function(oldItem, newItem, rowIndex, isLiveUpdate) {
if (oldItem.rowType === newItem.rowType && "group" !== newItem.rowType && "groupFooter" !== newItem.rowType) {
var columnIndices = [];
for (var columnIndex = 0; columnIndex < oldItem.values.length; columnIndex++) {
if (this._isCellChanged(oldItem, newItem, rowIndex, columnIndex, isLiveUpdate)) {
columnIndices.push(columnIndex)
} else {
var cell = oldItem.cells && oldItem.cells[columnIndex];
if (cell && cell.update) {
cell.update(newItem)
}
}
}
oldItem.update && oldItem.update(newItem);
return columnIndices
}
},
_applyChangesOnly: function(change) {
var _this = this;
var rowIndices = [],
columnIndices = [],
changeTypes = [],
items = [],
newIndexByKey = {};
function getRowKey(row) {
if (row) {
return row.rowType + "," + JSON.stringify(row.key)
}
}
function isItemEquals(item1, item2) {
if (JSON.stringify(item1.values) !== JSON.stringify(item2.values)) {
return false
}
if (item1.modified !== item2.modified || item1.inserted !== item2.inserted || item1.removed !== item2.removed) {
return false
}
if ("group" === item1.rowType || "groupFooter" === item1.rowType) {
if (item1.isExpanded !== item2.isExpanded || JSON.stringify(item1.summaryCells) !== JSON.stringify(item2.summaryCells)) {
return false
}
}
if (item1.cells) {
item1.update && item1.update(item2);
item1.cells.forEach(function(cell) {
if (cell && cell.update) {
cell.update(item2)
}
})
}
return true
}
var oldItems = this._items.slice();
change.items.forEach(function(item, index) {
var key = getRowKey(item);
newIndexByKey[key] = index;
item.rowIndex = index
});
var result = (0, _array_compare.findChanges)(oldItems, change.items, getRowKey, isItemEquals);
if (!result) {
this._applyChangeFull(change);
return
}
result.forEach(function(change) {
switch (change.type) {
case "update":
var index = change.index,
newItem = change.data,
oldItem = change.oldItem,
currentColumnIndices = _this._getChangedColumnIndices(oldItem, newItem, index, true);
rowIndices.push(index);
changeTypes.push("update");
items.push(newItem);
_this._items[index] = newItem;
newItem.cells = oldItem.cells;
newItem.oldValues = oldItem.values;
columnIndices.push(currentColumnIndices);
break;
case "insert":
rowIndices.push(change.index);
changeTypes.push("insert");
items.push(change.data);
columnIndices.push(void 0);
_this._items.splice(change.index, 0, change.data);
break;
case "remove":
rowIndices.push(change.index);
changeTypes.push("remove");
_this._items.splice(change.index, 1);
items.push(change.oldItem);
columnIndices.push(void 0)
}
});
change.repaintChangesOnly = true;
change.changeType = "update";
change.rowIndices = rowIndices;
change.columnIndices = columnIndices;
change.changeTypes = changeTypes;
change.items = items;
if (oldItems.length) {
change.isLiveUpdate = true
}
this._correctRowIndices(function(rowIndex) {
var oldItem = oldItems[rowIndex],
key = getRowKey(oldItem),
newRowIndex = newIndexByKey[key];
return newRowIndex >= 0 ? newRowIndex - rowIndex : 0
})
},
_correctRowIndices: _common.noop,
_updateItemsCore: function(change) {
var items, oldItems, that = this,
dataSource = that._dataSource,
changeType = change.changeType || "refresh";
change.changeType = changeType;
if (dataSource) {
items = change.items || dataSource.items();
items = that._beforeProcessItems(items);
items = that._processItems(items, changeType);
change.items = items;
oldItems = that._items.length === items.length && that._items;
that._applyChange(change);
(0, _iterator.each)(that._items, function(index, item) {
item.rowIndex = index;
if (oldItems) {
item.cells = oldItems[index].cells
}
})
} else {
that._items = []
}
},
_handleChanging: function(e) {
var that = this,
rows = that.getVisibleRows(),
dataSource = that.dataSource();
if (dataSource) {
e.changes.forEach(function(change) {
if ("insert" === change.type && change.index >= 0) {
var row, dataIndex = 0;
for (var i = 0; i < change.index; i++) {
row = rows[i];
if (row && ("data" === row.rowType || "group" === row.rowType)) {
dataIndex++
}
}
change.index = dataIndex
}
})
}
},
updateItems: function(change, isDataChanged) {
change = change || {};
var that = this;
if (void 0 !== that._repaintChangesOnly) {
change.repaintChangesOnly = that._repaintChangesOnly
} else {
if (change.changes) {
change.repaintChangesOnly = that.option("repaintChangesOnly")
} else {
if (isDataChanged) {
var operationTypes = that.dataSource().operationTypes();
change.repaintChangesOnly = operationTypes && !operationTypes.grouping && !operationTypes.filtering && that.option("repaintChangesOnly");
change.isDataChanged = true;
if (operationTypes && (operationTypes.reload || operationTypes.paging || operationTypes.groupExpanding)) {
change.needUpdateDimensions = true
}
}
}
}
if (that._updateLockCount) {
that._changes.push(change);
return
}
that._updateItemsCore(change);
if (change.cancel) {
return
}
that._fireChanged(change)
},
_fireChanged: function(change) {
var that = this;
(0, _common.deferRender)(function() {
that.changed.fire(change)
})
},
isLoading: function() {
return this._isLoading || this._isCustomLoading
},
_fireLoadingChanged: function() {
this.loadingChanged.fire(this.isLoading(), this._loadingText)
},
_calculateAdditionalFilter: function() {
return null
},
_applyFilter: function() {
var that = this,
dataSource = that._dataSource;
if (dataSource) {
dataSource.pageIndex(0);
return that.reload().done(that.pageChanged.fire.bind(that.pageChanged))
}
},
filter: function filter(filterExpr) {
var dataSource = this._dataSource,
filter = dataSource.filter();
if (0 === arguments.length) {
return dataSource ? dataSource.filter() : void 0
}
filterExpr = arguments.length > 1 ? Array.prototype.slice.call(arguments, 0) : filterExpr;
if (_uiGrid_core4.default.equalFilterParameters(filter, filterExpr)) {
return
}
if (dataSource) {
dataSource.filter(filterExpr)
}
this._applyFilter()
},
clearFilter: function(filterName) {
var that = this,
columnsController = that._columnsController,
clearColumnOption = function(optionName) {
var index, columnCount = columnsController.columnCount();
for (index = 0; index < columnCount; index++) {
columnsController.columnOption(index, optionName, void 0)
}
};
that.component.beginUpdate();
if (arguments.length > 0) {
switch (filterName) {
case "dataSource":
that.filter(null);
break;
case "search":
that.searchByText("");
break;
case "header":
clearColumnOption("filterValues");
break;
case "row":
clearColumnOption("filterValue")
}
} else {
that.filter(null);
that.searchByText("");
clearColumnOption("filterValue");
clearColumnOption("filterValues")
}
that.component.endUpdate()
},
_fireDataSourceChanged: function() {
var that = this;
var changedHandler = function changedHandler() {
that.changed.remove(changedHandler);
that.dataSourceChanged.fire()
};
that.changed.add(changedHandler)
},
_getDataSourceAdapter: _common.noop,
_createDataSourceAdapterCore: function(dataSource, remoteOperations) {
var dataSourceAdapterProvider = this._getDataSourceAdapter(),
dataSourceAdapter = dataSourceAdapterProvider.create(this.component);
dataSourceAdapter.init(dataSource, remoteOperations);
return dataSourceAdapter
},
isLocalStore: function(store) {
store = store || this.store();
return store instanceof _array_store2.default
},
isCustomStore: function(store) {
store = store || this.store();
return store instanceof _custom_store2.default
},
_createDataSourceAdapter: function(dataSource) {
var remoteOperations = this.option("remoteOperations"),
store = dataSource.store(),
enabledRemoteOperations = {
filtering: true,
sorting: true,
paging: true,
grouping: true,
summary: true
};
if (remoteOperations && remoteOperations.groupPaging) {
remoteOperations = (0, _extend.extend)({}, enabledRemoteOperations, remoteOperations)
}
if ("auto" === remoteOperations) {
remoteOperations = this.isLocalStore(store) || this.isCustomStore(store) ? {} : {
filtering: true,
sorting: true,
paging: true
}
}
if (true === remoteOperations) {
remoteOperations = enabledRemoteOperations
}
return this._createDataSourceAdapterCore(dataSource, remoteOperations)
},
setDataSource: function(dataSource) {
var that = this,
oldDataSource = that._dataSource;
if (!dataSource && oldDataSource) {
oldDataSource.changed.remove(that._dataChangedHandler);
oldDataSource.loadingChanged.remove(that._loadingChangedHandler);
oldDataSource.loadError.remove(that._loadErrorHandler);
oldDataSource.customizeStoreLoadOptions.remove(that._customizeStoreLoadOptionsHandler);
oldDataSource.changing.remove(that._changingHandler);
oldDataSource.cancelAll();
oldDataSource.dispose(that._isSharedDataSource)
}
if (dataSource) {
dataSource = that._createDataSourceAdapter(dataSource)
}
that._dataSource = dataSource;
if (dataSource) {
that._fireDataSourceChanged();
that._isLoading = !dataSource.isLoaded();
that._needApplyFilter = true;
that._isAllDataTypesDefined = that._columnsController.isAllDataTypesDefined();
dataSource.changed.add(that._dataChangedHandler);
dataSource.loadingChanged.add(that._loadingChangedHandler);
dataSource.loadError.add(that._loadErrorHandler);
dataSource.customizeStoreLoadOptions.add(that._customizeStoreLoadOptionsHandler);
dataSource.changing.add(that._changingHandler)
}
},
items: function() {
return this._items
},
isEmpty: function() {
return !this.items().length
},
pageCount: function() {
return this._dataSource ? this._dataSource.pageCount() : 1
},
dataSource: function() {
return this._dataSource
},
store: function() {
var dataSource = this._dataSource;
return dataSource && dataSource.store()
},
loadAll: function(data) {
var that = this,
d = new _deferred.Deferred,
dataSource = that._dataSource;
if (dataSource) {
if (data) {
var options = {
data: data,
isCustomLoading: true,
storeLoadOptions: {
isLoadingAll: true
},
loadOptions: {
filter: that.getCombinedFilter(),
group: dataSource.group(),
sort: dataSource.sort()
}
};
dataSource._handleDataLoaded(options);
(0, _deferred.when)(options.data).done(function(data) {
data = that._beforeProcessItems(data);
d.resolve(that._processItems(data, "loadingAll"), options.extra && options.extra.summary)
}).fail(d.reject)
} else {
if (!dataSource.isLoading()) {
var loadOptions = (0, _extend.extend)({}, dataSource.loadOptions(), {
isLoadingAll: true,
requireTotalCount: false
});
dataSource.load(loadOptions).done(function(items, extra) {
items = that._beforeProcessItems(items);
items = that._processItems(items, "loadingAll");
d.resolve(items, extra && extra.summary)