mirror of https://github.com/morpheus65535/bazarr
Removed dependency over moment
* feat: remove moment dependency * refactor * add tests * small format * rename argument
This commit is contained in:
parent
014ba07aea
commit
6e3422524c
|
@ -49,7 +49,6 @@
|
|||
"husky": "^9.0.11",
|
||||
"jsdom": "^24.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"moment": "^2.30.1",
|
||||
"prettier": "^3.2.5",
|
||||
"prettier-plugin-organize-imports": "^3.2.4",
|
||||
"pretty-quick": "^4.0.0",
|
||||
|
@ -8325,15 +8324,6 @@
|
|||
"ufo": "^1.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/moment": {
|
||||
"version": "2.30.1",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
|
||||
"integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/mri": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
|
||||
|
|
|
@ -53,7 +53,6 @@
|
|||
"husky": "^9.0.11",
|
||||
"jsdom": "^24.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"moment": "^2.30.1",
|
||||
"prettier": "^3.2.5",
|
||||
"prettier-plugin-organize-imports": "^3.2.4",
|
||||
"pretty-quick": "^4.0.0",
|
||||
|
|
|
@ -20,7 +20,6 @@ import {
|
|||
Text,
|
||||
} from "@mantine/core";
|
||||
import { useDocumentTitle } from "@mantine/hooks";
|
||||
import moment from "moment";
|
||||
import {
|
||||
FunctionComponent,
|
||||
PropsWithChildren,
|
||||
|
@ -28,6 +27,13 @@ import {
|
|||
useCallback,
|
||||
useState,
|
||||
} from "react";
|
||||
import {
|
||||
divisorDay,
|
||||
divisorHour,
|
||||
divisorMinute,
|
||||
divisorSecond,
|
||||
formatTime,
|
||||
} from "@/utilities/time";
|
||||
import Table from "./table";
|
||||
|
||||
interface InfoProps {
|
||||
|
@ -98,15 +104,19 @@ const SystemStatusView: FunctionComponent = () => {
|
|||
const update = useCallback(() => {
|
||||
const startTime = status?.start_time;
|
||||
if (startTime) {
|
||||
const duration = moment.duration(
|
||||
moment().utc().unix() - startTime,
|
||||
"seconds",
|
||||
),
|
||||
days = duration.days(),
|
||||
hours = duration.hours().toString().padStart(2, "0"),
|
||||
minutes = duration.minutes().toString().padStart(2, "0"),
|
||||
seconds = duration.seconds().toString().padStart(2, "0");
|
||||
setUptime(days + "d " + hours + ":" + minutes + ":" + seconds);
|
||||
// Current time in seconds
|
||||
const currentTime = Math.floor(Date.now() / 1000);
|
||||
|
||||
const uptimeInSeconds = currentTime - startTime;
|
||||
|
||||
const uptime: string = formatTime(uptimeInSeconds, [
|
||||
{ unit: "d", divisor: divisorDay },
|
||||
{ unit: "h", divisor: divisorHour },
|
||||
{ unit: "m", divisor: divisorMinute },
|
||||
{ unit: "s", divisor: divisorSecond },
|
||||
]);
|
||||
|
||||
setUptime(uptime);
|
||||
}
|
||||
}, [status?.start_time]);
|
||||
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
import {
|
||||
divisorDay,
|
||||
divisorHour,
|
||||
divisorMinute,
|
||||
divisorSecond,
|
||||
formatTime,
|
||||
} from "./time";
|
||||
|
||||
describe("formatTime", () => {
|
||||
it("should format day hour minute and second", () => {
|
||||
const uptimeInSeconds = 3661;
|
||||
|
||||
const formattedTime = formatTime(uptimeInSeconds, [
|
||||
{ unit: "d", divisor: divisorDay },
|
||||
{ unit: "h", divisor: divisorHour },
|
||||
{ unit: "m", divisor: divisorMinute },
|
||||
{ unit: "s", divisor: divisorSecond },
|
||||
]);
|
||||
|
||||
expect(formattedTime).toBe("0d 01:01:01");
|
||||
});
|
||||
|
||||
it("should format multiple digits of days", () => {
|
||||
const uptimeInSeconds = 50203661;
|
||||
|
||||
const formattedTime = formatTime(uptimeInSeconds, [
|
||||
{ unit: "d", divisor: divisorDay },
|
||||
{ unit: "h", divisor: divisorHour },
|
||||
{ unit: "m", divisor: divisorMinute },
|
||||
{ unit: "s", divisor: divisorSecond },
|
||||
]);
|
||||
|
||||
expect(formattedTime).toBe("581d 25:27:41");
|
||||
});
|
||||
|
||||
it("should format time day hour minute", () => {
|
||||
const uptimeInSeconds = 3661;
|
||||
|
||||
const formattedTime = formatTime(uptimeInSeconds, [
|
||||
{ unit: "d", divisor: divisorDay },
|
||||
{ unit: "h", divisor: divisorHour },
|
||||
{ unit: "m", divisor: divisorMinute },
|
||||
]);
|
||||
|
||||
expect(formattedTime).toBe("0d 01:01");
|
||||
});
|
||||
|
||||
it("should format zero uptime", () => {
|
||||
const uptimeInSeconds = 0;
|
||||
|
||||
const formattedTime = formatTime(uptimeInSeconds, [
|
||||
{ unit: "d", divisor: divisorDay },
|
||||
{ unit: "h", divisor: divisorHour },
|
||||
{ unit: "m", divisor: divisorMinute },
|
||||
{ unit: "s", divisor: divisorSecond },
|
||||
]);
|
||||
|
||||
expect(formattedTime).toBe("0d 00:00:00");
|
||||
});
|
||||
});
|
|
@ -0,0 +1,29 @@
|
|||
interface TimeFormat {
|
||||
unit: string;
|
||||
divisor: number;
|
||||
}
|
||||
|
||||
export const divisorDay = 24 * 60 * 60;
|
||||
export const divisorHour = 60 * 60;
|
||||
export const divisorMinute = 60;
|
||||
export const divisorSecond = 1;
|
||||
|
||||
export const formatTime = (
|
||||
timeInSeconds: number,
|
||||
formats: TimeFormat[],
|
||||
): string =>
|
||||
formats.reduce(
|
||||
(formattedTime: string, { unit, divisor }: TimeFormat, index: number) => {
|
||||
const timeValue: number =
|
||||
index === 0
|
||||
? Math.floor(timeInSeconds / divisor)
|
||||
: Math.floor(timeInSeconds / divisor) % 60;
|
||||
return (
|
||||
formattedTime +
|
||||
(index === 0
|
||||
? `${timeValue}${unit} `
|
||||
: `${timeValue.toString().padStart(2, "0")}${index < formats.length - 1 ? ":" : ""}`)
|
||||
);
|
||||
},
|
||||
"",
|
||||
);
|
Loading…
Reference in New Issue