From e49daa4deeadf74cb0737501ed64bc41ba7a56d9 Mon Sep 17 00:00:00 2001 From: Daniel Kos Date: Sun, 16 Sep 2018 22:35:00 +0200 Subject: [PATCH] Improved reducer state size Feature #14186 Arvados-DCO-1.1-Signed-off-by: Daniel Kos --- .../progress-indicator-reducer.ts | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/store/progress-indicator/progress-indicator-reducer.ts b/src/store/progress-indicator/progress-indicator-reducer.ts index 190ad13f..f6a73472 100644 --- a/src/store/progress-indicator/progress-indicator-reducer.ts +++ b/src/store/progress-indicator/progress-indicator-reducer.ts @@ -4,24 +4,22 @@ import { ProgressIndicatorAction, progressIndicatorActions } from "~/store/progress-indicator/progress-indicator-actions"; -export interface ProgressIndicatorState { - [key: string]: { - working: boolean - }; -} +export type ProgressIndicatorState = { id: string, working: boolean }[]; -const initialState: ProgressIndicatorState = { -}; +const initialState: ProgressIndicatorState = []; export const progressIndicatorReducer = (state: ProgressIndicatorState = initialState, action: ProgressIndicatorAction) => { + const startWorking = (id: string) => state.find(p => p.working) ? state : state.concat({ id, working: true }); + const stopWorking = (id: string) => state.filter(p => p.id !== id); + return progressIndicatorActions.match(action, { - START: id => ({ ...state, [id]: { working: true } }), - STOP: id => ({ ...state, [id]: { working: false } }), - TOGGLE: ({ id, working }) => ({ ...state, [id]: { working }}), + START: id => startWorking(id), + STOP: id => stopWorking(id), + TOGGLE: ({ id, working }) => working ? startWorking(id) : stopWorking(id), default: () => state, }); }; export function isSystemWorking(state: ProgressIndicatorState): boolean { - return Object.keys(state).reduce((working, k) => working ? true : state[k].working, false); + return state.length > 0; } -- 2.30.2