/** * Copyright (c) 2017 Tomek Wójcik * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ import underscore from "underscore"; import {PLAYER_STATS_ACTIONS} from "../lib/defs"; const DEFAULT_STATE = { mode: "session", sessionWinsChartData: { categories: [], series: [] }, mapWinsChartData: { categories: [], series: [] }, sessionAccuracyChartData: { categories: [], series: [] }, mapAccuracyChartData: { categories: [], series: [] } }; const processChartData = (data, mode, kind) => { let parsedData = { categories: [], series: [] }; if (mode == "session") { parsedData.categories = data.dates; } else { parsedData.categories = data.maps; } let key = mode; if (kind == "wins") { key = key + "WinsChartData"; parsedData.series = [ {"name": "Wins", "data": data.wins}, {"name": "Losses", "data": data.losses} ]; } else if (kind == "accuracy") { key = key + "AccuracyChartData"; parsedData.series = data.series; } let newState = {}; newState[key] = parsedData; return newState; }; const playerStatsReducer = (state = DEFAULT_STATE, action) => { switch (action.type) { case PLAYER_STATS_ACTIONS.CLEANUP: return underscore.clone(DEFAULT_STATE); case PLAYER_STATS_ACTIONS.SET_MODE: return underscore.extendOwn({}, state, { mode: action.mode }); case PLAYER_STATS_ACTIONS.LOAD_CHART_DATA: return state; case PLAYER_STATS_ACTIONS.PARSE_CHART_DATA: return underscore.extendOwn( {}, state, processChartData(action.data, action.mode, action.kind) ); default: return state; } }; export default playerStatsReducer;