|
|
@@ -1,15 +1,36 @@
|
|
|
+import { useState } from 'react'
|
|
|
import NewProjectButton from '../new-project-button'
|
|
|
import SidebarFilters from './sidebar-filters'
|
|
|
import AddAffiliation, { useAddAffiliation } from '../add-affiliation'
|
|
|
import SurveyWidget from '../survey-widget'
|
|
|
import { usePersistedResize } from '../../../../shared/hooks/use-resize'
|
|
|
+import MaterialIcon from '@/shared/components/material-icon'
|
|
|
+import { Dropdown } from 'react-bootstrap-5'
|
|
|
+import getMeta from '@/utils/meta'
|
|
|
+import OLTooltip from '@/features/ui/components/ol/ol-tooltip'
|
|
|
+import { useTranslation } from 'react-i18next'
|
|
|
+import { NavDropdownMenuItems } from '@/features/ui/components/bootstrap-5/navbar/nav-dropdown-from-data'
|
|
|
+import { NavbarDropdownItemData } from '@/features/ui/components/types/navbar'
|
|
|
+import { useContactUsModal } from '@/shared/hooks/use-contact-us-modal'
|
|
|
+import { UserProvider } from '@/shared/context/user-context'
|
|
|
+import { AccountMenuItems } from '@/features/ui/components/bootstrap-5/navbar/account-menu-items'
|
|
|
|
|
|
function SidebarDsNav() {
|
|
|
+ const { t } = useTranslation()
|
|
|
+ const [showAccountDropdown, setShowAccountDropdown] = useState(false)
|
|
|
+ const [showHelpDropdown, setShowHelpDropdown] = useState(false)
|
|
|
+ const { showModal: showContactUsModal, modal: contactUsModal } =
|
|
|
+ useContactUsModal({
|
|
|
+ autofillProjectUrl: false,
|
|
|
+ })
|
|
|
const { show: showAddAffiliationWidget } = useAddAffiliation()
|
|
|
const { mousePos, getHandleProps, getTargetProps } = usePersistedResize({
|
|
|
name: 'project-sidebar',
|
|
|
})
|
|
|
-
|
|
|
+ const { sessionUser, showSubscriptionLink, items } = getMeta('ol-navbar')
|
|
|
+ const helpItem = items.find(
|
|
|
+ item => item.text === 'help'
|
|
|
+ ) as NavbarDropdownItemData
|
|
|
return (
|
|
|
<div
|
|
|
className="project-list-sidebar-wrapper-react d-none d-md-flex"
|
|
|
@@ -28,10 +49,73 @@ function SidebarDsNav() {
|
|
|
<div className="project-list-sidebar-survey-wrapper">
|
|
|
<SurveyWidget variant="light" />
|
|
|
</div>
|
|
|
- <div className="bg-warning">
|
|
|
- Help / Profile
|
|
|
- <br />
|
|
|
- DS Nav
|
|
|
+ <div className="d-flex gap-3 mb-2">
|
|
|
+ {helpItem && (
|
|
|
+ <Dropdown
|
|
|
+ className="ds-nav-icon-dropdown"
|
|
|
+ onToggle={show => setShowHelpDropdown(show)}
|
|
|
+ >
|
|
|
+ <Dropdown.Toggle role="menuitem" aria-label={t('help')}>
|
|
|
+ <OLTooltip
|
|
|
+ description={t('help')}
|
|
|
+ id="help-icon"
|
|
|
+ overlayProps={{
|
|
|
+ placement: 'top',
|
|
|
+ show: showHelpDropdown ? false : undefined,
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <div>
|
|
|
+ <MaterialIcon type="help" size="2x" />
|
|
|
+ </div>
|
|
|
+ </OLTooltip>
|
|
|
+ </Dropdown.Toggle>
|
|
|
+ <Dropdown.Menu as="ul" role="menu" align="end">
|
|
|
+ <NavDropdownMenuItems
|
|
|
+ dropdown={helpItem.dropdown}
|
|
|
+ showContactUsModal={showContactUsModal}
|
|
|
+ />
|
|
|
+ </Dropdown.Menu>
|
|
|
+ </Dropdown>
|
|
|
+ )}
|
|
|
+ {sessionUser && (
|
|
|
+ <>
|
|
|
+ <Dropdown
|
|
|
+ className="ds-nav-icon-dropdown"
|
|
|
+ onToggle={show => setShowAccountDropdown(show)}
|
|
|
+ >
|
|
|
+ <Dropdown.Toggle role="menuitem" aria-label={t('Account')}>
|
|
|
+ <OLTooltip
|
|
|
+ description={t('Account')}
|
|
|
+ id="open-account"
|
|
|
+ overlayProps={{
|
|
|
+ placement: 'top',
|
|
|
+ show: showAccountDropdown ? false : undefined,
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <div>
|
|
|
+ <MaterialIcon type="person" size="2x" />
|
|
|
+ </div>
|
|
|
+ </OLTooltip>
|
|
|
+ </Dropdown.Toggle>
|
|
|
+ <Dropdown.Menu as="ul" role="menu" align="end">
|
|
|
+ <AccountMenuItems
|
|
|
+ sessionUser={sessionUser}
|
|
|
+ showSubscriptionLink={showSubscriptionLink}
|
|
|
+ />
|
|
|
+ </Dropdown.Menu>
|
|
|
+ </Dropdown>
|
|
|
+ <UserProvider>{contactUsModal}</UserProvider>
|
|
|
+ </>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ <div className="ds-nav-ds-link">
|
|
|
+ <a
|
|
|
+ target="_blank"
|
|
|
+ href="https://www.digital-science.com/"
|
|
|
+ rel="noopener"
|
|
|
+ >
|
|
|
+ Digital Science
|
|
|
+ </a>
|
|
|
</div>
|
|
|
<div
|
|
|
{...getHandleProps({
|