mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Add UMLs * Add rendered diagrams * Move QueryCtrl to flux * Remove redundant param in the reducer * Use named imports for lodash and fix typing for GraphiteTagOperator * Add missing async/await * Extract providers to a separate file * Clean up async await * Rename controller functions back to main * Simplify creating actions * Re-order controller functions * Separate helpers from actions * Rename vars * Simplify helpers * Move controller methods to state reducers * Remove docs (they are added in design doc) * Move actions.ts to state folder * Add docs * Add old methods stubs for easier review * Check how state dependencies will be mapped * Rename state to store * Rename state to store * Rewrite spec tests for Graphite Query Controller * Update docs * Update docs * Add GraphiteTextEditor * Add play button * Add AddGraphiteFunction * Use Segment to simplify AddGraphiteFunction * Memoize function defs * Fix useCallback deps * Update public/app/plugins/datasource/graphite/state/helpers.ts Co-authored-by: Giordano Ricci <me@giordanoricci.com> * Update public/app/plugins/datasource/graphite/state/helpers.ts Co-authored-by: Giordano Ricci <me@giordanoricci.com> * Update public/app/plugins/datasource/graphite/state/helpers.ts Co-authored-by: Giordano Ricci <me@giordanoricci.com> * Update public/app/plugins/datasource/graphite/state/providers.ts Co-authored-by: Giordano Ricci <me@giordanoricci.com> * Update public/app/plugins/datasource/graphite/state/providers.ts Co-authored-by: Giordano Ricci <me@giordanoricci.com> * Update public/app/plugins/datasource/graphite/state/providers.ts Co-authored-by: Giordano Ricci <me@giordanoricci.com> * Update public/app/plugins/datasource/graphite/state/providers.ts Co-authored-by: Giordano Ricci <me@giordanoricci.com> * Update public/app/plugins/datasource/graphite/state/providers.ts Co-authored-by: Giordano Ricci <me@giordanoricci.com> * Update public/app/plugins/datasource/graphite/state/providers.ts Co-authored-by: Giordano Ricci <me@giordanoricci.com> * Add more type definitions * Remove submitOnClickAwayOption This behavior is actually needed to remove parameters in functions * Load function definitions before parsing the target on initial load * Add button padding * Fix loading function definitions * Change targetChanged to updateQuery to avoid mutating state directly It's also needed for extra refresh/runQuery execution as handleTargetChanged doesn't handle changing the raw query * Fix updating query after adding a function * Simplify updating function params * Migrate function editor to react * Simplify setting Segment Select min width * Remove unnecessary changes to SegmentInput * Extract view logic to a helper and update types definitions * Clean up types * Update FuncDef types and add tests * Show red border for unknown functions * Autofocus on new params * Extract params mapping to a helper * Split code between params and function editor * Focus on the first param when a function is added even if it's an optional argument * Add function editor tests * Remove todo marker * Fix adding new functions * Allow empty value in selects for removing function params * Add placeholders and fix styling * Add more docs * Create basic implementation for metrics and tags * Post merge fixes These files are not .ts * Remove mapping to Angular dropdowns * Simplify mapping tag names, values and operators * Simplify mapping metrics * Fix removing tags and autocomplete * Simplify debouncing providers * Ensure options are loaded twice and segment is opened * Remove focusing new segments logic (not supported by React's segment) * Clean up * Move debouncing to components * Simplify mapping to selectable options * Add docs * Group all components * Remove unused controller methods * Create Dispatch context * Group Series and Tags Sections * Create Functions section * Create Section component * use getStyles * remove redundant async/await * Remove * remove redundant async/await * Remove console.log and silent test console output * Do not display the name of the selected dropdown option * Move Section to grafana-ui * Update storybook * Simplify SectionLabel * Fix Influx tests * Fix API Extractor warnings * Fix API Extractor warnings * Do not show hidden functions * Use block docs for better doc generation * Handle undefined values provided for autocomplete * Section -> SegmentSection * Simplify section styling * Remove redundant div * Simplify SegmentSection component * Use theme.spacing * Use empty label instead of a single space label Co-authored-by: Giordano Ricci <me@giordanoricci.com>
70 lines
2.0 KiB
TypeScript
70 lines
2.0 KiB
TypeScript
import React, { 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 = React.lazy(async () => {
|
|
// @ts-ignore
|
|
const { default: rst2html } = await import(/* webpackChunkName: "rst2html" */ 'rst2html');
|
|
return {
|
|
default(props: { description?: string }) {
|
|
return <div dangerouslySetInnerHTML={{ __html: rst2html(props.description ?? '') }} />;
|
|
},
|
|
};
|
|
});
|
|
|
|
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>
|
|
);
|
|
};
|