| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import React, { Component } from 'react';
- import classNames from 'classnames';
- import PanelHeaderCorner from './PanelHeaderCorner';
- import { PanelHeaderMenu } from './PanelHeaderMenu';
- import templateSrv from 'app/features/templating/template_srv';
- import { DashboardModel } from 'app/features/dashboard/dashboard_model';
- import { PanelModel } from 'app/features/dashboard/panel_model';
- import { ClickOutsideWrapper } from 'app/core/components/ClickOutsideWrapper/ClickOutsideWrapper';
- export interface Props {
- panel: PanelModel;
- dashboard: DashboardModel;
- timeInfo: string;
- title?: string;
- description?: string;
- scopedVars?: string;
- links?: [];
- }
- interface State {
- panelMenuOpen: boolean;
- }
- export class PanelHeader extends Component<Props, State> {
- state = {
- panelMenuOpen: false,
- };
- onMenuToggle = event => {
- event.stopPropagation();
- this.setState(prevState => ({
- panelMenuOpen: !prevState.panelMenuOpen,
- }));
- };
- closeMenu = () => {
- this.setState({
- panelMenuOpen: false,
- });
- };
- render() {
- const isFullscreen = false;
- const isLoading = false;
- const panelHeaderClass = classNames({ 'panel-header': true, 'grid-drag-handle': !isFullscreen });
- const { panel, dashboard, timeInfo, scopedVars } = this.props;
- const title = templateSrv.replaceWithText(panel.title, scopedVars);
- return (
- <>
- <PanelHeaderCorner
- panel={panel}
- title={panel.title}
- description={panel.description}
- scopedVars={panel.scopedVars}
- links={panel.links}
- />
- <div className={panelHeaderClass}>
- {isLoading && (
- <span className="panel-loading">
- <i className="fa fa-spinner fa-spin" />
- </span>
- )}
- <div className="panel-title-container" onClick={this.onMenuToggle}>
- <div className="panel-title">
- <span className="icon-gf panel-alert-icon" />
- <span className="panel-title-text">
- {title} <span className="fa fa-caret-down panel-menu-toggle" />
- </span>
- {this.state.panelMenuOpen && (
- <ClickOutsideWrapper onClick={this.closeMenu}>
- <PanelHeaderMenu panel={panel} dashboard={dashboard} />
- </ClickOutsideWrapper>
- )}
- {timeInfo && (
- <span className="panel-time-info">
- <i className="fa fa-clock-o" /> {timeInfo}
- </span>
- )}
- </div>
- </div>
- </div>
- </>
- );
- }
- }
|