mirror of https://github.com/msgbyte/tailchat
				
				
				
			refactor: 修改配色方案逻辑,为之后的自定义主题插件留位置
							parent
							
								
									5db0a5410d
								
							
						
					
					
						commit
						747cca8e83
					
				@ -0,0 +1,32 @@
 | 
			
		||||
import React, { useContext } from 'react';
 | 
			
		||||
import { useStorage } from 'tailchat-shared';
 | 
			
		||||
 | 
			
		||||
const ColorSchemeContext = React.createContext<{
 | 
			
		||||
  /**
 | 
			
		||||
   * 'dark' | 'light' | 'auto' | string
 | 
			
		||||
   */
 | 
			
		||||
  colorScheme: string;
 | 
			
		||||
  setColorScheme: (colorScheme: string) => void;
 | 
			
		||||
}>({
 | 
			
		||||
  colorScheme: 'dark',
 | 
			
		||||
  setColorScheme: () => {},
 | 
			
		||||
});
 | 
			
		||||
ColorSchemeContext.displayName = 'ColorSchemeContext';
 | 
			
		||||
 | 
			
		||||
export const ColorSchemeContextProvider: React.FC = React.memo((props) => {
 | 
			
		||||
  const [colorScheme = 'dark', { save: setColorScheme }] = useStorage(
 | 
			
		||||
    'colorScheme',
 | 
			
		||||
    'dark'
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <ColorSchemeContext.Provider value={{ colorScheme, setColorScheme }}>
 | 
			
		||||
      {props.children}
 | 
			
		||||
    </ColorSchemeContext.Provider>
 | 
			
		||||
  );
 | 
			
		||||
});
 | 
			
		||||
ColorSchemeContextProvider.displayName = 'ColorSchemeContextProvider';
 | 
			
		||||
 | 
			
		||||
export function useColorScheme() {
 | 
			
		||||
  return useContext(ColorSchemeContext);
 | 
			
		||||
}
 | 
			
		||||
@ -1,26 +0,0 @@
 | 
			
		||||
import React, { useContext } from 'react';
 | 
			
		||||
import { useStorage } from 'tailchat-shared';
 | 
			
		||||
 | 
			
		||||
const DarkModeContext = React.createContext<{
 | 
			
		||||
  darkMode: boolean;
 | 
			
		||||
  setDarkMode: (isDarkMode: boolean) => void;
 | 
			
		||||
}>({
 | 
			
		||||
  darkMode: true,
 | 
			
		||||
  setDarkMode: () => {},
 | 
			
		||||
});
 | 
			
		||||
DarkModeContext.displayName = 'DarkModeContext';
 | 
			
		||||
 | 
			
		||||
export const DarkModeContextProvider: React.FC = React.memo((props) => {
 | 
			
		||||
  const [darkMode = true, { save: setDarkMode }] = useStorage('darkMode', true);
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <DarkModeContext.Provider value={{ darkMode, setDarkMode }}>
 | 
			
		||||
      {props.children}
 | 
			
		||||
    </DarkModeContext.Provider>
 | 
			
		||||
  );
 | 
			
		||||
});
 | 
			
		||||
DarkModeContextProvider.displayName = 'DarkModeContextProvider';
 | 
			
		||||
 | 
			
		||||
export function useDarkMode() {
 | 
			
		||||
  return useContext(DarkModeContext);
 | 
			
		||||
}
 | 
			
		||||
@ -1,3 +1,5 @@
 | 
			
		||||
export const t = (key: string) => {
 | 
			
		||||
  return key;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export function onLanguageChange() {}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,14 @@
 | 
			
		||||
import { parseColorScheme } from '../color-scheme-helper';
 | 
			
		||||
 | 
			
		||||
describe('parseColorScheme', () => {
 | 
			
		||||
  test.each([
 | 
			
		||||
    ['dark', { isDarkMode: true, extraSchemeName: null }],
 | 
			
		||||
    ['light', { isDarkMode: false, extraSchemeName: null }],
 | 
			
		||||
    ['auto', { isDarkMode: true, extraSchemeName: null }],
 | 
			
		||||
    ['dark+miku', { isDarkMode: true, extraSchemeName: 'theme-miku' }],
 | 
			
		||||
    ['light+miku', { isDarkMode: false, extraSchemeName: 'theme-miku' }],
 | 
			
		||||
    ['miku', { isDarkMode: true, extraSchemeName: 'theme-miku' }],
 | 
			
		||||
  ])('%s', (input, output) => {
 | 
			
		||||
    expect(parseColorScheme(input)).toEqual(output);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue