'use client' import { useCallback, useEffect, useRef, useState } from 'react' import { useRouter } from 'next/navigation' import { maps } from 'hue-map' import { Settings as SettingsIcon } from 'lucide-react' import SelectField from '/src/components/SelectField/SelectField' import ToggleField from '/src/components/ToggleField/ToggleField' import { useTranslation } from '/src/i18n/client' import { languageDetails } from '/src/i18n/options' import { useStore } from '/src/stores' import useSettingsStore from '/src/stores/settingsStore' import { makeClass, unhyphenate } from '/src/utils' import styles from './Settings.module.scss' const Settings = () => { const { t, i18n } = useTranslation('common') const router = useRouter() const store = useStore(useSettingsStore, state => state) const modalRef = useRef(null) const [isOpen, _setIsOpen] = useState(false) const setIsOpen = useCallback((shouldOpen: boolean) => { if (shouldOpen) { modalRef.current?.showModal() _setIsOpen(true) } else { modalRef.current?.close() _setIsOpen(false) } }, []) // Use user theme preference useEffect(() => { document.body.classList.toggle('light', store?.theme === 'Light') document.body.classList.toggle('dark', store?.theme === 'Dark') }, [store?.theme]) return <> _setIsOpen(false)} onClick={() => modalRef.current?.close()} >
e.stopPropagation()}> {t('options.name')} {store && <> store?.setWeekStart(value === 'Sunday' ? 0 : 1)} /> store?.setTimeFormat(value)} /> store?.setTheme(value)} /> [ palette, unhyphenate(palette) ])), }} isSmall value={store?.colormap} onChange={event => store?.setColormap(event.target.value)} /> store?.setHighlight(value === 'On')} /> [id, details.name])), ...process.env.NODE_ENV !== 'production' && { 'cimode': 'DEV' }, }} isSmall value={i18n.language} onChange={e => i18n.changeLanguage(e.target.value).then(() => router.refresh())} /> }
} export default Settings