grafana/public/app/features/dashboard/dashgrid/PanelHeader/PanelHeader.tsx

89 lines
2.5 KiB
TypeScript
Raw Normal View History

2018-11-01 06:01:27 -05:00
import React, { PureComponent } from 'react';
import classNames from 'classnames';
2018-11-07 06:55:02 -06:00
import { PanelHeaderMenu } from './PanelHeaderMenu';
import Tooltip from 'app/core/components/Tooltip/Tooltip';
2018-11-07 06:55:02 -06:00
import { DashboardModel } from 'app/features/dashboard/dashboard_model';
import { PanelModel } from 'app/features/dashboard/panel_model';
import { ClickOutsideWrapper } from 'app/core/components/ClickOutsideWrapper/ClickOutsideWrapper';
2018-11-07 06:55:02 -06:00
export interface Props {
panel: PanelModel;
dashboard: DashboardModel;
timeInfo: string;
}
2018-11-13 10:00:28 -06:00
interface State {
panelMenuOpen: boolean;
}
export class PanelHeader extends PureComponent<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 } = this.props;
return (
<>
{panel.description && (
<Tooltip
content={panel.description}
className="absolute"
refClassName="panel-info-corner panel-info-corner--info"
>
<i className="fa" />
<span className="panel-info-corner-inner" />
</Tooltip>
)}
{isLoading && (
<span className="panel-loading">
<i className="fa fa-spinner fa-spin" />
</span>
)}
<div className={panelHeaderClass}>
<div className="panel-title-container" onClick={this.onMenuToggle}>
<div className="panel-title">
<span className="icon-gf panel-alert-icon" />
<span className="panel-title-text">
{panel.title} <span className="fa fa-caret-down panel-menu-toggle" />
</span>
{this.state.panelMenuOpen && (
<ClickOutsideWrapper onClick={this.closeMenu}>
<PanelHeaderMenu panel={panel} dashboard={dashboard} />
</ClickOutsideWrapper>
)}
2018-11-07 06:55:02 -06:00
{timeInfo && (
<span className="panel-time-info">
<i className="fa fa-clock-o" /> {timeInfo}
</span>
)}
</div>
</div>
</div>
</>
);
}
}