mirror of https://github.com/grafana/grafana
Panel Inspect: allow plugins to add custom actions to the panel inspect popup (#34086)
parent
e799257637
commit
855da80542
@ -0,0 +1,84 @@ |
||||
import { PanelModel } from '../../state'; |
||||
|
||||
export interface PanelInspectActionProps { |
||||
panel: PanelModel; |
||||
data?: PanelData; |
||||
} |
||||
|
||||
export interface PanelInspectAction { |
||||
title: string; |
||||
description: string; |
||||
|
||||
component: ComponentType<PanelInspectActionProps>; |
||||
} |
||||
|
||||
export interface PanelInspectActionSupplier { |
||||
getActions: (panel: PanelModel) => PanelInspectAction[] | null; |
||||
} |
||||
|
||||
// const dummySupplier: PanelInspectActionSupplier = {
|
||||
// getActions: (panel: PanelModel) => {
|
||||
// return [
|
||||
// {
|
||||
// title: 'Do something',
|
||||
// description: 'that thingy',
|
||||
// // eslint-disable-next-line react/display-name
|
||||
// component: ({ panel }) => {
|
||||
// return (
|
||||
// <div>
|
||||
// DO THING ONE. Panel: <pre>{JSON.stringify(panel.targets)}</pre>
|
||||
// </div>
|
||||
// );
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// title: 'Do something else',
|
||||
// description: 'another thing',
|
||||
// // eslint-disable-next-line react/display-name
|
||||
// component: ({ panel }) => {
|
||||
// return (
|
||||
// <div>
|
||||
// DO THING TWO. Panel: <pre>{JSON.stringify(panel.targets)}</pre>
|
||||
// </div>
|
||||
// );
|
||||
// },
|
||||
// },
|
||||
// ];
|
||||
// },
|
||||
// };
|
||||
|
||||
// In Grafana 8.1, this can be improved and moved to `@grafana/runtime`
|
||||
// NOTE: This is an internal/experimental API/hack and will change!
|
||||
// (window as any).grafanaPanelInspectActionSupplier = dummySupplier;
|
||||
|
||||
import React, { ComponentType } from 'react'; |
||||
import { PanelData } from '@grafana/data'; |
||||
|
||||
interface InspectActionsTabProps { |
||||
panel: PanelModel; |
||||
data?: PanelData; |
||||
} |
||||
|
||||
export const InspectActionsTab: React.FC<InspectActionsTabProps> = ({ panel, data }) => { |
||||
const supplier = (window as any).grafanaPanelInspectActionSupplier as PanelInspectActionSupplier; |
||||
if (!supplier) { |
||||
return <div>Missing actions</div>; |
||||
} |
||||
|
||||
const actions = supplier.getActions(panel); |
||||
if (!actions?.length) { |
||||
return <div>No actions avaliable</div>; |
||||
} |
||||
|
||||
return ( |
||||
<div> |
||||
{actions.map((a, idx) => ( |
||||
<div key={idx}> |
||||
<h2>{a.title}</h2> |
||||
<span>{a.description}</span> |
||||
<a.component panel={panel} data={data} /> |
||||
</div> |
||||
))} |
||||
</div> |
||||
); |
||||
}; |
||||
Loading…
Reference in new issue