44 * you may not use this file except in compliance with the Elastic License.
55 */
66
7- import { EuiSuperDatePicker , OnRefreshChangeProps , OnTimeChangeProps } from '@elastic/eui' ;
8- import React from 'react' ;
7+ import {
8+ EuiSuperDatePicker ,
9+ OnRefreshChangeProps ,
10+ OnTimeChangeProps ,
11+ EuiSuperDatePickerCommonRange ,
12+ } from '@elastic/eui' ;
13+ import React , { useCallback } from 'react' ;
914import euiStyled from '../../../../../../common/eui_styled_components' ;
1015import { MetricsTimeInput } from '../containers/with_metrics_time' ;
16+ import { useKibanaUiSetting } from '../../../utils/use_kibana_ui_setting' ;
1117
1218interface MetricsTimeControlsProps {
1319 currentTimeRange : MetricsTimeInput ;
@@ -19,42 +25,71 @@ interface MetricsTimeControlsProps {
1925 onRefresh : ( ) => void ;
2026}
2127
22- export class MetricsTimeControls extends React . Component < MetricsTimeControlsProps > {
23- public render ( ) {
24- const { currentTimeRange, isLiveStreaming, refreshInterval } = this . props ;
25- return (
26- < MetricsTimeControlsContainer >
27- < EuiSuperDatePicker
28- start = { currentTimeRange . from }
29- end = { currentTimeRange . to }
30- isPaused = { ! isLiveStreaming }
31- refreshInterval = { refreshInterval ? refreshInterval : 0 }
32- onTimeChange = { this . handleTimeChange }
33- onRefreshChange = { this . handleRefreshChange }
34- onRefresh = { this . props . onRefresh }
35- />
36- </ MetricsTimeControlsContainer >
37- ) ;
38- }
39-
40- private handleTimeChange = ( { start, end } : OnTimeChangeProps ) => {
41- this . props . onChangeTimeRange ( {
42- from : start ,
43- to : end ,
44- interval : '>=1m' ,
45- } ) ;
46- } ;
47-
48- private handleRefreshChange = ( { isPaused, refreshInterval } : OnRefreshChangeProps ) => {
49- if ( isPaused ) {
50- this . props . setAutoReload ( false ) ;
51- } else {
52- this . props . setRefreshInterval ( refreshInterval ) ;
53- this . props . setAutoReload ( true ) ;
54- }
55- } ;
28+ interface QueryRange {
29+ from : string ;
30+ to : string ;
31+ display : string ;
5632}
5733
34+ export const MetricsTimeControls = ( props : MetricsTimeControlsProps ) => {
35+ const [ timepickerQuickRanges ] = useKibanaUiSetting ( 'timepicker:quickRanges' ) ;
36+ const {
37+ onChangeTimeRange,
38+ onRefresh,
39+ currentTimeRange,
40+ isLiveStreaming,
41+ refreshInterval,
42+ setAutoReload,
43+ setRefreshInterval,
44+ } = props ;
45+
46+ const commonlyUsedRanges : EuiSuperDatePickerCommonRange [ ] = timepickerQuickRanges
47+ ? timepickerQuickRanges . map ( ( r : QueryRange ) => ( {
48+ start : r . from ,
49+ end : r . to ,
50+ label : r . display ,
51+ } ) )
52+ : [ ] ;
53+
54+ const handleTimeChange = useCallback (
55+ ( { start, end } : OnTimeChangeProps ) => {
56+ onChangeTimeRange ( {
57+ from : start ,
58+ to : end ,
59+ interval : '>=1m' ,
60+ } ) ;
61+ } ,
62+ [ onChangeTimeRange ]
63+ ) ;
64+
65+ const handleRefreshChange = useCallback (
66+ ( { isPaused, refreshInterval : _refreshInterval } : OnRefreshChangeProps ) => {
67+ if ( isPaused ) {
68+ setAutoReload ( false ) ;
69+ } else {
70+ setRefreshInterval ( _refreshInterval ) ;
71+ setAutoReload ( true ) ;
72+ }
73+ } ,
74+ [ setAutoReload , setRefreshInterval ]
75+ ) ;
76+
77+ return (
78+ < MetricsTimeControlsContainer >
79+ < EuiSuperDatePicker
80+ start = { currentTimeRange . from }
81+ end = { currentTimeRange . to }
82+ isPaused = { ! isLiveStreaming }
83+ refreshInterval = { refreshInterval ? refreshInterval : 0 }
84+ onTimeChange = { handleTimeChange }
85+ onRefreshChange = { handleRefreshChange }
86+ onRefresh = { onRefresh }
87+ commonlyUsedRanges = { commonlyUsedRanges }
88+ />
89+ </ MetricsTimeControlsContainer >
90+ ) ;
91+ } ;
92+
5893const MetricsTimeControlsContainer = euiStyled . div `
5994 max-width: 750px;
6095` ;
0 commit comments