File

projects/wvr-elements/src/lib/core/theme/theme.reducers.ts

Index

Properties

Properties

currentTheme
currentTheme: string
Type : string
themes
themes: literal type
Type : literal type
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
  }))
);

results matching ""

    No results matching ""