2025-02-04 10:05:30 +00:00
|
|
|
|
import { FC, useState } from "react";
|
|
|
|
|
|
import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover";
|
|
|
|
|
|
import { cn } from "@/lib/utils";
|
|
|
|
|
|
import { Language, useLangStore } from "@/store/lang";
|
|
|
|
|
|
|
|
|
|
|
|
interface Props {
|
|
|
|
|
|
className?: string;
|
2025-02-14 10:48:27 +00:00
|
|
|
|
light?: boolean;
|
2025-02-04 10:05:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export const langs = [
|
|
|
|
|
|
{
|
|
|
|
|
|
lang: Language.RU,
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
lang: Language.EN,
|
|
|
|
|
|
},
|
|
|
|
|
|
];
|
|
|
|
|
|
|
2025-02-14 10:48:27 +00:00
|
|
|
|
export const LangMenu: FC<Props> = ({ className, light = false }) => {
|
2025-02-04 10:05:30 +00:00
|
|
|
|
const lang = useLangStore((state) => state.lang);
|
|
|
|
|
|
const setLang = useLangStore((state) => state.setLang);
|
|
|
|
|
|
|
|
|
|
|
|
const [isOpen, setIsOpen] = useState(false);
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
|
<Popover open={isOpen} onOpenChange={() => setIsOpen(!isOpen)}>
|
2025-02-10 11:54:01 +00:00
|
|
|
|
<PopoverTrigger
|
2025-02-14 10:48:27 +00:00
|
|
|
|
className={cn(
|
|
|
|
|
|
"flex text-white items-center gap-2",
|
|
|
|
|
|
light ? "text-white" : "text-black",
|
|
|
|
|
|
className
|
|
|
|
|
|
)}
|
2025-02-10 11:54:01 +00:00
|
|
|
|
>
|
2025-02-08 07:50:39 +00:00
|
|
|
|
<img src={lang === Language.RU ? "/ru.svg" : "/english.svg"} alt="" />
|
2025-02-04 10:05:30 +00:00
|
|
|
|
{lang === Language.RU ? "Ру" : "En"}
|
|
|
|
|
|
<svg
|
|
|
|
|
|
width="20"
|
|
|
|
|
|
height="20"
|
|
|
|
|
|
viewBox="0 0 20 20"
|
|
|
|
|
|
fill="none"
|
|
|
|
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
|
|
|
|
>
|
|
|
|
|
|
<path
|
|
|
|
|
|
fill-rule="evenodd"
|
|
|
|
|
|
clip-rule="evenodd"
|
|
|
|
|
|
d="M4.23021 8.01443C4.35919 7.70304 4.66305 7.5 5.00011 7.5H15.0001C15.3372 7.5 15.641 7.70304 15.77 8.01443C15.899 8.32583 15.8277 8.68426 15.5894 8.92259L10.5894 13.9226C10.2639 14.248 9.73629 14.248 9.41085 13.9226L4.41085 8.92259C4.17252 8.68426 4.10122 8.32583 4.23021 8.01443ZM7.01195 9.16667L10.0001 12.1548L12.9883 9.16667H7.01195Z"
|
2025-02-14 10:48:27 +00:00
|
|
|
|
fill={light ? "#fff" : "#000"}
|
2025-02-04 10:05:30 +00:00
|
|
|
|
/>
|
|
|
|
|
|
</svg>
|
|
|
|
|
|
</PopoverTrigger>
|
|
|
|
|
|
|
|
|
|
|
|
<PopoverContent className="flex flex-col gap-6">
|
|
|
|
|
|
{langs
|
|
|
|
|
|
.filter((item) => item.lang !== lang)
|
|
|
|
|
|
.map((item, i) => (
|
|
|
|
|
|
<div
|
|
|
|
|
|
onClick={() => {
|
|
|
|
|
|
setLang(item.lang);
|
|
|
|
|
|
setIsOpen(false);
|
|
|
|
|
|
}}
|
|
|
|
|
|
key={i}
|
2025-02-10 11:54:01 +00:00
|
|
|
|
className="flex gap-3 py-1 items-center cursor-pointer"
|
2025-02-04 10:05:30 +00:00
|
|
|
|
>
|
|
|
|
|
|
<img
|
2025-02-09 13:27:23 +00:00
|
|
|
|
src={item.lang === Language.RU ? "/ru.svg" : "/english.svg"}
|
2025-02-04 10:05:30 +00:00
|
|
|
|
alt="flag"
|
|
|
|
|
|
/>
|
|
|
|
|
|
<h5>{item.lang === Language.RU ? "Русский" : "English"}</h5>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
))}
|
|
|
|
|
|
</PopoverContent>
|
|
|
|
|
|
</Popover>
|
|
|
|
|
|
);
|
|
|
|
|
|
};
|