grafana/public/app/core/components/sidemenu/BottomNavLinks.tsx
Torkel Ödegaard 10badea19e
Emotion: Upgrades emotion from 10 to 11 and updates all import paths (#32541)
* Babel: Updates babel dependencies to latest version

* Emotion: Upgrade form 10 to 11

* Fixing tests

* Updated to use emotion/css instead in test
2021-04-01 14:15:23 +02:00

110 lines
3.3 KiB
TypeScript

import React, { PureComponent } from 'react';
import { css } from '@emotion/css';
import appEvents from '../../app_events';
import { User } from '../../services/context_srv';
import { NavModelItem } from '@grafana/data';
import { Icon, IconName, Link } from '@grafana/ui';
import { OrgSwitcher } from '../OrgSwitcher';
import { getFooterLinks } from '../Footer/Footer';
import { ShowModalEvent } from '../../../types/events';
export interface Props {
link: NavModelItem;
user: User;
}
interface State {
showSwitcherModal: boolean;
}
export default class BottomNavLinks extends PureComponent<Props, State> {
state: State = {
showSwitcherModal: false,
};
onOpenShortcuts = () => {
appEvents.publish(
new ShowModalEvent({
templateHtml: '<help-modal></help-modal>',
})
);
};
toggleSwitcherModal = () => {
this.setState((prevState) => ({
showSwitcherModal: !prevState.showSwitcherModal,
}));
};
render() {
const { link, user } = this.props;
const { showSwitcherModal } = this.state;
const subMenuIconClassName = css`
margin-right: 8px;
`;
let children = link.children || [];
if (link.id === 'help') {
children = getFooterLinks();
}
return (
<div className="sidemenu-item dropdown dropup">
<Link href={link.url} className="sidemenu-link" target={link.target}>
<span className="icon-circle sidemenu-icon">
{link.icon && <Icon name={link.icon as IconName} size="xl" />}
{link.img && <img src={link.img} />}
</span>
</Link>
<ul className="dropdown-menu dropdown-menu--sidemenu" role="menu">
{link.subTitle && (
<li className="sidemenu-subtitle">
<span className="sidemenu-item-text">{link.subTitle}</span>
</li>
)}
{link.showOrgSwitcher && (
<li className="sidemenu-org-switcher">
<a onClick={this.toggleSwitcherModal}>
<div>
<div className="sidemenu-org-switcher__org-current">Current Org.:</div>
<div className="sidemenu-org-switcher__org-name">{user.orgName}</div>
</div>
<div className="sidemenu-org-switcher__switch">
<Icon name="arrow-random" className={subMenuIconClassName} />
Switch
</div>
</a>
</li>
)}
{showSwitcherModal && <OrgSwitcher onDismiss={this.toggleSwitcherModal} />}
{children.map((child, index) => {
return (
<li key={`${child.text}-${index}`}>
<a href={child.url} target={child.target} rel="noopener">
{child.icon && <Icon name={child.icon as IconName} className={subMenuIconClassName} />}
{child.text}
</a>
</li>
);
})}
{link.id === 'help' && (
<li key="keyboard-shortcuts">
<a onClick={() => this.onOpenShortcuts()}>
<Icon name="keyboard" className={subMenuIconClassName} /> Keyboard shortcuts
</a>
</li>
)}
<li className="side-menu-header">
<span className="sidemenu-item-text">{link.text}</span>
</li>
</ul>
</div>
);
}
}