You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
import { Dispatch } from '@reduxjs/toolkit';
 | 
						|
import { applyTheme } from '../state/ducks/theme';
 | 
						|
import { classicDark, classicLight, oceanDark, oceanLight } from '.';
 | 
						|
import { convertThemeStateToName, THEMES, ThemeStateType } from './constants/colors';
 | 
						|
import { loadThemeColors } from './variableColors';
 | 
						|
import { findPrimaryColorId, switchPrimaryColorTo } from './switchPrimaryColor';
 | 
						|
 | 
						|
type SwitchThemeProps = {
 | 
						|
  theme: ThemeStateType;
 | 
						|
  mainWindow?: boolean;
 | 
						|
  usePrimaryColor?: boolean;
 | 
						|
  dispatch?: Dispatch;
 | 
						|
};
 | 
						|
 | 
						|
export async function switchThemeTo(props: SwitchThemeProps) {
 | 
						|
  const { theme, mainWindow, usePrimaryColor, dispatch } = props;
 | 
						|
  let newTheme: ThemeStateType | null = null;
 | 
						|
 | 
						|
  switch (theme) {
 | 
						|
    case 'classic-dark':
 | 
						|
      loadThemeColors(classicDark);
 | 
						|
      newTheme = 'classic-dark';
 | 
						|
      break;
 | 
						|
    case 'classic-light':
 | 
						|
      loadThemeColors(classicLight);
 | 
						|
      newTheme = 'classic-light';
 | 
						|
      break;
 | 
						|
    case 'ocean-dark':
 | 
						|
      loadThemeColors(oceanDark);
 | 
						|
      newTheme = 'ocean-dark';
 | 
						|
      break;
 | 
						|
    case 'ocean-light':
 | 
						|
      loadThemeColors(oceanLight);
 | 
						|
      newTheme = 'ocean-light';
 | 
						|
      break;
 | 
						|
    default:
 | 
						|
      window.log.warn('Unsupported theme: ', theme);
 | 
						|
  }
 | 
						|
 | 
						|
  if (newTheme) {
 | 
						|
    if (mainWindow) {
 | 
						|
      await window.setTheme(theme);
 | 
						|
    }
 | 
						|
 | 
						|
    if (dispatch) {
 | 
						|
      dispatch(applyTheme(newTheme));
 | 
						|
      if (usePrimaryColor) {
 | 
						|
        // Set primary color after the theme is loaded so that it's not overwritten
 | 
						|
        const primaryColor = window.Events.getPrimaryColorSetting();
 | 
						|
        await switchPrimaryColorTo(primaryColor, dispatch);
 | 
						|
      } else {
 | 
						|
        // By default, when we change themes we want to reset the primary color
 | 
						|
        const defaultPrimaryColor = findPrimaryColorId(
 | 
						|
          THEMES[convertThemeStateToName(newTheme)].PRIMARY
 | 
						|
        );
 | 
						|
        if (defaultPrimaryColor) {
 | 
						|
          await switchPrimaryColorTo(defaultPrimaryColor, dispatch);
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |