| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // Libraries
- import React, { PureComponent } from 'react';
- // Services
- import { getTimeSrv } from 'app/features/dashboard/time_srv';
- import { contextSrv } from 'app/core/services/context_srv';
- import { getDatasourceSrv } from 'app/features/plugins/datasource_srv';
- import { store } from 'app/store/configureStore';
- // Components
- import { PanelHeaderMenu } from 'app/features/dashboard/dashgrid/PanelHeader/PanelHeaderMenu';
- import config from 'app/core/config';
- import { getExploreUrl } from 'app/core/utils/explore';
- import { updateLocation } from 'app/core/actions';
- // Types
- import { PanelModel } from 'app/features/dashboard/panel_model';
- import { PanelHeaderMenuProps } from 'app/features/dashboard/dashgrid/PanelHeader/PanelHeaderMenu';
- import {
- PanelHeaderMenuItemProps,
- PanelHeaderMenuItemTypes,
- } from 'app/features/dashboard/dashgrid/PanelHeader/PanelHeaderMenuItem';
- interface LocalState {
- datasource: any;
- }
- export const withMenuOptions = (WrappedPanelHeaderMenu: typeof PanelHeaderMenu, panel: PanelModel) => {
- return class extends PureComponent<PanelHeaderMenuProps, LocalState> {
- private datasourceSrv = getDatasourceSrv();
- private timeSrv = getTimeSrv();
- constructor(props) {
- super(props);
- this.state = {
- datasource: undefined,
- };
- }
- componentDidMount() {
- const dsPromise = getDatasourceSrv().get(panel.datasource);
- dsPromise.then((datasource: any) => {
- this.setState(() => ({ datasource }));
- });
- }
- onExploreClick = async () => {
- const { datasource } = this.state;
- const url = await getExploreUrl(panel, panel.targets, datasource, this.datasourceSrv, this.timeSrv);
- if (url) {
- store.dispatch(updateLocation({ path: url }));
- }
- };
- getAdditionalMenuItems = () => {
- const { datasource } = this.state;
- const items = [];
- if (
- config.exploreEnabled &&
- contextSrv.isEditor &&
- datasource &&
- (datasource.meta.explore || datasource.meta.id === 'mixed')
- ) {
- items.push({
- type: PanelHeaderMenuItemTypes.Link,
- text: 'Explore',
- handleClick: this.onExploreClick,
- iconClassName: 'fa fa-fw fa-rocket',
- shortcut: 'x',
- });
- }
- return items;
- };
- getAdditionalSubMenuItems = () => {
- return [
- {
- type: PanelHeaderMenuItemTypes.Link,
- text: 'Hello Sub Menu',
- handleClick: () => {
- alert('Hello world from HOC!');
- },
- shortcut: 's h w',
- },
- ] as PanelHeaderMenuItemProps[];
- };
- render() {
- const menu: PanelHeaderMenuItemProps[] = this.getAdditionalMenuItems();
- const subMenu: PanelHeaderMenuItemProps[] = this.getAdditionalSubMenuItems();
- return <WrappedPanelHeaderMenu {...this.props} additionalMenuItems={menu} additionalSubMenuItems={subMenu} />;
- }
- };
- };
|