DashNav.tsx 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. // Libaries
  2. import React, { PureComponent } from 'react';
  3. import { connect } from 'react-redux';
  4. // Utils & Services
  5. import { appEvents } from 'app/core/app_events';
  6. // State
  7. import { updateLocation } from 'app/core/actions';
  8. // Types
  9. import { DashboardModel } from '../../state/DashboardModel';
  10. export interface Props {
  11. dashboard: DashboardModel | null;
  12. editview: string;
  13. isEditing: boolean;
  14. isFullscreen: boolean;
  15. updateLocation: typeof updateLocation;
  16. }
  17. export class DashNav extends PureComponent<Props> {
  18. onOpenSearch = () => {
  19. appEvents.emit('show-dash-search');
  20. };
  21. onAddPanel = () => {};
  22. onOpenSettings = () => {
  23. this.props.updateLocation({
  24. query: {
  25. editview: 'settings',
  26. },
  27. partial: true,
  28. })
  29. };
  30. renderLoadingState() {
  31. return (
  32. <div className="navbar">
  33. <div>
  34. <a className="navbar-page-btn" onClick={this.onOpenSearch}>
  35. <i className="gicon gicon-dashboard" />
  36. Loading...
  37. <i className="fa fa-caret-down" />
  38. </a>
  39. </div>
  40. </div>
  41. );
  42. }
  43. render() {
  44. let { dashboard } = this.props;
  45. if (!dashboard) {
  46. return this.renderLoadingState();
  47. }
  48. const haveFolder = dashboard.meta.folderId > 0;
  49. const { canEdit, canSave, folderTitle, showSettings } = dashboard.meta;
  50. return (
  51. <div className="navbar">
  52. <div>
  53. <a className="navbar-page-btn" onClick={this.onOpenSearch}>
  54. <i className="gicon gicon-dashboard" />
  55. {haveFolder && <span className="navbar-page-btn--folder">{folderTitle} / </span>}
  56. {dashboard.title}
  57. <i className="fa fa-caret-down" />
  58. </a>
  59. </div>
  60. <div className="navbar__spacer" />
  61. {/*
  62. <div class="navbar-buttons navbar-buttons--playlist" ng-if="ctrl.playlistSrv.isPlaying">
  63. <a class="navbar-button navbar-button--tight" ng-click="ctrl.playlistSrv.prev()"><i class="fa fa-step-backward"></i></a>
  64. <a class="navbar-button navbar-button--tight" ng-click="ctrl.playlistSrv.stop()"><i class="fa fa-stop"></i></a>
  65. <a class="navbar-button navbar-button--tight" ng-click="ctrl.playlistSrv.next()"><i class="fa fa-step-forward"></i></a>
  66. </div>
  67. */}
  68. <div className="navbar-buttons navbar-buttons--actions">
  69. {canEdit && (
  70. <button className="btn navbar-button navbar-button--add-panel" title="Add panel" onClick={this.onAddPanel}>
  71. <i className="gicon gicon-add-panel" />
  72. </button>
  73. )}
  74. {showSettings && (
  75. <button
  76. className="btn navbar-button navbar-button--settings"
  77. onClick={this.onOpenSettings}
  78. title="Dashboard Settings"
  79. >
  80. <i className="fa fa-cog" />
  81. </button>
  82. )}
  83. {
  84. // <button class="btn navbar-button navbar-button--star" ng-show="::ctrl.dashboard.meta.canStar" ng-click="ctrl.starDashboard()" bs-tooltip="'Mark as favorite'" data-placement="bottom">
  85. // <i class="fa" ng-class="{'fa-star-o': !ctrl.dashboard.meta.isStarred, 'fa-star': ctrl.dashboard.meta.isStarred}"></i>
  86. // </button>
  87. //
  88. // <button class="btn navbar-button navbar-button--share" ng-show="::ctrl.dashboard.meta.canShare" ng-click="ctrl.shareDashboard(0)" bs-tooltip="'Share dashboard'" data-placement="bottom">
  89. // <i class="fa fa-share-square-o"></i></a>
  90. // </button>
  91. //
  92. // <button class="btn navbar-button navbar-button--save" ng-show="ctrl.dashboard.meta.canSave" ng-click="ctrl.saveDashboard()" bs-tooltip="'Save dashboard <br> CTRL+S'" data-placement="bottom">
  93. // <i class="fa fa-save"></i>
  94. // </button>
  95. //
  96. // <a class="btn navbar-button navbar-button--snapshot-origin" ng-if="::ctrl.dashboard.snapshot.originalUrl" href="{{ctrl.dashboard.snapshot.originalUrl}}" bs-tooltip="'Open original dashboard'" data-placement="bottom">
  97. // <i class="fa fa-link"></i>
  98. // </a>
  99. //
  100. // <button class="btn navbar-button navbar-button--settings" ng-click="ctrl.toggleSettings()" bs-tooltip="'Dashboard Settings'" data-placement="bottom" ng-show="ctrl.dashboard.meta.showSettings">
  101. // <i class="fa fa-cog"></i>
  102. // </button>
  103. // </div>
  104. //
  105. // <div class="navbar-buttons navbar-buttons--tv">
  106. // <button class="btn navbar-button navbar-button--tv" ng-click="ctrl.toggleViewMode()" bs-tooltip="'Cycle view mode'" data-placement="bottom">
  107. // <i class="fa fa-desktop"></i>
  108. // </button>
  109. // </div>
  110. //
  111. // <gf-time-picker class="gf-timepicker-nav" dashboard="ctrl.dashboard" ng-if="!ctrl.dashboard.timepicker.hidden"></gf-time-picker>
  112. //
  113. // <div class="navbar-buttons navbar-buttons--close">
  114. // <button class="btn navbar-button navbar-button--primary" ng-click="ctrl.close()" bs-tooltip="'Back to dashboard'" data-placement="bottom">
  115. // <i class="fa fa-reply"></i>
  116. // </button>
  117. // </div>
  118. }
  119. </div>
  120. </div>
  121. );
  122. }
  123. }
  124. const mapStateToProps = () => ({
  125. });
  126. const mapDispatchToProps = {
  127. updateLocation
  128. };
  129. export default connect(mapStateToProps, mapDispatchToProps)(DashNav);