mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-25 10:10:08 +02:00
* Remove icons folder * Create folders for badge, button, and dropdown components * Remove Bootstrap 5 from test * Rename `getBootstrap5Breakpoint` to `getBootstrapBreakpoint` * Cleanup and update BS 5 comments * Move components to the shared folder * Rename `tooltips-bs5` to `tooltip` * Remove `-bs5` suffix * Fix path * Delete BS3 version file * Rename `_form_marketing-bootstrap-5` to `_form_marketing` * Delete BS3 version file * Rename `_contact_general_modal-marketing-bootstrap-5` to `_contact_general_modal-marketing` * Delete BS3 version file * Rename `_contact_modal-marketing-bootstrap-5` to `_contact_modal-marketing` * Delete BS3 version file * Rename `thin-footer-bootstrap-5` to `thin-footer` * Delete BS3 version file * Rename `language-picker-bootstrap-5` to `language-picker` * Rename `fat-footer-react-bootstrap-5` to `fat-footer-react` * Delete BS3 version file * Rename `navbar-marketing-bootstrap-5` to `navbar-marketing` * Rename `navbar-marketing-react-bootstrap-5` to `navbar-marketing-react` * Delete BS3 version file * Rename `layout-website-redesign-cms-bootstrap-5` to `layout-website-redesign-cms` * Source format * Fix path GitOrigin-RevId: cf0f5db7c84cf545c69213dcc271d9ff17fe5db7
70 lines
2.2 KiB
TypeScript
70 lines
2.2 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 translatedLanguages = getMeta('ol-footer').translatedLanguages
|
|
const subdomainLang = getMeta('ol-footer').subdomainLang
|
|
const currentUrlWithQueryParams = window.location.pathname
|
|
|
|
return (
|
|
<Dropdown drop="up">
|
|
<DropdownToggle
|
|
id="language-picker-toggle"
|
|
aria-label={t('select_a_language')}
|
|
data-bs-toggle="dropdown"
|
|
className="btn-inline-link"
|
|
variant="link"
|
|
>
|
|
<MaterialIcon type="translate" />
|
|
|
|
<span className="language-picker-text">
|
|
{translatedLanguages?.[currentLangCode]}
|
|
</span>
|
|
</DropdownToggle>
|
|
|
|
<DropdownMenu
|
|
className="dropdown-menu-sm-width"
|
|
aria-labelledby="language-picker-toggle"
|
|
>
|
|
{showHeader ? <DropdownHeader>{t('language')}</DropdownHeader> : null}
|
|
{subdomainLang &&
|
|
Object.entries(subdomainLang).map(([subdomain, subdomainDetails]) => {
|
|
if (
|
|
!subdomainDetails ||
|
|
!subdomainDetails.lngCode ||
|
|
subdomainDetails.hide
|
|
)
|
|
return null
|
|
const isActive = subdomainDetails.lngCode === currentLangCode
|
|
return (
|
|
<li role="none" key={subdomain} translate="no">
|
|
<DropdownItem
|
|
href={`${subdomainDetails.url}${currentUrlWithQueryParams}`}
|
|
active={isActive}
|
|
aria-current={isActive ? 'true' : false}
|
|
trailingIcon={isActive ? 'check' : null}
|
|
>
|
|
{translatedLanguages?.[subdomainDetails.lngCode]}
|
|
</DropdownItem>
|
|
</li>
|
|
)
|
|
})}
|
|
</DropdownMenu>
|
|
</Dropdown>
|
|
)
|
|
}
|
|
|
|
export default LanguagePicker
|