import { useUpdateTheme } from "../pages/_app"; import { useContext, useState } from 'react'; import { ThemeContext, DefaultTheme } from "styled-components"; import { darkTheme, lightTheme } from './themes'; import { ThemeDropDown, ThemeDropDownButton, ThemeDropDownOption, ThemeDropDownOptions } from "./styles/themedropdown"; import Themes from '../public/data/themes.json'; export const StyleSelector = () => { const themes = Themes.themes; const updateTheme = useUpdateTheme(); const currentTheme = useContext(ThemeContext); const [selectedTheme, setSelectedTheme] = useState(themes[currentTheme.themeId]); if(currentTheme !== selectedTheme) { setSelectedTheme(currentTheme); } const updateThemeWithStorage = (newTheme: DefaultTheme) => { if (newTheme.themeId === lightTheme.themeId) { updateLightTheme(newTheme); } else { setSelectedTheme(newTheme); localStorage.setItem("theme", newTheme.themeId.toString()); updateTheme(newTheme); } } const updateLightTheme = (newTheme: DefaultTheme) => { if (confirm("Really switch to Light Mode?")) { setSelectedTheme(newTheme); localStorage.setItem("theme", newTheme.themeId.toString()); updateTheme(newTheme) } } const [visible, setVisible] = useState(false); function handleBlur(event:any) { if (!event.currentTarget.contains(event.relatedTarget)) { setVisible(false); } } return ( handleBlur(event)}> setVisible(visible => !visible)}>{selectedTheme.themeName} {themes.map((theme) => ( updateThemeWithStorage(theme)}> {theme.themeName} ))} ); } export const StyleSelectorPlaceholder = () => { return ( ) } export function getTheme(themeId: number, themes: DefaultTheme[]): DefaultTheme { let retTheme: DefaultTheme = darkTheme; themes.forEach((theme) => { if (theme.themeId === themeId) { retTheme = theme}; }) return retTheme; } export default StyleSelector;