kanban / webapp /src /components /sidebar /sidebarUserMenu.tsx
Leon4gr45's picture
Upload folder using huggingface_hub
13555f3 verified
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React, {useState} from 'react'
import {useIntl} from 'react-intl'
import {useHistory} from 'react-router-dom'
import {Constants} from '../../constants'
import octoClient from '../../octoClient'
import {IUser} from '../../user'
import FocalboardLogoIcon from '../../widgets/icons/focalboard_logo'
import Menu from '../../widgets/menu'
import MenuWrapper from '../../widgets/menuWrapper'
import {getMe, setMe} from '../../store/users'
import {useAppSelector, useAppDispatch} from '../../store/hooks'
import ModalWrapper from '../modalWrapper'
import {IAppWindow} from '../../types'
import RegistrationLink from './registrationLink'
import './sidebarUserMenu.scss'
declare let window: IAppWindow
const SidebarUserMenu = () => {
const dispatch = useAppDispatch()
const history = useHistory()
const [showRegistrationLinkDialog, setShowRegistrationLinkDialog] = useState(false)
const user = useAppSelector<IUser|null>(getMe)
const intl = useIntl()
return (
<div className='SidebarUserMenu'>
<ModalWrapper>
<MenuWrapper>
<div className='logo'>
<div className='logo-title'>
<FocalboardLogoIcon/>
<span>{'Focalboard'}</span>
<div className='versionFrame'>
<div
className='version'
title={`v${Constants.versionString}`}
>
{`v${Constants.versionString}`}
</div>
</div>
</div>
</div>
<Menu>
{user && user.username !== 'single-user' && <>
<Menu.Label><b>{user.username}</b></Menu.Label>
<Menu.Text
id='logout'
name={intl.formatMessage({id: 'Sidebar.logout', defaultMessage: 'Log out'})}
onClick={async () => {
await octoClient.logout()
dispatch(setMe(null))
history.push('/login')
}}
/>
<Menu.Text
id='changePassword'
name={intl.formatMessage({id: 'Sidebar.changePassword', defaultMessage: 'Change password'})}
onClick={async () => {
history.push('/change_password')
}}
/>
<Menu.Text
id='invite'
name={intl.formatMessage({id: 'Sidebar.invite-users', defaultMessage: 'Invite users'})}
onClick={async () => {
setShowRegistrationLinkDialog(true)
}}
/>
<Menu.Separator/>
</>}
<Menu.Text
id='about'
name={intl.formatMessage({id: 'Sidebar.about', defaultMessage: 'About Focalboard'})}
onClick={async () => {
window.open('https://www.focalboard.com?utm_source=webapp', '_blank')
// TODO: Review if this is needed in the future, this is to fix the problem with linux webview links
if (window.openInNewBrowser) {
window.openInNewBrowser('https://www.focalboard.com?utm_source=webapp')
}
}}
/>
</Menu>
</MenuWrapper>
{showRegistrationLinkDialog &&
<RegistrationLink
onClose={() => {
setShowRegistrationLinkDialog(false)
}}
/>
}
</ModalWrapper>
</div>
)
}
export default React.memo(SidebarUserMenu)