Files
Verso/services/web/frontend/js/shared/components/sidebar/sidebar-lower-section.tsx
T
claudeandClaude Sonnet 4.6 5fa73fa8e3
Build and Deploy Verso / deploy (push) Successful in 14m49s
fix: rebrand Overleaf strings, move user menu, fix logo + button alignment
- en.json: replace 'Overleaf' with 'Verso' in 6 user-visible strings
  (email_already_registered, add_manager_user_not_found, compile_timeout,
  download_metadata, to_confirm_email address, welcome_opening_workspace)
- groups-and-enterprise-banner: use dynamic appName instead of hard-coded
  'Overleaf'
- SidebarLowerSection: add showAccountIcons prop (default true); set false
  in project dashboard sidebar — account menu is already in the top-right
  navbar, so the bottom-left duplicate is removed for all themes
- ds-nav-verso-logo: replace opacity-fade hover with scale+brightness
  transform so logo is fully visible at rest
- Lumière: scope new-project-dropdown sidebar padding to avoid misaligning
  the button when it appears next to the search bar in the header

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 13:58:17 +00:00

154 lines
5.0 KiB
TypeScript

import { type Ref, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { Question, User } from '@phosphor-icons/react'
import { Dropdown } from 'react-bootstrap'
import getMeta from '@/utils/meta'
import OLTooltip from '@/shared/components/ol/ol-tooltip'
import { NavDropdownMenuItems } from '@/shared/components/navbar/nav-dropdown-from-data'
import { NavbarDropdownItemData } from '@/shared/components/types/navbar'
import { useContactUsModal } from '@/shared/hooks/use-contact-us-modal'
import { UserProvider } from '@/shared/context/user-context'
import { AccountMenuItems } from '@/shared/components/navbar/account-menu-items'
import { sendMB } from '@/infrastructure/event-tracking'
import { useActiveOverallTheme } from '@/shared/hooks/use-active-overall-theme'
import versoLogo from '@/shared/svgs/verso-logo.svg'
import versoLogoDark from '@/shared/svgs/verso-logo-dark.svg'
export function SidebarLowerSection({
showThemeToggle = false,
showAccountIcons = true,
accountRef,
onAccountOpen,
children,
}: {
showThemeToggle?: boolean
showAccountIcons?: boolean
accountRef?: Ref<HTMLDivElement>
onAccountOpen?: () => void
children?: React.ReactNode
}) {
const { t } = useTranslation()
const [showAccountDropdown, setShowAccountDropdown] = useState(false)
const [showHelpDropdown, setShowHelpDropdown] = useState(false)
const { showModal: showContactUsModal, modal: contactUsModal } =
useContactUsModal({
autofillProjectUrl: false,
})
const { sessionUser, showSubscriptionLink, items } = getMeta('ol-navbar')
const { appName } = getMeta('ol-ExposedSettings')
const activeOverallTheme = useActiveOverallTheme()
const helpItem = items.find(
item => item.text === 'help_and_resources'
) as NavbarDropdownItemData
return (
<>
{children}
{showAccountIcons && <nav
className="d-flex flex-row gap-3 mb-2"
aria-label={t('account_help')}
>
{helpItem && (
<Dropdown
className="ds-nav-icon-dropdown"
onToggle={show => {
setShowHelpDropdown(show)
if (show) {
sendMB('menu-expand', { item: 'help', location: 'sidebar' })
}
}}
role="menu"
>
<Dropdown.Toggle role="menuitem" aria-label={t('help')}>
<OLTooltip
description={t('help')}
id="help-icon"
overlayProps={{
placement: 'top',
}}
hidden={showHelpDropdown}
>
<div>
<Question size={24} />
</div>
</OLTooltip>
</Dropdown.Toggle>
<Dropdown.Menu
as="ul"
role="menu"
align="end"
popperConfig={{
modifiers: [{ name: 'offset', options: { offset: [0, 5] } }],
}}
>
<NavDropdownMenuItems
dropdown={helpItem.dropdown}
showContactUsModal={showContactUsModal}
location="sidebar"
/>
</Dropdown.Menu>
</Dropdown>
)}
{sessionUser && (
<Dropdown
className="ds-nav-icon-dropdown"
onToggle={show => {
setShowAccountDropdown(show)
if (show) {
sendMB('menu-expand', {
item: 'account',
location: 'sidebar',
})
onAccountOpen?.()
}
}}
role="menu"
>
<Dropdown.Toggle role="menuitem" aria-label={t('Account')}>
<OLTooltip
description={t('Account')}
id="open-account"
overlayProps={{
placement: 'top',
}}
hidden={showAccountDropdown}
>
<div ref={accountRef}>
<User size={24} />
</div>
</OLTooltip>
</Dropdown.Toggle>
<Dropdown.Menu
as="ul"
role="menu"
align="end"
popperConfig={{
modifiers: [{ name: 'offset', options: { offset: [-50, 5] } }],
}}
>
<AccountMenuItems
sessionUser={sessionUser}
showSubscriptionLink={showSubscriptionLink}
showThemeToggle={showThemeToggle}
/>
</Dropdown.Menu>
</Dropdown>
)}
</nav>}
<a
href="/"
className="ds-nav-verso-logo"
aria-label={appName}
style={{ display: 'block', marginTop: 'var(--spacing-03)' }}
>
<img
src={activeOverallTheme === 'dark' ? versoLogoDark : versoLogo}
alt={appName}
style={{ width: '100%', height: 'auto' }}
/>
</a>
<UserProvider>{contactUsModal}</UserProvider>
</>
)
}