@revoloo/cypress6
Version:
Cypress.io end to end testing tool
154 lines (138 loc) • 3.38 kB
JSX
import { observer } from 'mobx-react'
import React, { Component } from 'react'
import { Dropdown } from '@packages/ui-components'
import appStore from '../lib/app-store'
import authApi from '../auth/auth-api'
import authStore from '../auth/auth-store'
import viewStore from '../lib/view-store'
import ipc from '../lib/ipc'
import { gravatarUrl } from '../lib/utils'
import { Link, routes } from '../lib/routing'
export default class Nav extends Component {
render () {
return (
<nav className='main-nav navbar navbar-inverse'>
<ul className='nav'>
<li>
{this._leftNav()}
</li>
</ul>
<div className='spacer' />
<ul className='nav'>
<li>
<a onClick={this._openSupport} href='#'>
<i className='fas fa-question-circle' /> Support
</a>
</li>
<li>
<a onClick={this._openDocs} href='#'>
<i className='fas fa-graduation-cap' /> Docs
</a>
</li>
{this._userStateButton()}
</ul>
</nav>
)
}
_leftNav = () => {
const project = viewStore.currentView.project
// project mode
if (!appStore.isGlobalMode) {
return <div>{project && project.displayName}</div>
}
// global mode, on project page
if (appStore.isGlobalMode && project) {
return (
<Link to={routes.intro()}>
<i className='fas fa-chevron-left' /> Back
</Link>
)
}
// global mode, on intro page
return (
<div className='logo'>
<img src={require('@cypress/icons/dist/logo/cypress-inverse.png')} alt="Cypress" />
</div>
)
}
_userStateButton = () => {
if (authStore.isLoading) {
return (
<li>
<div>
<i className='fas fa-user' /> <i className='fas fa-spinner fa-spin' />
</div>
</li>
)
}
if (!authStore.isAuthenticated) {
return (
<li>
<a onClick={this._showLogin}>
<i className='fas fa-user' /> Log In
</a>
</li>
)
}
return (
<Dropdown
className='user-dropdown'
chosen={{ id: 'user' }}
others={[{ id: 'logout' }]}
onSelect={this._select}
renderItem={this._item}
keyProperty='id'
/>
)
}
_item (item) {
if (item.id === 'user') {
return (
<span>
<img
className='user-avatar'
height='13'
width='13'
src={`${gravatarUrl(authStore.user.email)}`}
/>
{' '}{authStore.user.displayName}
</span>
)
}
return (
<span>
<i className='fas fa-sign-out-alt' />{' '}
Log Out
</span>
)
}
_select = (item) => {
if (item.id === 'logout') {
authApi.logOut()
}
}
_showLogin () {
authStore.openLogin(null, 'Nav')
}
_openDocs (e) {
e.preventDefault()
ipc.externalOpen({
url: 'https://on.cypress.io/docs',
params: {
utm_medium: 'Nav',
utm_campaign: 'Docs',
},
})
}
_openSupport (e) {
e.preventDefault()
ipc.externalOpen({
url: 'https://on.cypress.io/support',
params: {
utm_medium: 'Nav',
utm_campaign: 'Support',
},
})
}
}