BottomNavLinks.tsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import React, { PureComponent } from 'react';
  2. import appEvents from '../../app_events';
  3. import { User } from '../../services/context_srv';
  4. import { NavModelItem } from '@grafana/data';
  5. export interface Props {
  6. link: NavModelItem;
  7. user: User;
  8. }
  9. class BottomNavLinks extends PureComponent<Props> {
  10. itemClicked = (event: React.SyntheticEvent, child: NavModelItem) => {
  11. if (child.url === '/shortcuts') {
  12. event.preventDefault();
  13. appEvents.emit('show-modal', {
  14. templateHtml: '<help-modal></help-modal>',
  15. });
  16. }
  17. };
  18. switchOrg = () => {
  19. appEvents.emit('show-modal', {
  20. templateHtml: '<org-switcher dismiss="dismiss()"></org-switcher>',
  21. });
  22. };
  23. render() {
  24. const { link, user } = this.props;
  25. return (
  26. <div className="sidemenu-item dropdown dropup">
  27. <a href={link.url} className="sidemenu-link" target={link.target}>
  28. <span className="icon-circle sidemenu-icon">
  29. {link.icon && <i className={link.icon} />}
  30. {link.img && <img src={link.img} />}
  31. </span>
  32. </a>
  33. <ul className="dropdown-menu dropdown-menu--sidemenu" role="menu">
  34. {link.subTitle && (
  35. <li className="sidemenu-subtitle">
  36. <span className="sidemenu-item-text">{link.subTitle}</span>
  37. </li>
  38. )}
  39. {link.showOrgSwitcher && (
  40. <li className="sidemenu-org-switcher">
  41. <a onClick={this.switchOrg}>
  42. <div>
  43. <div className="sidemenu-org-switcher__org-name">{user.orgName}</div>
  44. <div className="sidemenu-org-switcher__org-current">Current Org:</div>
  45. </div>
  46. <div className="sidemenu-org-switcher__switch">
  47. <i className="fa fa-fw fa-random" />
  48. Switch
  49. </div>
  50. </a>
  51. </li>
  52. )}
  53. {link.children &&
  54. link.children.map((child, index) => {
  55. if (!child.hideFromMenu) {
  56. return (
  57. <li key={`${child.text}-${index}`}>
  58. <a href={child.url} target={child.target} onClick={event => this.itemClicked(event, child)}>
  59. {child.icon && <i className={child.icon} />}
  60. {child.text}
  61. </a>
  62. </li>
  63. );
  64. }
  65. return null;
  66. })}
  67. <li className="side-menu-header">
  68. <span className="sidemenu-item-text">{link.text}</span>
  69. </li>
  70. </ul>
  71. </div>
  72. );
  73. }
  74. }
  75. export default BottomNavLinks;