mirror of
https://github.com/grafana/grafana.git
synced 2025-01-15 19:22:34 -06:00
1e74037eae
* refactor aliasBy and PopoverCtrl components * refactor Aggregations component * refactor MetricSelect component * refactor UserProvider * popoverCtr: remove redundant logic * simplified the MetricsSelect a bit. * skipping testing of internal component logic. * changed to componentWillMount. * changed elapsed time to a functional component. * rewrote the tests. * fixed missing test title. * fixed a tiny issue with elapsed time. * rename of field. Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
36 lines
841 B
TypeScript
36 lines
841 B
TypeScript
import React, { FC } from 'react';
|
|
import { toDuration } from '@grafana/data';
|
|
|
|
export interface TimeProps {
|
|
timeInMs: number;
|
|
className?: string;
|
|
humanize?: boolean;
|
|
}
|
|
|
|
export const Time: FC<TimeProps> = ({ timeInMs, className, humanize }) => {
|
|
return <span className={`elapsed-time ${className}`}>{formatTime(timeInMs, humanize)}</span>;
|
|
};
|
|
|
|
const formatTime = (timeInMs: number, humanize = false): string => {
|
|
const inSeconds = timeInMs / 1000;
|
|
|
|
if (!humanize) {
|
|
return `${inSeconds.toFixed(1)}s`;
|
|
}
|
|
|
|
const duration = toDuration(inSeconds, 'seconds');
|
|
const hours = duration.hours();
|
|
const minutes = duration.minutes();
|
|
const seconds = duration.seconds();
|
|
|
|
if (hours) {
|
|
return `${hours}h ${minutes}m ${seconds}s`;
|
|
}
|
|
|
|
if (minutes) {
|
|
return `${minutes}m ${seconds}s`;
|
|
}
|
|
|
|
return `${seconds}s`;
|
|
};
|