import { KeyValuePair } from '../key-value-pair.model'; import { CSSVariableAction, CSSVariableActionTypes, } from './css-variable.actions'; export interface CSSVariablesState { [name: string]: string; } const initialState: CSSVariablesState = Object.create({}); /** * Reducer that handles the state of CSS variables in the store * @param state The current state of the store * @param action The action to apply onto the current state of the store */ export function cssVariablesReducer(state = initialState, action: CSSVariableAction): CSSVariablesState { switch (action.type) { case CSSVariableActionTypes.ADD: { const variable = action.payload; return Object.assign({}, state, { [variable.name]: variable.value }); } case CSSVariableActionTypes.ADD_ALL: { const variables = action.payload; return Object.assign({}, state, ...variables.map(({ key, value }: KeyValuePair<string, string>) => {return { [key]: value };})); } case CSSVariableActionTypes.CLEAR: { return initialState; } default: { return state; } } }