// * Packages import { SettingsIcon, MoonIcon, SunIcon } from "lucide-react"; import { route } from "ziggy-js"; import { FormEvent } from "react"; import { useForm, usePage } from "@inertiajs/react"; // * Components shadcn import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; // * Other import { AppEnv, Theme } from "@/back/types/global"; import { useTheme } from "@/back/providers/ThemeProvider"; import useTrans from "@/hooks/use-translations"; import { cn, GetTranslation } from "@/lib/utils"; type AppSettingsProps = { className?: string; }; export default function AppSettings({ className = "" }: AppSettingsProps) { const { locale, locales } = usePage().props.appEnv as AppEnv; const { setTheme, theme } = useTheme(); const { post, setData } = useForm({ lang: "system", }); const submit = (e: FormEvent) => { e.preventDefault(); post(route(`back.lang.set`)); }; const mods = [ { name: useTrans("back.light"), theme: "light", icon: SunIcon, }, { name: useTrans("back.dark"), theme: "dark", icon: MoonIcon, }, ]; const languages = [ { name: useTrans("Français"), locale: "fr", flag: "fr", }, { name: useTrans("English"), locale: "en", flag: "us", }, { name: useTrans("Spain"), locale: "es", flag: "es", }, { name: useTrans("Germany"), locale: "de", flag: "de", }, ]; const allowedLocales = languages.filter((language) => locales.includes(language.locale), ); return (

{GetTranslation("back.mods")}

{mods.map((mod) => { return ( e.preventDefault()} > ); })}
{allowedLocales.length > 1 && ( <>

{GetTranslation("back.languages")}

{allowedLocales.map((language) => { return ( e.preventDefault()} > ); })}
)}
); }