mirror of
https://github.com/grafana/grafana.git
synced 2025-02-20 11:48:34 -06:00
114 lines
3.2 KiB
TypeScript
114 lines
3.2 KiB
TypeScript
// Libaries
|
|
import React, { Component } from 'react';
|
|
import { dateMath } from '@grafana/data';
|
|
|
|
// Types
|
|
import { DashboardModel } from '../../state';
|
|
import { LocationState } from 'app/types';
|
|
import { TimeRange, TimeOption, RawTimeRange } from '@grafana/data';
|
|
|
|
// State
|
|
import { updateLocation } from 'app/core/actions';
|
|
|
|
// Components
|
|
import { TimePicker, RefreshPicker } from '@grafana/ui';
|
|
|
|
// Utils & Services
|
|
import { getTimeSrv, TimeSrv } from 'app/features/dashboard/services/TimeSrv';
|
|
import { defaultSelectOptions } from '@grafana/ui/src/components/TimePicker/TimePicker';
|
|
|
|
export interface Props {
|
|
$injector: any;
|
|
dashboard: DashboardModel;
|
|
updateLocation: typeof updateLocation;
|
|
location: LocationState;
|
|
}
|
|
|
|
export class DashNavTimeControls extends Component<Props> {
|
|
timeSrv: TimeSrv = getTimeSrv();
|
|
$rootScope = this.props.$injector.get('$rootScope');
|
|
|
|
get refreshParamInUrl(): string {
|
|
return this.props.location.query.refresh as string;
|
|
}
|
|
|
|
onChangeRefreshInterval = (interval: string) => {
|
|
this.timeSrv.setAutoRefresh(interval);
|
|
this.forceUpdate();
|
|
};
|
|
|
|
onRefresh = () => {
|
|
this.timeSrv.refreshDashboard();
|
|
return Promise.resolve();
|
|
};
|
|
|
|
onMoveBack = () => {
|
|
this.$rootScope.appEvent('shift-time', -1);
|
|
};
|
|
onMoveForward = () => {
|
|
this.$rootScope.appEvent('shift-time', 1);
|
|
};
|
|
|
|
onChangeTimePicker = (timeRange: TimeRange) => {
|
|
const { dashboard } = this.props;
|
|
const panel = dashboard.timepicker;
|
|
const hasDelay = panel.nowDelay && timeRange.raw.to === 'now';
|
|
|
|
const adjustedFrom = dateMath.isMathString(timeRange.raw.from) ? timeRange.raw.from : timeRange.from;
|
|
const adjustedTo = dateMath.isMathString(timeRange.raw.to) ? timeRange.raw.to : timeRange.to;
|
|
const nextRange = {
|
|
from: adjustedFrom,
|
|
to: hasDelay ? 'now-' + panel.nowDelay : adjustedTo,
|
|
};
|
|
|
|
this.timeSrv.setTime(nextRange);
|
|
};
|
|
|
|
onZoom = () => {
|
|
this.$rootScope.appEvent('zoom-out', 2);
|
|
};
|
|
|
|
setActiveTimeOption = (timeOptions: TimeOption[], rawTimeRange: RawTimeRange): TimeOption[] => {
|
|
return timeOptions.map(option => {
|
|
if (option.to === rawTimeRange.to && option.from === rawTimeRange.from) {
|
|
return {
|
|
...option,
|
|
active: true,
|
|
};
|
|
}
|
|
return {
|
|
...option,
|
|
active: false,
|
|
};
|
|
});
|
|
};
|
|
|
|
render() {
|
|
const { dashboard } = this.props;
|
|
const intervals = dashboard.timepicker.refresh_intervals;
|
|
const timePickerValue = this.timeSrv.timeRange();
|
|
const timeZone = dashboard.getTimezone();
|
|
|
|
return (
|
|
<div className="dashboard-timepicker-wrapper">
|
|
<TimePicker
|
|
value={timePickerValue}
|
|
onChange={this.onChangeTimePicker}
|
|
timeZone={timeZone}
|
|
onMoveBackward={this.onMoveBack}
|
|
onMoveForward={this.onMoveForward}
|
|
onZoom={this.onZoom}
|
|
selectOptions={this.setActiveTimeOption(defaultSelectOptions, timePickerValue.raw)}
|
|
/>
|
|
<RefreshPicker
|
|
onIntervalChanged={this.onChangeRefreshInterval}
|
|
onRefresh={this.onRefresh}
|
|
value={dashboard.refresh}
|
|
intervals={intervals}
|
|
tooltip="Refresh dashboard"
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
}
|