57 lines
1.4 KiB
TypeScript
57 lines
1.4 KiB
TypeScript
"use client"
|
|
import { useState } from "react"
|
|
|
|
import { Lang, languages } from "@/constants/languages"
|
|
|
|
import styles from "./mobile.module.css"
|
|
|
|
import type { LanguageSwitcherProps } from "@/types/components/current/languageSwitcher"
|
|
|
|
export default function Mobile({
|
|
currentLanguage,
|
|
urlObject,
|
|
}: LanguageSwitcherProps) {
|
|
const [isOpen, setIsOpen] = useState(false)
|
|
|
|
function toggleOpen() {
|
|
setIsOpen((prevIsOpen) => !prevIsOpen)
|
|
}
|
|
const urls = Object.keys(urlObject)
|
|
|
|
if (urls.length <= 1 && urls[0] === currentLanguage) {
|
|
return (
|
|
<div className={styles.languageSwitcher}>
|
|
{languages[currentLanguage]}{" "}
|
|
</div>
|
|
)
|
|
}
|
|
|
|
return (
|
|
<div>
|
|
<button
|
|
aria-pressed="false"
|
|
className={styles.languageSwitcher}
|
|
onClick={toggleOpen}
|
|
>
|
|
{languages[currentLanguage]}{" "}
|
|
<span className={`${styles.arrow} ${isOpen ? styles.open : ""}`}></span>
|
|
<span className={styles.hiddenAccessible}>Choose language</span>
|
|
</button>
|
|
<ul className={`${styles.dropdown} ${isOpen ? styles.isOpen : ""}`}>
|
|
{urls.map((key) => {
|
|
const url = urlObject[key as Lang]?.url
|
|
if (url) {
|
|
return (
|
|
<li key={key} className={styles.li}>
|
|
<a href={url} className={styles.link}>
|
|
{languages[key as Lang]}
|
|
</a>
|
|
</li>
|
|
)
|
|
}
|
|
})}
|
|
</ul>
|
|
</div>
|
|
)
|
|
}
|