import { TimeRange, toUtc, AbsoluteTimeRange } from '@grafana/data'; export const getShiftedTimeRange = (direction: number, origRange: TimeRange): AbsoluteTimeRange => { const range = { from: toUtc(origRange.from), to: toUtc(origRange.to), }; const timespan = (range.to.valueOf() - range.from.valueOf()) / 2; let to: number, from: number; if (direction === -1) { to = range.to.valueOf() - timespan; from = range.from.valueOf() - timespan; } else if (direction === 1) { to = range.to.valueOf() + timespan; from = range.from.valueOf() + timespan; if (to > Date.now() && range.to.valueOf() < Date.now()) { to = Date.now(); from = range.from.valueOf(); } } else { to = range.to.valueOf(); from = range.from.valueOf(); } return { from, to }; }; export const getZoomedTimeRange = (range: TimeRange, factor: number): AbsoluteTimeRange => { const timespan = range.to.valueOf() - range.from.valueOf(); const center = range.to.valueOf() - timespan / 2; // If the timepsan is 0, zooming out would do nothing, so we force a zoom out to 30s const newTimespan = timespan === 0 ? 30000 : timespan * factor; const to = center + newTimespan / 2; const from = center - newTimespan / 2; return { from, to }; };