mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-22 16:55:59 +00:00
38 lines
977 B
JavaScript
38 lines
977 B
JavaScript
import React from 'react';
|
|
import _ from 'lodash';
|
|
|
|
function formatSeconds(duration) {
|
|
if (duration == null) return '';
|
|
const hours = _.padStart(Math.floor(duration / 3600).toString(), 2, '0');
|
|
const minutes = _.padStart((Math.floor(duration / 60) % 60).toString(), 2, '0');
|
|
const seconds = _.padStart((duration % 60).toString(), 2, '0');
|
|
return `${hours}:${minutes}:${seconds}`;
|
|
}
|
|
|
|
export default function useTimerLabel() {
|
|
const [duration, setDuration] = React.useState(null);
|
|
const [busy, setBusy] = React.useState(false);
|
|
React.useEffect(() => {
|
|
if (busy) {
|
|
setDuration(0);
|
|
const handle = setInterval(() => setDuration(x => x + 1), 1000);
|
|
return () => window.clearInterval(handle);
|
|
}
|
|
}, [busy]);
|
|
|
|
const start = React.useCallback(() => {
|
|
setBusy(true);
|
|
}, []);
|
|
|
|
const stop = React.useCallback(() => {
|
|
setBusy(false);
|
|
}, []);
|
|
|
|
return {
|
|
start,
|
|
stop,
|
|
text: formatSeconds(duration),
|
|
duration,
|
|
};
|
|
}
|