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 * Rename .tsx -> .ts * Update types * Use ?? instead of || + add test for mapping options * Use const (let is not needed here) * Revert test name change * Allow removing only optional params and mark additional params as optional (only the first one is required) * Use theme.typography.bodySmall.fontSize Co-authored-by: Giordano Ricci <me@giordanoricci.com>
77 lines
2.0 KiB
TypeScript
77 lines
2.0 KiB
TypeScript
import React from 'react';
|
|
import { Segment, SegmentInput, useStyles2 } from '@grafana/ui';
|
|
import { GrafanaTheme2, SelectableValue } from '@grafana/data';
|
|
import { css } from '@emotion/css';
|
|
|
|
export type EditableParam = {
|
|
name: string;
|
|
value: string;
|
|
optional: boolean;
|
|
multiple: boolean;
|
|
options: Array<SelectableValue<string>>;
|
|
};
|
|
|
|
type FieldEditorProps = {
|
|
editableParam: EditableParam;
|
|
onChange: (value: string) => void;
|
|
onExpandedChange: (expanded: boolean) => void;
|
|
autofocus: boolean;
|
|
};
|
|
|
|
/**
|
|
* Render a function parameter with a segment dropdown for multiple options or simple input.
|
|
*/
|
|
export function FunctionParamEditor({ editableParam, onChange, onExpandedChange, autofocus }: FieldEditorProps) {
|
|
const styles = useStyles2(getStyles);
|
|
|
|
if (editableParam.options?.length > 0) {
|
|
return (
|
|
<Segment
|
|
autofocus={autofocus}
|
|
value={editableParam.value}
|
|
inputPlaceholder={editableParam.name}
|
|
className={styles.segment}
|
|
options={editableParam.options}
|
|
placeholder={' +' + editableParam.name}
|
|
onChange={(value) => {
|
|
onChange(value.value || '');
|
|
}}
|
|
onExpandedChange={onExpandedChange}
|
|
inputMinWidth={150}
|
|
allowCustomValue={true}
|
|
allowEmptyValue={true}
|
|
></Segment>
|
|
);
|
|
} else {
|
|
return (
|
|
<SegmentInput
|
|
autofocus={autofocus}
|
|
className={styles.input}
|
|
value={editableParam.value || ''}
|
|
placeholder={' +' + editableParam.name}
|
|
inputPlaceholder={editableParam.name}
|
|
onChange={(value) => {
|
|
onChange(value.toString());
|
|
}}
|
|
onExpandedChange={onExpandedChange}
|
|
// input style
|
|
style={{ height: '25px', paddingTop: '2px', marginTop: '2px', paddingLeft: '4px', minWidth: '100px' }}
|
|
></SegmentInput>
|
|
);
|
|
}
|
|
}
|
|
|
|
const getStyles = (theme: GrafanaTheme2) => ({
|
|
segment: css({
|
|
margin: 0,
|
|
padding: 0,
|
|
}),
|
|
input: css`
|
|
margin: 0;
|
|
padding: 0;
|
|
input {
|
|
height: 25px;
|
|
},
|
|
`,
|
|
});
|