All files / src/lib/core/theme theme.reducers.ts

100% Statements 10/10
100% Branches 0/0
100% Functions 3/3
100% Lines 9/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44            1x 1x   2x             1x               1x     1x 1x         1x         1x          
import { createReducer, on } from '@ngrx/store';
import { ThemeVariants } from '../../shared/theme';
import * as DefaultDarkTheme from '../../shared/theme/default-dark-theme.json';
import * as DefaultTheme from '../../shared/theme/default-theme.json';
import * as ThemeActions from './theme.actions';
 
const defaultTheme: ThemeVariants = DefaultTheme;
const defaultDarkTheme: ThemeVariants = DefaultDarkTheme;
 
const unwrap = (theme: any): ThemeVariants => theme.default;
 
export interface State {
  themes: { [name: string]: ThemeVariants };
  currentTheme: string;
}
 
export const initialState: State = {
  themes: {
    default: unwrap(defaultTheme),
    defaultDark: unwrap(defaultDarkTheme)
  },
  currentTheme: 'default'
};
 
export const reducer = createReducer(
  initialState,
  on(ThemeActions.add, (state, { name, theme }) => {
    const themes = { ...state.themes };
    themes[name] = {
      ...themes[name],
      ...theme
    };
 
    return {
      ...state,
      themes
    };
  }),
  on(ThemeActions.select, (state, { name }) => ({
    ...state,
    currentTheme: name
  }))
);