Refactor reducers
This commit is contained in:
65
app/src/reducers/Global.ts
Normal file
65
app/src/reducers/Global.ts
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
|
||||||
|
|||||||
Reference in New Issue
Block a user