1
0
Fork 0

Migrate Traefik Proxy dashboard UI to React

This commit is contained in:
Gina A. 2025-05-28 11:26:04 +02:00 committed by GitHub
parent 4790e4910f
commit f16fff577a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
324 changed files with 28303 additions and 19567 deletions

View file

@ -0,0 +1,49 @@
import { useMemo } from 'react'
import { useLocalStorage } from 'usehooks-ts'
const SYSTEM = 'system'
const DARK = 'dark'
const LIGHT = 'light'
type ThemeOptions = 'system' | 'dark' | 'light'
const THEME_OPTIONS: ThemeOptions[] = [SYSTEM, DARK, LIGHT]
type UseThemeRes = {
selectedTheme: ThemeOptions
appliedTheme: ThemeOptions
setTheme: () => void
}
export const useTheme = (): UseThemeRes => {
const [selectedTheme, setSelectedTheme] = useLocalStorage<ThemeOptions>('selected-theme', SYSTEM)
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches
const appliedTheme = useMemo(() => {
if (selectedTheme === SYSTEM) {
if (prefersDark) return DARK
return LIGHT
}
return selectedTheme
}, [selectedTheme, prefersDark])
return {
selectedTheme,
appliedTheme,
setTheme: () => {
setSelectedTheme((curr: ThemeOptions): ThemeOptions => {
const currIdx = THEME_OPTIONS.indexOf(curr)
const nextIdx = currIdx + 1
if (nextIdx === THEME_OPTIONS.length) return SYSTEM
return THEME_OPTIONS[nextIdx]
})
},
}
}
export const useIsDarkMode = () => {
const { appliedTheme } = useTheme()
return appliedTheme === DARK
}