mirror of https://github.com/grafana/grafana
Timeseries: add UI to control the span nulls threshold (#32222)
parent
d33a77a67f
commit
ea186947d2
@ -0,0 +1,65 @@ |
||||
import React from 'react'; |
||||
import { FieldOverrideEditorProps, rangeUtil, SelectableValue } from '@grafana/data'; |
||||
import { HorizontalGroup, Input, RadioButtonGroup } from '@grafana/ui'; |
||||
|
||||
const GAPS_OPTIONS: Array<SelectableValue<boolean | number>> = [ |
||||
{ |
||||
label: 'Never', |
||||
value: false, |
||||
}, |
||||
{ |
||||
label: 'Always', |
||||
value: true, |
||||
}, |
||||
{ |
||||
label: 'Threshold', |
||||
value: 3600000, // 1h
|
||||
}, |
||||
]; |
||||
|
||||
export const SpanNullsEditor: React.FC<FieldOverrideEditorProps<boolean | number, any>> = ({ value, onChange }) => { |
||||
const isThreshold = typeof value === 'number'; |
||||
const formattedTime = isThreshold ? rangeUtil.secondsToHms((value as number) / 1000) : undefined; |
||||
GAPS_OPTIONS[2].value = isThreshold ? (value as number) : 3600000; // 1h
|
||||
|
||||
const checkAndUpdate = (txt: string) => { |
||||
let val: boolean | number = false; |
||||
if (txt) { |
||||
try { |
||||
val = rangeUtil.intervalToSeconds(txt) * 1000; |
||||
} catch (err) { |
||||
console.warn('ERROR', err); |
||||
} |
||||
} |
||||
onChange(val); |
||||
}; |
||||
|
||||
const handleEnterKey = (e: React.KeyboardEvent<HTMLInputElement>) => { |
||||
if (e.key !== 'Enter') { |
||||
return; |
||||
} |
||||
checkAndUpdate((e.target as any).value); |
||||
}; |
||||
|
||||
const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => { |
||||
checkAndUpdate(e.target.value); |
||||
}; |
||||
|
||||
return ( |
||||
<HorizontalGroup> |
||||
<RadioButtonGroup value={value} options={GAPS_OPTIONS} onChange={onChange} /> |
||||
{isThreshold && ( |
||||
<Input |
||||
autoFocus={true} |
||||
placeholder="never" |
||||
width={10} |
||||
defaultValue={formattedTime} |
||||
onKeyDown={handleEnterKey} |
||||
onBlur={handleBlur} |
||||
prefix={<div><</div>} |
||||
spellCheck={false} |
||||
/> |
||||
)} |
||||
</HorizontalGroup> |
||||
); |
||||
}; |
Loading…
Reference in new issue