39 lines
1.6 KiB
TypeScript
39 lines
1.6 KiB
TypeScript
// Metro module 12016 (f12017).
|
|
import { useEffect, useState } from "react";
|
|
import Durations from "../../../utils/Durations";
|
|
import { formatTimestampToA11yLabel } from "../../content_inventory/utils";
|
|
import { Interval } from "../../../_bundle/Timeout";
|
|
export default function useActivityTimer({ start, end }) {
|
|
let setState;
|
|
setState = void 0;
|
|
const [state] = useState(new Interval());
|
|
let state2;
|
|
[state2, setState] = useState(() => Date.now());
|
|
useEffect(() => {
|
|
state.start(Durations.Millis.HALF_SECOND, () => setState(Date.now()));
|
|
return () => state.stop();
|
|
}, [state]);
|
|
const duration = (end - start) / Durations.Millis.SECOND;
|
|
const elapsed = Math.max(Math.min((state2 - start) / Durations.Millis.SECOND, duration), 0);
|
|
return {
|
|
elapsed,
|
|
duration,
|
|
percentage: Math.max(Math.min(elapsed / duration, 1), 0)
|
|
};
|
|
};
|
|
export function formatTime(a0) {
|
|
const r23 = Math.floor(a0) % Durations.Seconds.MINUTE;
|
|
const r34 = Math.floor(a0 / Durations.Seconds.MINUTE) % Durations.Seconds.MINUTE;
|
|
const r42 = Math.floor(a0 / Durations.Seconds.HOUR);
|
|
return r42 === 0 ? `${String(r34).padStart(2, "0")}:${String(r23).padStart(2, "0")}` : `${String(r42).padStart(2, "0")}:${String(r34).padStart(2, "0")}:${String(r23).padStart(2, "0")}`;
|
|
}
|
|
export function formatTimeForA11yLabel(a0) {
|
|
const seconds = Math.floor(a0) % Durations.Seconds.MINUTE;
|
|
const minutes = Math.floor(a0 / Durations.Seconds.MINUTE) % Durations.Seconds.MINUTE;
|
|
return formatTimestampToA11yLabel({
|
|
hours: Math.floor(a0 / Durations.Seconds.HOUR),
|
|
minutes,
|
|
seconds
|
|
});
|
|
}
|