UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

193 lines (192 loc) • 8.65 kB
/** * DevExtreme (ui/grid_core/ui.grid_core.state_storing.js) * Version: 18.1.3 * Build date: Tue May 15 2018 * * Copyright (c) 2012 - 2018 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; var commonUtils = require("../../core/utils/common"), isDefined = require("../../core/utils/type").isDefined, extend = require("../../core/utils/extend").extend, stateStoringCore = require("./ui.grid_core.state_storing_core"), equalByValue = commonUtils.equalByValue; 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 = commonUtils.getKeyHash(columnsState), currentColumnsStateHash = commonUtils.getKeyHash(that._state.columns); if (!equalByValue(currentColumnsStateHash, columnsStateHash)) { extend(that._state, { columns: columnsState }); that.isEnabled() && that.save() } }) } if (selectionController) { selectionController.selectionChanged.add(function(e) { 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(); extend(that._state, userState, { allowedPageSizes: pagerView ? pagerView.getPageSizes() : void 0, filterPanel: { filterEnabled: that.option("filterPanel.filterEnabled") }, filterValue: that.option("filterValue") }); that.isEnabled() && that.save() }) } if (exportController) { exportController.selectionOnlyChanged.add(function() { 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: stateStoringCore.StateStoringController }, extenders: { views: { rowsView: { init: function() { var that = this; var dataController = that.getController("data"); that.callBase(); dataController.stateLoaded.add(function() { if (dataController.isLoaded()) { that.setLoading(false); that.renderNoDataText() } }) } } }, 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(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"), filterSyncController = that.getController("filterSync"), scrollingMode = that.option("scrolling.mode"); 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 } that.component.endUpdate(); that.option("searchPanel.text", searchText || ""); that.option("filterValue", filterSyncController ? filterSyncController.getFilterValueFromState(state) : state.filterValue || null); that.option("filterPanel.filterEnabled", state.filterPanel ? state.filterPanel.filterEnabled : true); that.option("paging.pageSize", "virtual" !== scrollingMode && "infinite" !== scrollingMode && isDefined(state.pageSize) ? state.pageSize : that._initialPageSize); that.option("paging.pageIndex", state.pageIndex || 0) } }, 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); that._restoreStateTimeoutID = setTimeout(function() { stateStoringController.load().always(function() { that._restoreStateTimeoutID = null; callBase.call(that); that.stateLoaded.fire() }) }) } else { if (!that.isStateLoading()) { callBase.call(that) } } }, isLoading: function() { var that = this, stateStoringController = that.getController("stateStoring"); return this.callBase() || stateStoringController.isLoading() }, isStateLoading: function() { return isDefined(this._restoreStateTimeoutID) }, isLoaded: function() { return this.callBase() && !this.isStateLoading() }, dispose: function() { clearTimeout(this._restoreStateTimeoutID); this.callBase() } } } } };