"use client" import { createContext, useCallback, useEffect, useState } from "react" import { useCookie } from "react-use" import type { LocaleType, SettingsType } from "@/types" import type { ReactNode } from "react" export const defaultSettings: SettingsType = { theme: "zinc", mode: "dark", radius: 0.5, layout: "vertical", locale: "de", } export const SettingsContext = createContext< | { settings: SettingsType updateSettings: (newSettings: SettingsType) => void resetSettings: () => void } | undefined >(undefined) export function SettingsProvider({ locale, children, }: { locale: LocaleType children: ReactNode }) { const [storedSettings, setStoredSettings, deleteStoredSettings] = useCookie("settings") const [settings, setSettings] = useState(null) useEffect(() => { if (storedSettings) { setSettings(JSON.parse(storedSettings)) } else { setSettings({ ...defaultSettings, locale }) } }, [storedSettings, locale]) const updateSettings = useCallback( (newSettings: SettingsType) => { setStoredSettings(JSON.stringify(newSettings)) setSettings(newSettings) }, [setStoredSettings] ) const resetSettings = useCallback(() => { deleteStoredSettings() setSettings(defaultSettings) }, [deleteStoredSettings]) // Render children only when settings are ready if (!settings) { return null } return ( {children} ) }