mirror of
https://github.com/grafana/grafana.git
synced 2025-02-12 16:45:43 -06:00
587e4009f3
* Dashboard: started to implement new time picker. * TimePicker: working in full screen (except calendar). * TimePicker: first draft on narrow screen variant. * TimePicker: small adjustments to the narrow design. * TimePicker: enabled range selection and started to style calendar. * TimePicker: applied some more styling. * Calendar: added so the calendar range selection is styled properly. * Calendar: added styling for timepicker calendar in narrow screen. * TimePicker: made it possible to select range from calendar. * TimePicker: made the calendar have previous selected value. * TimePicker: moved calendar to be able to update form state. * TimePicker: calendar is now displayed onFocus or onClick. * TimePicker: calendar will be closed if click outside input. * Calendar: fixed the styling of the calendar in narrow screen. * Calendar: made it work properly with narrow screen. * TimePicker: connected recent to absolute time range. * TimePicker: changed the label on recent ranges. * TimePicker: cleaned up the range list and options. * TimePicker: some more cleaning up. * TimePicker: cleaned up the calendar a bit. * TimePicker: some more refactorings. * TimePicker: refactorings. * TimePicker: styled modal properly. * TimePicker: empty recent list. * TimePicker: width when calendar in full screen. * TimePicker: will validate input value. * TimePicker: removed unused code. * TimePicker: positioning with emotion instead of sass. * Calendar: Made sure we send the dates in the correct order to the calendar. * TimePicker: fixed theme. * TimePicker: fixed positioning of the content. * TimePicker: positioning of narrow. * TimePicker: added some simple tets. * TimePicker: fixed issue with invalid and added error message. * TimePicker: added history. * TimePicker: cleaned up snapshot data. * TimePicker: fixed so we keep the quick values in the input. * TimePicker: fixed the missing styling on UTC. * TimePicker: added missing caret icon. * TimePicker: fixed formatting on recent time ranges. * TimePicker: added missing -. * TimePicker: refactorings after feedback. * TimePicker: renamed reserved prop name. * TimePicker: added missing onChange call. * TimePicker: removed alternative return type. * TimePicker: fixed the sorting order on the recent list. * TimePicker: added useCallback for the onEvent functions. * TimePicker: moving away from default export. * TimePicker: used the isMathString instead of private function. * TimePicker: minor refactoring simplify the code. * TimePicker: Added empty container that will expand when less then 4 recent searches. * TimePicker: changed the top to be absolute relative to the container. * TimePicker: updated snapshots for failing tests. * Fixed shadow * Move it down a bit * added some more tests. * Fixed so we change the anchor point of the time picker in really small screens. * removed memo. * fixed snapshot. * Make sure that we always use the correct timeZone when formatting output. * Fixed form background. * Some minor fixes after demo. * Making sure that empty info box is centered. * updated snapshots for timepicker after css changes. * fixed so we don't overflow when input validation error. * adjusted final things on the time picker. Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
80 lines
2.2 KiB
TypeScript
80 lines
2.2 KiB
TypeScript
// Libaries
|
|
import React, { Component } from 'react';
|
|
|
|
// Types
|
|
import { ExploreId } from 'app/types';
|
|
import { TimeRange, TimeZone, RawTimeRange, dateTimeForTimeZone } from '@grafana/data';
|
|
|
|
// State
|
|
|
|
// Components
|
|
import { TimeSyncButton } from './TimeSyncButton';
|
|
import { TimePickerWithHistory } from 'app/core/components/TimePicker/TimePickerWithHistory';
|
|
|
|
// Utils & Services
|
|
import { getShiftedTimeRange, getZoomedTimeRange } from 'app/core/utils/timePicker';
|
|
|
|
export interface Props {
|
|
exploreId: ExploreId;
|
|
hideText?: boolean;
|
|
range: TimeRange;
|
|
timeZone: TimeZone;
|
|
splitted: boolean;
|
|
syncedTimes: boolean;
|
|
onChangeTimeSync: () => void;
|
|
onChangeTime: (range: RawTimeRange) => void;
|
|
}
|
|
|
|
export class ExploreTimeControls extends Component<Props> {
|
|
onMoveTimePicker = (direction: number) => {
|
|
const { range, onChangeTime, timeZone } = this.props;
|
|
const { from, to } = getShiftedTimeRange(direction, range);
|
|
const nextTimeRange = {
|
|
from: dateTimeForTimeZone(timeZone, from),
|
|
to: dateTimeForTimeZone(timeZone, to),
|
|
};
|
|
|
|
onChangeTime(nextTimeRange);
|
|
};
|
|
|
|
onMoveForward = () => this.onMoveTimePicker(1);
|
|
onMoveBack = () => this.onMoveTimePicker(-1);
|
|
|
|
onChangeTimePicker = (timeRange: TimeRange) => {
|
|
this.props.onChangeTime(timeRange.raw);
|
|
};
|
|
|
|
onZoom = () => {
|
|
const { range, onChangeTime, timeZone } = this.props;
|
|
const { from, to } = getZoomedTimeRange(range, 2);
|
|
const nextTimeRange = {
|
|
from: dateTimeForTimeZone(timeZone, from),
|
|
to: dateTimeForTimeZone(timeZone, to),
|
|
};
|
|
|
|
onChangeTime(nextTimeRange);
|
|
};
|
|
|
|
render() {
|
|
const { range, timeZone, splitted, syncedTimes, onChangeTimeSync, hideText } = this.props;
|
|
const timeSyncButton = splitted ? <TimeSyncButton onClick={onChangeTimeSync} isSynced={syncedTimes} /> : undefined;
|
|
const timePickerCommonProps = {
|
|
value: range,
|
|
timeZone,
|
|
onMoveBackward: this.onMoveBack,
|
|
onMoveForward: this.onMoveForward,
|
|
onZoom: this.onZoom,
|
|
hideText,
|
|
};
|
|
|
|
return (
|
|
<TimePickerWithHistory
|
|
{...timePickerCommonProps}
|
|
timeSyncButton={timeSyncButton}
|
|
isSynced={syncedTimes}
|
|
onChange={this.onChangeTimePicker}
|
|
/>
|
|
);
|
|
}
|
|
}
|