1
0
mirror of https://github.com/upscayl/upscayl.git synced 2024-12-20 19:35:52 +01:00
upscayl/renderer/components/upscayl-tab/view/ProgressBar.tsx

76 lines
2.3 KiB
TypeScript
Raw Normal View History

2024-08-31 13:05:53 +02:00
import React, { CSSProperties, useEffect, useMemo } from "react";
2023-07-22 13:07:53 +02:00
import Spinner from "../../icons/Spinner";
2024-04-24 13:05:39 +02:00
import Logo from "@/components/icons/Logo";
import { useAtomValue } from "jotai";
import { translationAtom } from "@/atoms/translations-atom";
2022-11-11 21:39:28 +01:00
function ProgressBar({
progress,
doubleUpscaylCounter,
stopHandler,
batchMode,
2023-10-21 15:43:03 +02:00
}: {
progress: string;
doubleUpscaylCounter: number;
stopHandler: () => void;
batchMode: boolean;
}) {
2023-09-09 14:18:00 +02:00
const [batchProgress, setBatchProgress] = React.useState(0);
const t = useAtomValue(translationAtom);
2023-09-09 14:18:00 +02:00
2023-10-21 16:14:42 +02:00
useEffect(() => {
2023-10-21 15:43:03 +02:00
const progressString = progress.trim().replace(/\n/g, "");
// Remove trailing and leading spaces
2023-10-21 16:14:42 +02:00
if (progressString.includes("Successful")) {
2023-09-09 14:18:00 +02:00
setBatchProgress((prev) => prev + 1);
}
}, [progress]);
2024-08-31 13:05:53 +02:00
// const progressStyle = useMemo(() => {
// if (progress.includes("%")) {
// return {
// "--value": parseFloat(progress.replace("%", "")),
// };
// } else if (progress.includes("Success")) {
// return {
// "--value": 100,
// };
// }
// return {
// "--value": 0,
// };
// }, [progress]);
2022-11-11 21:39:28 +01:00
return (
2024-02-15 09:17:11 +01:00
<div className="absolute z-50 flex h-full w-full flex-col items-center justify-center bg-base-300/50 backdrop-blur-lg">
2024-08-31 13:05:53 +02:00
<div className="flex flex-col items-center gap-2 rounded-btn bg-base-100/50 p-4 backdrop-blur-lg">
<Logo className="spinner h-12 w-12" />
<p className="rounded-full px-2 pb-2 font-bold">
{batchMode &&
`${t("APP.INFOS.PROGRESS_BAR.IN_PROGRESS")} ${batchProgress}`}
2023-03-12 08:59:07 +01:00
</p>
2024-08-31 13:05:53 +02:00
<div className="flex flex-col items-center gap-1">
{progress !== "Hold on..." ? (
<p className="text-sm font-bold">
{progress}
{!batchMode &&
doubleUpscaylCounter > 0 &&
"\nPass " + doubleUpscaylCounter}
</p>
) : (
<p className="text-sm font-bold">{progress}</p>
)}
<p className="animate-pulse rounded-full px-2 pb-3 text-xs font-medium text-neutral-content/50">
{t("APP.INFOS.PROGRESS_BAR.PROGRESS_CATCHY")}
2024-08-31 13:05:53 +02:00
</p>
</div>
2024-02-15 09:17:11 +01:00
<button onClick={stopHandler} className="btn btn-outline">
{t("APP.INFOS.PROGRESS_BAR.STOP")}
2023-04-29 19:12:40 +02:00
</button>
2022-11-11 21:39:28 +01:00
</div>
</div>
);
}
export default ProgressBar;