This is an automated email from the ASF dual-hosted git repository.
graceguo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git
The following commit(s) were added to refs/heads/master by this push:
new 69e8df4 sql lab localStorage config (#6257)
69e8df4 is described below
commit 69e8df404d46e35bf686cc92992d6e0415172d90
Author: Grace Guo <[email protected]>
AuthorDate: Tue Nov 6 23:12:32 2018 -0800
sql lab localStorage config (#6257)
---
.../assets/spec/javascripts/sqllab/App_spec.jsx | 2 +-
.../sqllab/ExploreResultsButton_spec.jsx | 10 ++---
.../{actions_spec.js => actions/sqlLab_spec.js} | 4 +-
.../assets/spec/javascripts/sqllab/fixtures.js | 2 +-
.../{reducers_spec.js => reducers/sqlLab_spec.js} | 52 +++++++++++-----------
superset/assets/src/SqlLab/App.jsx | 27 ++++++++---
.../src/SqlLab/{actions.js => actions/sqlLab.js} | 8 ++--
superset/assets/src/SqlLab/components/App.jsx | 2 +-
.../src/SqlLab/components/ExploreResultsButton.jsx | 6 +--
.../src/SqlLab/components/QueryAutoRefresh.jsx | 2 +-
.../assets/src/SqlLab/components/SouthPane.jsx | 2 +-
.../src/SqlLab/components/TabbedSqlEditors.jsx | 2 +-
superset/assets/src/SqlLab/reducers/common.js | 3 ++
.../src/SqlLab/{ => reducers}/getInitialState.js | 7 ++-
superset/assets/src/SqlLab/reducers/index.js | 11 +++++
.../src/SqlLab/{reducers.js => reducers/sqlLab.js} | 17 +++----
superset/assets/src/reduxUtils.js | 16 ++++---
17 files changed, 101 insertions(+), 72 deletions(-)
diff --git a/superset/assets/spec/javascripts/sqllab/App_spec.jsx
b/superset/assets/spec/javascripts/sqllab/App_spec.jsx
index 72192c0..5ba0733 100644
--- a/superset/assets/spec/javascripts/sqllab/App_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/App_spec.jsx
@@ -7,7 +7,7 @@ import sinon from 'sinon';
import App from 'src/SqlLab/components/App';
import TabbedSqlEditors from 'src/SqlLab/components/TabbedSqlEditors';
-import { sqlLabReducer } from 'src/SqlLab/reducers';
+import sqlLabReducer from 'src/SqlLab/reducers/index';
describe('SqlLab App', () => {
const middlewares = [thunk];
diff --git
a/superset/assets/spec/javascripts/sqllab/ExploreResultsButton_spec.jsx
b/superset/assets/spec/javascripts/sqllab/ExploreResultsButton_spec.jsx
index 71647c8..25c899e 100644
--- a/superset/assets/spec/javascripts/sqllab/ExploreResultsButton_spec.jsx
+++ b/superset/assets/spec/javascripts/sqllab/ExploreResultsButton_spec.jsx
@@ -8,8 +8,8 @@ import fetchMock from 'fetch-mock';
import shortid from 'shortid';
import { queries, queryWithBadColumns } from './fixtures';
-import { sqlLabReducer } from '../../../src/SqlLab/reducers';
-import * as actions from '../../../src/SqlLab/actions';
+import sqlLabReducer from '../../../src/SqlLab/reducers/index';
+import * as actions from '../../../src/SqlLab/actions/sqlLab';
import ExploreResultsButton from
'../../../src/SqlLab/components/ExploreResultsButton';
import * as exploreUtils from '../../../src/explore/exploreUtils';
import Button from '../../../src/components/Button';
@@ -23,9 +23,9 @@ describe('ExploreResultsButton', () => {
const initialState = {
sqlLab: {
...sqlLabReducer(undefined, {}),
- common: {
- conf: { SUPERSET_WEBSERVER_TIMEOUT: 45 },
- },
+ },
+ common: {
+ conf: { SUPERSET_WEBSERVER_TIMEOUT: 45 },
},
};
const store = mockStore(initialState);
diff --git a/superset/assets/spec/javascripts/sqllab/actions_spec.js
b/superset/assets/spec/javascripts/sqllab/actions/sqlLab_spec.js
similarity index 97%
rename from superset/assets/spec/javascripts/sqllab/actions_spec.js
rename to superset/assets/spec/javascripts/sqllab/actions/sqlLab_spec.js
index 1260621..7953d63 100644
--- a/superset/assets/spec/javascripts/sqllab/actions_spec.js
+++ b/superset/assets/spec/javascripts/sqllab/actions/sqlLab_spec.js
@@ -2,8 +2,8 @@
import sinon from 'sinon';
import fetchMock from 'fetch-mock';
-import * as actions from '../../../src/SqlLab/actions';
-import { query } from './fixtures';
+import * as actions from '../../../../src/SqlLab/actions/sqlLab';
+import { query } from '../fixtures';
describe('async actions', () => {
let dispatch;
diff --git a/superset/assets/spec/javascripts/sqllab/fixtures.js
b/superset/assets/spec/javascripts/sqllab/fixtures.js
index 77a4806..02a6c12 100644
--- a/superset/assets/spec/javascripts/sqllab/fixtures.js
+++ b/superset/assets/spec/javascripts/sqllab/fixtures.js
@@ -1,5 +1,5 @@
import sinon from 'sinon';
-import * as actions from '../../../src/SqlLab/actions';
+import * as actions from '../../../src/SqlLab/actions/sqlLab';
export const mockedActions = sinon.stub(Object.assign({}, actions));
diff --git a/superset/assets/spec/javascripts/sqllab/reducers_spec.js
b/superset/assets/spec/javascripts/sqllab/reducers/sqlLab_spec.js
similarity index 68%
rename from superset/assets/spec/javascripts/sqllab/reducers_spec.js
rename to superset/assets/spec/javascripts/sqllab/reducers/sqlLab_spec.js
index 1a451f6..964daa8 100644
--- a/superset/assets/spec/javascripts/sqllab/reducers_spec.js
+++ b/superset/assets/spec/javascripts/sqllab/reducers/sqlLab_spec.js
@@ -1,6 +1,6 @@
-import * as r from '../../../src/SqlLab/reducers';
-import * as actions from '../../../src/SqlLab/actions';
-import { table, initialState as mockState } from './fixtures';
+import sqlLabReducer from '../../../../src/SqlLab/reducers/sqlLab';
+import * as actions from '../../../../src/SqlLab/actions/sqlLab';
+import { table, initialState as mockState } from '../fixtures';
const initialState = mockState.sqlLab;
@@ -12,7 +12,7 @@ describe('sqlLabReducer', () => {
queries: { [testQuery.id]: testQuery },
};
beforeEach(() => {
- newState = r.sqlLabReducer(newState,
actions.cloneQueryToNewTab(testQuery));
+ newState = sqlLabReducer(newState,
actions.cloneQueryToNewTab(testQuery));
});
it('should have at most one more tab', () => {
@@ -39,7 +39,7 @@ describe('sqlLabReducer', () => {
newState = { ...initialState };
defaultQueryEditor = newState.queryEditors[0];
qe = Object.assign({}, defaultQueryEditor);
- newState = r.sqlLabReducer(newState, actions.addQueryEditor(qe));
+ newState = sqlLabReducer(newState, actions.addQueryEditor(qe));
qe = newState.queryEditors[newState.queryEditors.length - 1];
});
it('should add a query editor', () => {
@@ -47,44 +47,44 @@ describe('sqlLabReducer', () => {
});
it('should remove a query editor', () => {
expect(newState.queryEditors).toHaveLength(2);
- newState = r.sqlLabReducer(newState, actions.removeQueryEditor(qe));
+ newState = sqlLabReducer(newState, actions.removeQueryEditor(qe));
expect(newState.queryEditors).toHaveLength(1);
});
it('should set q query editor active', () => {
- newState = r.sqlLabReducer(newState, actions.addQueryEditor(qe));
- newState = r.sqlLabReducer(newState,
actions.setActiveQueryEditor(defaultQueryEditor));
+ newState = sqlLabReducer(newState, actions.addQueryEditor(qe));
+ newState = sqlLabReducer(newState,
actions.setActiveQueryEditor(defaultQueryEditor));
expect(newState.tabHistory[newState.tabHistory.length -
1]).toBe(defaultQueryEditor.id);
});
it('should not fail while setting DB', () => {
const dbId = 9;
- newState = r.sqlLabReducer(newState, actions.queryEditorSetDb(qe, dbId));
+ newState = sqlLabReducer(newState, actions.queryEditorSetDb(qe, dbId));
expect(newState.queryEditors[1].dbId).toBe(dbId);
});
it('should not fail while setting schema', () => {
const schema = 'foo';
- newState = r.sqlLabReducer(newState, actions.queryEditorSetSchema(qe,
schema));
+ newState = sqlLabReducer(newState, actions.queryEditorSetSchema(qe,
schema));
expect(newState.queryEditors[1].schema).toBe(schema);
});
it('should not fail while setting autorun ', () => {
- newState = r.sqlLabReducer(newState, actions.queryEditorSetAutorun(qe,
false));
+ newState = sqlLabReducer(newState, actions.queryEditorSetAutorun(qe,
false));
expect(newState.queryEditors[1].autorun).toBe(false);
- newState = r.sqlLabReducer(newState, actions.queryEditorSetAutorun(qe,
true));
+ newState = sqlLabReducer(newState, actions.queryEditorSetAutorun(qe,
true));
expect(newState.queryEditors[1].autorun).toBe(true);
});
it('should not fail while setting title', () => {
const title = 'a new title';
- newState = r.sqlLabReducer(newState, actions.queryEditorSetTitle(qe,
title));
+ newState = sqlLabReducer(newState, actions.queryEditorSetTitle(qe,
title));
expect(newState.queryEditors[1].title).toBe(title);
});
it('should not fail while setting Sql', () => {
const sql = 'SELECT nothing from dev_null';
- newState = r.sqlLabReducer(newState, actions.queryEditorSetSql(qe, sql));
+ newState = sqlLabReducer(newState, actions.queryEditorSetSql(qe, sql));
expect(newState.queryEditors[1].sql).toBe(sql);
});
it('should set selectedText', () => {
const selectedText = 'TEST';
expect(newState.queryEditors[0].selectedText).toBeNull();
- newState = r.sqlLabReducer(
+ newState = sqlLabReducer(
newState, actions.queryEditorSetSelectedText(newState.queryEditors[0],
'TEST'));
expect(newState.queryEditors[0].selectedText).toBe(selectedText);
});
@@ -94,7 +94,7 @@ describe('sqlLabReducer', () => {
let newTable;
beforeEach(() => {
newTable = Object.assign({}, table);
- newState = r.sqlLabReducer(initialState, actions.mergeTable(newTable));
+ newState = sqlLabReducer(initialState, actions.mergeTable(newTable));
newTable = newState.tables[0];
});
it('should add a table', () => {
@@ -104,18 +104,18 @@ describe('sqlLabReducer', () => {
it('should merge the table attributes', () => {
// Merging the extra attribute
newTable.extra = true;
- newState = r.sqlLabReducer(newState, actions.mergeTable(newTable));
+ newState = sqlLabReducer(newState, actions.mergeTable(newTable));
expect(newState.tables).toHaveLength(1);
expect(newState.tables[0].extra).toBe(true);
});
it('should expand and collapse a table', () => {
- newState = r.sqlLabReducer(newState, actions.collapseTable(newTable));
+ newState = sqlLabReducer(newState, actions.collapseTable(newTable));
expect(newState.tables[0].expanded).toBe(false);
- newState = r.sqlLabReducer(newState, actions.expandTable(newTable));
+ newState = sqlLabReducer(newState, actions.expandTable(newTable));
expect(newState.tables[0].expanded).toBe(true);
});
it('should remove a table', () => {
- newState = r.sqlLabReducer(newState, actions.removeTable(newTable));
+ newState = sqlLabReducer(newState, actions.removeTable(newTable));
expect(newState.tables).toHaveLength(0);
});
});
@@ -128,22 +128,22 @@ describe('sqlLabReducer', () => {
newQuery = { ...query };
});
it('should start a query', () => {
- newState = r.sqlLabReducer(newState, actions.startQuery(newQuery));
+ newState = sqlLabReducer(newState, actions.startQuery(newQuery));
expect(Object.keys(newState.queries)).toHaveLength(1);
});
it('should stop the query', () => {
- newState = r.sqlLabReducer(newState, actions.startQuery(newQuery));
- newState = r.sqlLabReducer(newState, actions.stopQuery(newQuery));
+ newState = sqlLabReducer(newState, actions.startQuery(newQuery));
+ newState = sqlLabReducer(newState, actions.stopQuery(newQuery));
const q = newState.queries[Object.keys(newState.queries)[0]];
expect(q.state).toBe('stopped');
});
it('should remove a query', () => {
- newState = r.sqlLabReducer(newState, actions.startQuery(newQuery));
- newState = r.sqlLabReducer(newState, actions.removeQuery(newQuery));
+ newState = sqlLabReducer(newState, actions.startQuery(newQuery));
+ newState = sqlLabReducer(newState, actions.removeQuery(newQuery));
expect(Object.keys(newState.queries)).toHaveLength(0);
});
it('should refresh queries when polling returns empty', () => {
- newState = r.sqlLabReducer(newState, actions.refreshQueries({}));
+ newState = sqlLabReducer(newState, actions.refreshQueries({}));
});
});
});
diff --git a/superset/assets/src/SqlLab/App.jsx
b/superset/assets/src/SqlLab/App.jsx
index 9e242c3..bd5906a 100644
--- a/superset/assets/src/SqlLab/App.jsx
+++ b/superset/assets/src/SqlLab/App.jsx
@@ -5,8 +5,8 @@ import thunkMiddleware from 'redux-thunk';
import { hot } from 'react-hot-loader';
import { initFeatureFlags } from 'src/featureFlags';
-import getInitialState from './getInitialState';
-import rootReducer from './reducers';
+import getInitialState from './reducers/getInitialState';
+import rootReducer from './reducers/index';
import { initEnhancer } from '../reduxUtils';
import App from './components/App';
import setupApp from '../setup/setupApp';
@@ -20,14 +20,31 @@ setupApp();
const appContainer = document.getElementById('app');
const bootstrapData = JSON.parse(appContainer.getAttribute('data-bootstrap'));
initFeatureFlags(bootstrapData.common.feature_flags);
-const state = getInitialState(bootstrapData);
+const initialState = getInitialState(bootstrapData);
+const sqlLabPersistStateConfig = {
+ paths: ['sqlLab'],
+ config: {
+ slicer: paths => (state) => {
+ const subset = {};
+ paths.forEach((path) => {
+ // this line is used to remove old data from browser localStorage.
+ // we used to persist all redux state into localStorage, but
+ // it caused configurations passed from server-side got override.
+ // see PR 6257 for details
+ delete state[path].common; // eslint-disable-line no-param-reassign
+ subset[path] = state[path];
+ });
+ return subset;
+ },
+ },
+};
const store = createStore(
rootReducer,
- state,
+ initialState,
compose(
applyMiddleware(thunkMiddleware),
- initEnhancer(),
+ initEnhancer(true, sqlLabPersistStateConfig),
),
);
diff --git a/superset/assets/src/SqlLab/actions.js
b/superset/assets/src/SqlLab/actions/sqlLab.js
similarity index 98%
rename from superset/assets/src/SqlLab/actions.js
rename to superset/assets/src/SqlLab/actions/sqlLab.js
index aac81d6..17e022b 100644
--- a/superset/assets/src/SqlLab/actions.js
+++ b/superset/assets/src/SqlLab/actions/sqlLab.js
@@ -3,14 +3,14 @@ import JSONbig from 'json-bigint';
import { t } from '@superset-ui/translation';
import { SupersetClient } from '@superset-ui/connection';
-import { now } from '../modules/dates';
+import { now } from '../../modules/dates';
import {
addSuccessToast as addSuccessToastAction,
addDangerToast as addDangerToastAction,
addInfoToast as addInfoToastAction,
-} from '../messageToasts/actions';
-import getClientErrorObject from '../utils/getClientErrorObject';
-import COMMON_ERR_MESSAGES from '../utils/errorMessages';
+} from '../../messageToasts/actions/index';
+import getClientErrorObject from '../../utils/getClientErrorObject';
+import COMMON_ERR_MESSAGES from '../../utils/errorMessages';
export const RESET_STATE = 'RESET_STATE';
export const ADD_QUERY_EDITOR = 'ADD_QUERY_EDITOR';
diff --git a/superset/assets/src/SqlLab/components/App.jsx
b/superset/assets/src/SqlLab/components/App.jsx
index 8a0c084..6613d07 100644
--- a/superset/assets/src/SqlLab/components/App.jsx
+++ b/superset/assets/src/SqlLab/components/App.jsx
@@ -8,7 +8,7 @@ import TabbedSqlEditors from './TabbedSqlEditors';
import QueryAutoRefresh from './QueryAutoRefresh';
import QuerySearch from './QuerySearch';
import ToastPresenter from '../../messageToasts/containers/ToastPresenter';
-import * as Actions from '../actions';
+import * as Actions from '../actions/sqlLab';
class App extends React.PureComponent {
constructor(props) {
diff --git a/superset/assets/src/SqlLab/components/ExploreResultsButton.jsx
b/superset/assets/src/SqlLab/components/ExploreResultsButton.jsx
index 06cddbc..26a246c 100644
--- a/superset/assets/src/SqlLab/components/ExploreResultsButton.jsx
+++ b/superset/assets/src/SqlLab/components/ExploreResultsButton.jsx
@@ -9,7 +9,7 @@ import { t } from '@superset-ui/translation';
import shortid from 'shortid';
import { exportChart } from '../../explore/exploreUtils';
-import * as actions from '../actions';
+import * as actions from '../actions/sqlLab';
import InfoTooltipWithTrigger from '../../components/InfoTooltipWithTrigger';
import Button from '../../components/Button';
@@ -184,10 +184,10 @@ class ExploreResultsButton extends React.PureComponent {
ExploreResultsButton.propTypes = propTypes;
ExploreResultsButton.defaultProps = defaultProps;
-function mapStateToProps({ sqlLab }) {
+function mapStateToProps({ sqlLab, common }) {
return {
errorMessage: sqlLab.errorMessage,
- timeout: sqlLab.common ? sqlLab.common.conf.SUPERSET_WEBSERVER_TIMEOUT :
null,
+ timeout: common.conf ? common.conf.SUPERSET_WEBSERVER_TIMEOUT : null,
};
}
diff --git a/superset/assets/src/SqlLab/components/QueryAutoRefresh.jsx
b/superset/assets/src/SqlLab/components/QueryAutoRefresh.jsx
index 2937e15..295c32f 100644
--- a/superset/assets/src/SqlLab/components/QueryAutoRefresh.jsx
+++ b/superset/assets/src/SqlLab/components/QueryAutoRefresh.jsx
@@ -4,7 +4,7 @@ import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import { SupersetClient } from '@superset-ui/connection';
-import * as Actions from '../actions';
+import * as Actions from '../actions/sqlLab';
const QUERY_UPDATE_FREQ = 2000;
const QUERY_UPDATE_BUFFER_MS = 5000;
diff --git a/superset/assets/src/SqlLab/components/SouthPane.jsx
b/superset/assets/src/SqlLab/components/SouthPane.jsx
index eddc808..3f6fb42 100644
--- a/superset/assets/src/SqlLab/components/SouthPane.jsx
+++ b/superset/assets/src/SqlLab/components/SouthPane.jsx
@@ -6,7 +6,7 @@ import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { t } from '@superset-ui/translation';
-import * as Actions from '../actions';
+import * as Actions from '../actions/sqlLab';
import QueryHistory from './QueryHistory';
import ResultSet from './ResultSet';
import { STATUS_OPTIONS, STATE_BSSTYLE_MAP } from '../constants';
diff --git a/superset/assets/src/SqlLab/components/TabbedSqlEditors.jsx
b/superset/assets/src/SqlLab/components/TabbedSqlEditors.jsx
index 43b7354..0fb5f21 100644
--- a/superset/assets/src/SqlLab/components/TabbedSqlEditors.jsx
+++ b/superset/assets/src/SqlLab/components/TabbedSqlEditors.jsx
@@ -6,7 +6,7 @@ import { bindActionCreators } from 'redux';
import URI from 'urijs';
import { t } from '@superset-ui/translation';
-import * as Actions from '../actions';
+import * as Actions from '../actions/sqlLab';
import SqlEditor from './SqlEditor';
import { areArraysShallowEqual } from '../../reduxUtils';
import TabStatusIcon from './TabStatusIcon';
diff --git a/superset/assets/src/SqlLab/reducers/common.js
b/superset/assets/src/SqlLab/reducers/common.js
new file mode 100644
index 0000000..738291c
--- /dev/null
+++ b/superset/assets/src/SqlLab/reducers/common.js
@@ -0,0 +1,3 @@
+export default function commonReducer(state = {}) {
+ return state;
+}
diff --git a/superset/assets/src/SqlLab/getInitialState.js
b/superset/assets/src/SqlLab/reducers/getInitialState.js
similarity index 77%
rename from superset/assets/src/SqlLab/getInitialState.js
rename to superset/assets/src/SqlLab/reducers/getInitialState.js
index ba984c2..14bd677 100644
--- a/superset/assets/src/SqlLab/getInitialState.js
+++ b/superset/assets/src/SqlLab/reducers/getInitialState.js
@@ -1,6 +1,6 @@
import shortid from 'shortid';
import { t } from '@superset-ui/translation';
-import getToastsFromPyFlashMessages from
'../messageToasts/utils/getToastsFromPyFlashMessages';
+import getToastsFromPyFlashMessages from
'../../messageToasts/utils/getToastsFromPyFlashMessages';
export default function getInitialState({ defaultDbId, ...restBootstrapData })
{
const defaultQueryEditor = {
@@ -24,10 +24,13 @@ export default function getInitialState({ defaultDbId,
...restBootstrapData }) {
tabHistory: [defaultQueryEditor.id],
tables: [],
queriesLastUpdate: Date.now(),
- ...restBootstrapData,
},
messageToasts: getToastsFromPyFlashMessages(
(restBootstrapData.common || {}).flash_messages || [],
),
+ common: {
+ flash_messages: restBootstrapData.common.flash_messages,
+ conf: restBootstrapData.common.conf,
+ },
};
}
diff --git a/superset/assets/src/SqlLab/reducers/index.js
b/superset/assets/src/SqlLab/reducers/index.js
new file mode 100644
index 0000000..c1dcd28
--- /dev/null
+++ b/superset/assets/src/SqlLab/reducers/index.js
@@ -0,0 +1,11 @@
+import { combineReducers } from 'redux';
+
+import sqlLab from './sqlLab';
+import messageToasts from '../../messageToasts/reducers/index';
+import common from './common';
+
+export default combineReducers({
+ sqlLab,
+ messageToasts,
+ common,
+});
diff --git a/superset/assets/src/SqlLab/reducers.js
b/superset/assets/src/SqlLab/reducers/sqlLab.js
similarity index 96%
rename from superset/assets/src/SqlLab/reducers.js
rename to superset/assets/src/SqlLab/reducers/sqlLab.js
index 87d0332..b8a27a9 100644
--- a/superset/assets/src/SqlLab/reducers.js
+++ b/superset/assets/src/SqlLab/reducers/sqlLab.js
@@ -1,11 +1,9 @@
-import { combineReducers } from 'redux';
import shortid from 'shortid';
import { t } from '@superset-ui/translation';
-import messageToasts from '../messageToasts/reducers';
import getInitialState from './getInitialState';
-import * as actions from './actions';
-import { now } from '../modules/dates';
+import * as actions from '../actions/sqlLab';
+import { now } from '../../modules/dates';
import {
addToObject,
alterInObject,
@@ -13,9 +11,9 @@ import {
removeFromArr,
getFromArr,
addToArr,
-} from '../reduxUtils';
+} from '../../reduxUtils';
-export const sqlLabReducer = function (state = {}, action) {
+export default function sqlLabReducer(state = {}, action) {
const actionHandlers = {
[actions.ADD_QUERY_EDITOR]() {
const tabHistory = state.tabHistory.slice();
@@ -276,9 +274,4 @@ export const sqlLabReducer = function (state = {}, action) {
return actionHandlers[action.type]();
}
return state;
-};
-
-export default combineReducers({
- sqlLab: sqlLabReducer,
- messageToasts,
-});
+}
diff --git a/superset/assets/src/reduxUtils.js
b/superset/assets/src/reduxUtils.js
index cc0b581..baaa05b 100644
--- a/superset/assets/src/reduxUtils.js
+++ b/superset/assets/src/reduxUtils.js
@@ -68,14 +68,16 @@ export function addToArr(state, arrKey, obj, prepend =
false) {
return Object.assign({}, state, newState);
}
-export function initEnhancer(persist = true) {
- let enhancer = persist ? compose(persistState()) : compose();
- if (process.env.WEBPACK_MODE === 'development') {
+export function initEnhancer(persist = true, persistConfig = {}) {
+ const { paths, config } = persistConfig;
+ const composeEnhancers = process.env.WEBPACK_MODE === 'development'
/* eslint-disable-next-line no-underscore-dangle */
- const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ||
compose;
- enhancer = persist ? composeEnhancers(persistState()) : composeEnhancers();
- }
- return enhancer;
+ ? (window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose)
+ : compose;
+
+ return persist
+ ? composeEnhancers(persistState(paths, config))
+ : composeEnhancers();
}
export function areArraysShallowEqual(arr1, arr2) {