devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
215 lines (213 loc) • 10.1 kB
JavaScript
/**
* DevExtreme (ui/grid_core/ui.grid_core.state_storing.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/
*/
;
var _common = require("../../core/utils/common");
var _type = require("../../core/utils/type");
var _extend = require("../../core/utils/extend");
var _uiGrid_core = require("./ui.grid_core.state_storing_core");
var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
var _deferred = require("../../core/utils/deferred");
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
"default": obj
}
}
var processLoadState = function(that) {
var columnsController = that.getController("columns"),
selectionController = that.getController("selection"),
exportController = that.getController("export"),
dataController = that.getController("data"),
pagerView = that.getView("pagerView");
if (columnsController) {
columnsController.columnsChanged.add(function() {
var columnsState = columnsController.getUserState(),
columnsStateHash = (0, _common.getKeyHash)(columnsState),
currentColumnsStateHash = (0, _common.getKeyHash)(that._state.columns);
if (!(0, _common.equalByValue)(currentColumnsStateHash, columnsStateHash)) {
(0, _extend.extend)(that._state, {
columns: columnsState
});
that.isEnabled() && that.save()
}
})
}
if (selectionController) {
selectionController.selectionChanged.add(function(e) {
(0, _extend.extend)(that._state, {
selectedRowKeys: e.selectedRowKeys,
selectionFilter: e.selectionFilter
});
that.isEnabled() && that.save()
})
}
if (dataController) {
that._initialPageSize = that.option("paging.pageSize");
dataController.changed.add(function() {
var userState = dataController.getUserState(),
focusedRowEnabled = that.option("focusedRowEnabled");
(0, _extend.extend)(that._state, userState, {
allowedPageSizes: pagerView ? pagerView.getPageSizes() : void 0,
filterPanel: {
filterEnabled: that.option("filterPanel.filterEnabled")
},
filterValue: that.option("filterValue"),
focusedRowKey: focusedRowEnabled ? that.option("focusedRowKey") : void 0
});
that.isEnabled() && that.save()
})
}
if (exportController) {
exportController.selectionOnlyChanged.add(function() {
(0, _extend.extend)(that._state, {
exportSelectionOnly: exportController.selectionOnly()
});
that.isEnabled() && that.save()
})
}
};
module.exports = {
defaultOptions: function() {
return {
stateStoring: {
enabled: false,
storageKey: null,
type: "localStorage",
customLoad: null,
customSave: null,
savingTimeout: 2e3
}
}
},
controllers: {
stateStoring: _uiGrid_core2.default.StateStoringController
},
extenders: {
views: {
rowsView: {
init: function() {
var that = this;
var dataController = that.getController("data");
that.callBase();
dataController.stateLoaded.add(function() {
if (dataController.isLoaded() && !dataController.getDataSource()) {
that.setLoading(false);
that.renderNoDataText();
var columnHeadersView = that.component.getView("columnHeadersView");
columnHeadersView && columnHeadersView.render();
that.component._fireContentReadyAction()
}
})
}
}
},
controllers: {
stateStoring: {
init: function() {
this.callBase.apply(this, arguments);
processLoadState(this)
},
isLoading: function() {
return this.callBase() || this.getController("data").isStateLoading()
},
state: function(_state) {
var result = this.callBase.apply(this, arguments);
if (void 0 !== _state) {
this.applyState((0, _extend.extend)({}, _state))
}
return result
},
applyState: function(state) {
var that = this,
allowedPageSizes = state.allowedPageSizes,
searchText = state.searchText,
selectedRowKeys = state.selectedRowKeys,
selectionFilter = state.selectionFilter,
exportController = that.getController("export"),
columnsController = that.getController("columns"),
dataController = that.getController("data"),
filterSyncController = that.getController("filterSync"),
scrollingMode = that.option("scrolling.mode"),
isVirtualScrollingMode = "virtual" === scrollingMode || "infinite" === scrollingMode,
showPageSizeSelector = true === that.option("pager.visible") && that.option("pager.showPageSizeSelector");
that.component.beginUpdate();
if (columnsController) {
columnsController.setUserState(state.columns)
}
if (exportController) {
exportController.selectionOnly(state.exportSelectionOnly)
}
that.option("selectedRowKeys", selectedRowKeys || []);
that.option("selectionFilter", selectionFilter);
if (allowedPageSizes && "auto" === that.option("pager.allowedPageSizes")) {
that.option("pager").allowedPageSizes = allowedPageSizes
}
if (that.option("focusedRowEnabled")) {
that.option("focusedRowKey", state.focusedRowKey)
}
that.component.endUpdate();
that.option("searchPanel.text", searchText || "");
that.option("filterValue", state.filterValue || (filterSyncController ? filterSyncController.getFilterValueFromColumns(state.columns || columnsController.getColumns()) : null));
that.option("filterPanel.filterEnabled", state.filterPanel ? state.filterPanel.filterEnabled : true);
that.option("paging.pageSize", (!isVirtualScrollingMode || showPageSizeSelector) && (0, _type.isDefined)(state.pageSize) ? state.pageSize : that._initialPageSize);
that.option("paging.pageIndex", state.pageIndex || 0);
dataController && dataController.reset()
}
},
columns: {
getVisibleColumns: function() {
var visibleColumns = this.callBase.apply(this, arguments),
stateStoringController = this.getController("stateStoring");
return stateStoringController.isEnabled() && !stateStoringController.isLoaded() ? [] : visibleColumns
}
},
data: {
callbackNames: function() {
return this.callBase().concat(["stateLoaded"])
},
_refreshDataSource: function() {
var that = this,
callBase = that.callBase,
stateStoringController = that.getController("stateStoring");
if (stateStoringController.isEnabled() && !stateStoringController.isLoaded()) {
clearTimeout(that._restoreStateTimeoutID);
var deferred = new _deferred.Deferred;
that._restoreStateTimeoutID = setTimeout(function() {
stateStoringController.load().always(function() {
that._restoreStateTimeoutID = null;
callBase.call(that);
that.stateLoaded.fire();
deferred.resolve()
})
});
return deferred.promise()
} else {
if (!that.isStateLoading()) {
callBase.call(that)
}
}
},
isLoading: function() {
var that = this,
stateStoringController = that.getController("stateStoring");
return this.callBase() || stateStoringController.isLoading()
},
isStateLoading: function() {
return (0, _type.isDefined)(this._restoreStateTimeoutID)
},
isLoaded: function() {
return this.callBase() && !this.isStateLoading()
},
dispose: function() {
clearTimeout(this._restoreStateTimeoutID);
this.callBase()
}
}
}
}
};