From 3820e01be69270683d3d3022669823a6e5df229b Mon Sep 17 00:00:00 2001 From: zv Date: Sun, 14 Jun 2026 11:18:23 +0200 Subject: [PATCH] fix: use custom language dropdown --- components/ui/language-toggle.tsx | 77 +++++++++++++++++++++++++++---- 1 file changed, 67 insertions(+), 10 deletions(-) diff --git a/components/ui/language-toggle.tsx b/components/ui/language-toggle.tsx index 2191868..30236d9 100644 --- a/components/ui/language-toggle.tsx +++ b/components/ui/language-toggle.tsx @@ -1,24 +1,81 @@ "use client"; +import { useEffect, useRef, useState } from "react"; import { ChevronDown, Languages } from "lucide-react"; import { useI18n, type Language } from "@/lib/i18n"; +const languageOptions: Language[] = ["pl", "en"]; + export function LanguageToggle() { const { language, setLanguage, t } = useI18n(); + const [open, setOpen] = useState(false); + const rootRef = useRef(null); + const labels: Record = { + pl: t("language.polish"), + en: t("language.english"), + }; + + useEffect(() => { + if (!open) return; + + function handlePointerDown(event: PointerEvent) { + if (!rootRef.current?.contains(event.target as Node)) setOpen(false); + } + + function handleKeyDown(event: KeyboardEvent) { + if (event.key === "Escape") setOpen(false); + } + + document.addEventListener("pointerdown", handlePointerDown); + window.addEventListener("keydown", handleKeyDown); + return () => { + document.removeEventListener("pointerdown", handlePointerDown); + window.removeEventListener("keydown", handleKeyDown); + }; + }, [open]); + return ( -