blob: 2107a96a576b5f799f6a31b4fa48d818f04474cd [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {createMixin} from 'polymer-redux';
import {applyMiddleware, combineReducers, compose, createStore} from 'redux';
import thunk from 'redux-thunk';
import * as issue from './issue.js';
import * as project from './project.js';
import * as user from './user.js';
import * as ui from './ui.js';
// Actions
const RESET_STATE = 'RESET_STATE';
/* State Shape
{
issue: Object,
project: Object,
user: Object,
ui: Object,
}
*/
// Reducers
const reducer = combineReducers({
issue: issue.reducer,
project: project.reducer,
user: user.reducer,
ui: ui.reducer,
});
function rootReducer(state, action) {
if (action.type == RESET_STATE) {
state = undefined;
}
return reducer(state, action);
}
// Selectors
// Action Creators
export const resetState = () => ({type: RESET_STATE});
// Store
// For debugging with the Redux Devtools extension:
// https://chrome.google.com/webstore/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd/
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
export const store = createStore(rootReducer, composeEnhancers(
applyMiddleware(thunk)
));
export const ReduxMixin = createMixin(store);