Add theme toggle to project dashboard GitOrigin-RevId: 4c76bcc36f77d7fd883798f8ccfcb5d1cf1a54b0
70 lines
2.3 KiB
TypeScript
70 lines
2.3 KiB
TypeScript
import { Dropdown } from 'react-bootstrap'
|
|
import { useTranslation } from 'react-i18next'
|
|
import getMeta from '@/utils/meta'
|
|
import type { NavbarSessionUser } from '@/shared/components/types/navbar'
|
|
import DropdownListItem from '@/shared/components/dropdown/dropdown-list-item'
|
|
import NavDropdownDivider from './nav-dropdown-divider'
|
|
import NavDropdownLinkItem from './nav-dropdown-link-item'
|
|
import { useDsNavStyle } from '@/features/project-list/components/use-is-ds-nav'
|
|
import { SignOut } from '@phosphor-icons/react'
|
|
import ThemeToggle from '@/features/project-list/components/sidebar/theme-toggle'
|
|
|
|
export function AccountMenuItems({
|
|
sessionUser,
|
|
showSubscriptionLink,
|
|
showThemeToggle = false,
|
|
}: {
|
|
sessionUser: NavbarSessionUser
|
|
showSubscriptionLink: boolean
|
|
showThemeToggle?: boolean
|
|
}) {
|
|
const { t } = useTranslation()
|
|
const logOutFormId = 'logOutForm'
|
|
const dsNavStyle = useDsNavStyle()
|
|
|
|
return (
|
|
<>
|
|
<Dropdown.Item as="li" disabled role="menuitem">
|
|
{sessionUser.email}
|
|
</Dropdown.Item>
|
|
<NavDropdownDivider />
|
|
<NavDropdownLinkItem href="/user/settings">
|
|
{t('account_settings')}
|
|
</NavDropdownLinkItem>
|
|
{showSubscriptionLink ? (
|
|
<NavDropdownLinkItem href="/user/subscription">
|
|
{t('subscription')}
|
|
</NavDropdownLinkItem>
|
|
) : null}
|
|
{showThemeToggle && (
|
|
<DropdownListItem>
|
|
<ThemeToggle />
|
|
</DropdownListItem>
|
|
)}
|
|
|
|
<NavDropdownDivider />
|
|
<DropdownListItem>
|
|
{
|
|
// The button is outside the form but still belongs to it via the
|
|
// form attribute. The reason to do this is that if the button is
|
|
// inside the form, screen readers will not count it in the total
|
|
// number of menu items
|
|
}
|
|
<Dropdown.Item
|
|
as="button"
|
|
type="submit"
|
|
form={logOutFormId}
|
|
role="menuitem"
|
|
className="d-flex align-items-center justify-content-between"
|
|
>
|
|
<span>{t('log_out')}</span>
|
|
{dsNavStyle && <SignOut size={16} />}
|
|
</Dropdown.Item>
|
|
<form id={logOutFormId} method="POST" action="/logout">
|
|
<input type="hidden" name="_csrf" value={getMeta('ol-csrfToken')} />
|
|
</form>
|
|
</DropdownListItem>
|
|
</>
|
|
)
|
|
}
|