import {useTheme} from "next-themes"; import React, {useEffect, useState} from "react"; import {Button, Card, Divider, Select, Selection, SelectItem} from "@heroui/react"; import {themes} from "Frontend/theming/themes"; import {Theme} from "Frontend/theming/theme"; import ThemePreview from "Frontend/components/theming/ThemePreview"; import {toTitleCase} from "Frontend/util/utils"; import {useUserPreferenceService} from "Frontend/util/user-preference-service"; export function ThemeSelector() { const {theme, setTheme} = useTheme(); const [selectedTheme, setSelectedTheme] = useState(theme?.substring(0, theme?.lastIndexOf("-"))); const [selectedMode, setSelectedMode] = useState(); const userPreferenceService = useUserPreferenceService(); useEffect(() => { if (!selectedMode) setSelectedMode(new Set([theme?.split('-').pop() ?? "dark"])); }, [theme]); useEffect(updateTheme, [selectedTheme, selectedMode]); function updateTheme() { if (selectedMode instanceof Set) { let theme = `${selectedTheme}-${selectedMode.values().next().value}`; setTheme(theme); userPreferenceService.set("preferred-theme", theme).catch(console.error); } } return (
{ //min-w-[468px] themes.map(((t: Theme) => (
setSelectedTheme(t.name)}>
))) }

Preview for theme "{toTitleCase(theme!.replaceAll("-", " "))}"

) }