import React from "react"; import { CircularProgress, CircularProgressLabel, Flex, ScaleFade, } from "@chakra-ui/react"; import { useNuiEvent } from "../hooks/useNuiEvent"; import { debugData } from "../utils/debugData"; import { fetchNui } from "../utils/fetchNui"; interface Props { duration: number; position?: "middle" | "bottom"; percent?: boolean; } debugData([ { action: "circleProgress", data: { duration: 8000, }, }, ]); const CircleProgressbar: React.FC = () => { const [visible, setVisible] = React.useState(false); const [progressDuration, setProgressDuration] = React.useState(0); const [position, setPosition] = React.useState<"middle" | "bottom">("middle"); const [value, setValue] = React.useState(0); const [cancelled, setCancelled] = React.useState(false); const progressComplete = () => { setVisible(false); fetchNui("progressComplete"); }; const progressCancel = () => { setCancelled(true); setValue(99); // Sets the final value to 100% kek setTimeout(() => { setVisible(false); }, 2500); }; useNuiEvent("progressCancel", progressCancel); useNuiEvent("circleProgress", (data) => { if (visible) return; setCancelled(false); setVisible(true); setValue(0); setProgressDuration(data.duration); setPosition(data.position || "middle"); const onePercent = data.duration * 0.01; const updateProgress = setInterval(() => { setValue((previousValue) => { const newValue = previousValue + 1; newValue >= 100 && clearInterval(updateProgress); return newValue; }); }, onePercent); }); return ( {value}% ); }; export default CircleProgressbar;