2018-11-01 06:01:27 -05:00
|
|
|
import React, { PureComponent } from 'react';
|
2018-10-25 05:47:09 -05:00
|
|
|
import classNames from 'classnames';
|
|
|
|
|
2018-11-07 06:55:02 -06:00
|
|
|
import { PanelHeaderMenu } from './PanelHeaderMenu';
|
2018-11-14 01:07:16 -06:00
|
|
|
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';
|
2018-11-14 05:22:13 -06:00
|
|
|
import { ClickOutsideWrapper } from 'app/core/components/ClickOutsideWrapper/ClickOutsideWrapper';
|
2018-11-07 06:55:02 -06:00
|
|
|
|
|
|
|
export interface Props {
|
|
|
|
panel: PanelModel;
|
|
|
|
dashboard: DashboardModel;
|
2018-11-08 07:44:12 -06:00
|
|
|
timeInfo: string;
|
2018-10-25 05:47:09 -05:00
|
|
|
}
|
2018-11-03 17:36:40 -05:00
|
|
|
|
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,
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2018-10-25 05:47:09 -05:00
|
|
|
render() {
|
|
|
|
const isFullscreen = false;
|
|
|
|
const isLoading = false;
|
|
|
|
const panelHeaderClass = classNames({ 'panel-header': true, 'grid-drag-handle': !isFullscreen });
|
2018-11-08 07:44:12 -06:00
|
|
|
const { panel, dashboard, timeInfo } = this.props;
|
2018-10-25 05:47:09 -05:00
|
|
|
return (
|
2018-11-15 07:30:59 -06:00
|
|
|
<>
|
2018-11-14 15:02:50 -06:00
|
|
|
{panel.description && (
|
2018-11-15 05:47:32 -06:00
|
|
|
<Tooltip
|
|
|
|
content={panel.description}
|
|
|
|
className="absolute"
|
|
|
|
refClassName="panel-info-corner panel-info-corner--info"
|
|
|
|
>
|
|
|
|
<i className="fa" />
|
|
|
|
<span className="panel-info-corner-inner" />
|
2018-11-14 15:02:50 -06:00
|
|
|
</Tooltip>
|
|
|
|
)}
|
2018-10-25 05:47:09 -05:00
|
|
|
{isLoading && (
|
|
|
|
<span className="panel-loading">
|
|
|
|
<i className="fa fa-spinner fa-spin" />
|
|
|
|
</span>
|
|
|
|
)}
|
|
|
|
|
2018-11-15 07:30:59 -06:00
|
|
|
<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>
|
2018-10-25 05:47:09 -05:00
|
|
|
|
2018-11-15 07:30:59 -06:00
|
|
|
{this.state.panelMenuOpen && (
|
|
|
|
<ClickOutsideWrapper onClick={this.closeMenu}>
|
|
|
|
<PanelHeaderMenu panel={panel} dashboard={dashboard} />
|
|
|
|
</ClickOutsideWrapper>
|
|
|
|
)}
|
2018-11-07 06:55:02 -06:00
|
|
|
|
2018-11-15 07:30:59 -06:00
|
|
|
{timeInfo && (
|
|
|
|
<span className="panel-time-info">
|
|
|
|
<i className="fa fa-clock-o" /> {timeInfo}
|
|
|
|
</span>
|
|
|
|
)}
|
|
|
|
</div>
|
2018-10-25 05:47:09 -05:00
|
|
|
</div>
|
|
|
|
</div>
|
2018-11-15 07:30:59 -06:00
|
|
|
</>
|
2018-10-25 05:47:09 -05:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|