import React, { memo, useCallback } from 'react'; import { usePrevious } from 'react-use'; import { isEqual } from 'lodash'; import { css, cx } from '@emotion/css'; import { InlineFormLabel, RadioButtonGroup } from '@grafana/ui'; import { PromQuery } from '../types'; import { PromExemplarField } from './PromExemplarField'; import { PrometheusDatasource } from '../datasource'; export interface PromExploreExtraFieldProps { query: PromQuery; onChange: (value: PromQuery) => void; onRunQuery: () => void; datasource: PrometheusDatasource; } export const PromExploreExtraField: React.FC = memo( ({ query, datasource, onChange, onRunQuery }) => { const rangeOptions = [ { value: 'range', label: 'Range', description: 'Run query over a range of time.' }, { value: 'instant', label: 'Instant', description: 'Run query against a single point in time. For this query, the "To" time is used.', }, { value: 'both', label: 'Both', description: 'Run an Instant query and a Range query.' }, ]; const prevQuery = usePrevious(query); const onExemplarChange = useCallback( (exemplar: boolean) => { if (!isEqual(query, prevQuery) || exemplar !== query.exemplar) { onChange({ ...query, exemplar }); } }, [prevQuery, query, onChange] ); function onChangeQueryStep(interval: string) { onChange({ ...query, interval }); } function onStepChange(e: React.SyntheticEvent) { if (e.currentTarget.value !== query.interval) { onChangeQueryStep(e.currentTarget.value); } } function onReturnKeyDown(e: React.KeyboardEvent) { if (e.key === 'Enter' && e.shiftKey) { onRunQuery(); } } function onQueryTypeChange(queryType: string) { let nextQuery; if (queryType === 'instant') { nextQuery = { ...query, instant: true, range: false }; } else if (queryType === 'range') { nextQuery = { ...query, instant: false, range: true }; } else { nextQuery = { ...query, instant: true, range: true }; } onChange(nextQuery); } return (
{/*Query type field*/}
Query type
{/*Step field*/}
Min step
); } ); export const testIds = { extraFieldEditor: 'prom-editor-extra-field', stepField: 'prom-editor-extra-field-step', queryTypeField: 'prom-editor-extra-field-query-type', };