Refactor reducers

This commit is contained in:
Thomas Nordquist
2019-04-10 19:47:55 +02:00
parent a2fae27919
commit b6d6575543
2 changed files with 68 additions and 80 deletions

View File

@@ -0,0 +1,65 @@
import { Action, Reducer } from 'redux'
import { Record } from 'immutable'
import { trackEvent } from '../utils/tracking'
export enum ActionTypes {
showUpdateNotification = 'SHOW_UPDATE_NOTIFICATION',
showUpdateDetails = 'SHOW_UPDATE_DETAILS',
showError = 'SHOW_ERROR',
showNotification = 'SHOW_NOTIFICATION',
didLaunch = 'DID_LAUNCH',
toggleSettingsVisibility = 'TOGGLE_SETTINGS_VISIBILITY',
}
export interface GlobalAction extends Action {
type: ActionTypes,
showUpdateNotification?: boolean
showUpdateDetails?: boolean
error?: string
notification?: string
settingsVisible: boolean
}
export interface GlobalState {
showUpdateNotification?: boolean
showUpdateDetails: boolean
error?: string
notification?: string
launching: boolean
}
const initialGlobalState = Record<GlobalState>({
showUpdateNotification: false,
showUpdateDetails: false,
error: undefined,
notification: undefined,
launching: true,
})
export const globalState: Reducer<Record<GlobalState>, GlobalAction> = (state = initialGlobalState(), action): Record<GlobalState> => {
trackEvent(action.type)
console.log(action.type)
switch (action.type) {
case ActionTypes.showUpdateNotification:
return state.set('showUpdateNotification', action.showUpdateNotification)
case ActionTypes.showError:
return state.set('error', action.error)
case ActionTypes.showNotification:
return state.set('notification', action.notification)
case ActionTypes.didLaunch:
return state.set('launching', false)
case ActionTypes.showUpdateDetails:
if (action.showUpdateDetails === undefined) {
return state
}
return state.set('showUpdateDetails', action.showUpdateDetails)
default:
return state
}
}

View File

@@ -1,28 +1,12 @@
import { Action, combineReducers, Reducer } from 'redux' import { combineReducers } from 'redux'
import { connectionManagerReducer, ConnectionManagerState } from './ConnectionManager' import { connectionManagerReducer, ConnectionManagerState } from './ConnectionManager'
import { connectionReducer, ConnectionState } from './Connection' import { connectionReducer, ConnectionState } from './Connection'
import { GlobalState, globalState } from './Global'
import { publishReducer, PublishState } from './Publish' import { publishReducer, PublishState } from './Publish'
import { Record } from 'immutable' import { Record } from 'immutable'
import { settingsReducer, SettingsState } from './Settings' import { settingsReducer, SettingsState } from './Settings'
import { trackEvent } from '../utils/tracking'
import { treeReducer, TreeState } from './Tree' import { treeReducer, TreeState } from './Tree'
export enum ActionTypes {
showUpdateNotification = 'SHOW_UPDATE_NOTIFICATION',
showUpdateDetails = 'SHOW_UPDATE_DETAILS',
showError = 'SHOW_ERROR',
showNotification = 'SHOW_NOTIFICATION',
didLaunch = 'DID_LAUNCH',
}
export interface CustomAction extends Action {
type: ActionTypes,
showUpdateNotification?: boolean
showUpdateDetails?: boolean
error?: string
notification?: string
}
export interface AppState { export interface AppState {
globalState: GlobalState globalState: GlobalState
tree: TreeState tree: TreeState
@@ -32,66 +16,7 @@ export interface AppState {
connectionManager: ConnectionManagerState connectionManager: ConnectionManagerState
} }
export interface GlobalState { export default combineReducers({
showUpdateNotification?: boolean
showUpdateDetails: boolean
error?: string
notification?: string
launching: boolean
}
const initialGlobalState: GlobalState = {
showUpdateDetails: false,
launching: true,
}
const globalState: Reducer<GlobalState | undefined, CustomAction> = (state = initialGlobalState, action) => {
if (!state) {
throw Error('No initial state')
}
trackEvent(action.type)
console.log(action.type)
switch (action.type) {
case ActionTypes.showUpdateNotification:
return {
...state,
showUpdateNotification: action.showUpdateNotification,
}
case ActionTypes.showError:
return {
...state,
error: action.error,
}
case ActionTypes.showNotification:
console.log(action)
return {
...state,
notification: action.notification,
}
case ActionTypes.didLaunch:
return {
...state,
launching: false,
}
case ActionTypes.showUpdateDetails:
if (action.showUpdateDetails === undefined) {
return state
}
return {
...state,
showUpdateDetails: action.showUpdateDetails,
}
default:
return state
}
}
const reducer = combineReducers({
globalState, globalState,
publish: publishReducer, publish: publishReducer,
connection: connectionReducer, connection: connectionReducer,
@@ -99,5 +24,3 @@ const reducer = combineReducers({
tree: treeReducer, tree: treeReducer,
connectionManager: connectionManagerReducer, connectionManager: connectionManagerReducer,
}) })
export default reducer