import { combineReducers } from 'redux'; import { List } from 'immutable'; import { CHANGE_THEME, CHANGE_USER_NAME, NEW_DEVICE_DATA, START_SESSION, STOP_SESSION, RESET_DEVICE_DATA } from './ActionCreators'; const INITIAL_SETTINGS = { theme: "hot", username: "", deviceURL: "http://192.168.178.107", peaksPerLap: 30, // advanced peakDetector: 'SIMPLE', // either 'SIMPLE' or 'ZSCORE' peakDetectorSimpleThreshold: 2500, peakDetectorZScoreLag: 8, // peak detector z-score values peakDetectorZScoreThreshold: 2, peakDetectorZScoreInfluence: 0.1, }; const INITIAL_CURRENT_SESSION = { running: false, sessionId: 0, rawData: List(), analysis: { 'peaks': List(), 'totalTime': null, 'activeTime': null, 'totalMomentum': null, 'peakFrequency': null, 'peakMax': null, // windowed quantities 'momentumWindow': null, 'frequencyWindow': null, 'peakMaxWindow': null, } }; const settingsReducer = (state = INITIAL_SETTINGS, action) => { switch (action.type) { case CHANGE_THEME: return { ...state, theme: action.newThemeName }; case CHANGE_USER_NAME: return { ...state, username: action.newUsername }; default: return state } }; const currentSessionReducer = (state = INITIAL_CURRENT_SESSION, action) => { switch (action.type) { case START_SESSION: return { running: true, rawData: List(), analysis: INITIAL_CURRENT_SESSION.analysis }; case STOP_SESSION: return { running: false, rawData: List(), analysis: INITIAL_CURRENT_SESSION.analysis }; case NEW_DEVICE_DATA: return { running: action.data.size > 0, sessionId: action.sessionId, rawData: action.data, analysis: { ...state.analysis, ...action.analysis }, } case RESET_DEVICE_DATA: return INITIAL_CURRENT_SESSION default: return state } }; export default combineReducers({ settings: settingsReducer, session: currentSessionReducer, });