mirror of
https://github.com/grafana/grafana.git
synced 2025-08-02 11:13:11 +08:00

* update eslint, tsconfig + esbuild to handle new jsx transform * remove thing that breaks the new jsx transform * remove react imports * adjust grafana-icons build * is this the correct syntax? * try this * well this was much easier than expected... * change grafana-plugin-configs webpack config * fixes * fix lockfile * fix 2 more violations * use path.resolve instead of require.resolve * remove react import * fix react imports * more fixes * remove React import * remove import React from docs * remove another react import
70 lines
1.8 KiB
TypeScript
70 lines
1.8 KiB
TypeScript
import { lazy, Suspense } from 'react';
|
|
|
|
import { Icon, Tooltip } from '@grafana/ui';
|
|
|
|
import { FuncInstance } from '../gfunc';
|
|
|
|
export interface FunctionEditorControlsProps {
|
|
onMoveLeft: (func: FuncInstance) => void;
|
|
onMoveRight: (func: FuncInstance) => void;
|
|
onRemove: (func: FuncInstance) => void;
|
|
}
|
|
|
|
const FunctionDescription = lazy(async () => {
|
|
return {
|
|
default(props: { description?: string }) {
|
|
return <div>{props.description}</div>;
|
|
},
|
|
};
|
|
});
|
|
|
|
const FunctionHelpButton = (props: { description?: string; name: string }) => {
|
|
if (props.description) {
|
|
let tooltip = (
|
|
<Suspense fallback={<span>Loading description...</span>}>
|
|
<FunctionDescription description={props.description} />
|
|
</Suspense>
|
|
);
|
|
return (
|
|
<Tooltip content={tooltip} placement={'bottom-end'}>
|
|
<Icon className={props.description ? undefined : 'pointer'} name="question-circle" />
|
|
</Tooltip>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<Icon
|
|
className="pointer"
|
|
name="question-circle"
|
|
onClick={() => {
|
|
window.open(
|
|
'http://graphite.readthedocs.org/en/latest/functions.html#graphite.render.functions.' + props.name,
|
|
'_blank'
|
|
);
|
|
}}
|
|
/>
|
|
);
|
|
};
|
|
|
|
export const FunctionEditorControls = (
|
|
props: FunctionEditorControlsProps & {
|
|
func: FuncInstance;
|
|
}
|
|
) => {
|
|
const { func, onMoveLeft, onMoveRight, onRemove } = props;
|
|
return (
|
|
<div
|
|
style={{
|
|
display: 'flex',
|
|
width: '60px',
|
|
justifyContent: 'space-between',
|
|
}}
|
|
>
|
|
<Icon name="arrow-left" onClick={() => onMoveLeft(func)} />
|
|
<FunctionHelpButton name={func.def.name} description={func.def.description} />
|
|
<Icon name="times" onClick={() => onRemove(func)} />
|
|
<Icon name="arrow-right" onClick={() => onMoveRight(func)} />
|
|
</div>
|
|
);
|
|
};
|