Files
Verso/services/web/frontend/js/shared/components/language-picker.tsx
T
claudeandClaude Sonnet 4.6 81c1fc92d1
Build and Deploy Verso / deploy (push) Successful in 10m8s
fix: remove data-bs-toggle from LanguagePicker dropdown toggle
Bootstrap vanilla JS and react-bootstrap were both handling the dropdown,
causing the toggle to be unresponsive. react-bootstrap manages its own
state and does not need this attribute.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 14:15:36 +00:00

65 lines
2.0 KiB
TypeScript

import React from 'react'
import {
Dropdown,
DropdownItem,
DropdownMenu,
DropdownToggle,
DropdownHeader,
} from './dropdown/dropdown-menu'
import { useTranslation } from 'react-i18next'
import getMeta from '@/utils/meta'
import MaterialIcon from '@/shared/components/material-icon'
function LanguagePicker({ showHeader } = { showHeader: false }) {
const { t } = useTranslation()
const currentLangCode = getMeta('ol-i18n').currentLangCode
const footerMeta = getMeta('ol-footer')
const translatedLanguages = footerMeta?.translatedLanguages
const availableLanguages: string[] = footerMeta?.availableLanguages ?? []
const currentUrl = window.location.pathname
return (
<Dropdown drop="up">
<DropdownToggle
id="language-picker-toggle"
aria-label={t('select_a_language')}
className="btn-inline-link"
variant="link"
>
<MaterialIcon type="translate" />
&nbsp;
<span className="language-picker-text">
{translatedLanguages?.[currentLangCode] ?? currentLangCode}
</span>
</DropdownToggle>
<DropdownMenu
className="dropdown-menu-sm-width"
aria-labelledby="language-picker-toggle"
>
{showHeader ? <DropdownHeader>{t('language')}</DropdownHeader> : null}
{availableLanguages
.filter(lng => translatedLanguages?.[lng])
.map(lng => {
const isActive = lng === currentLangCode
return (
<li role="none" key={lng} translate="no">
<DropdownItem
href={`/set-language?lng=${encodeURIComponent(lng)}&return_to=${encodeURIComponent(currentUrl)}`}
active={isActive}
aria-current={isActive ? 'true' : false}
trailingIcon={isActive ? 'check' : null}
>
{translatedLanguages![lng]}
</DropdownItem>
</li>
)
})}
</DropdownMenu>
</Dropdown>
)
}
export default LanguagePicker