import React from "react"; import { CircularProgress, CircularProgressLabel, Flex, Text, } from "@chakra-ui/react"; import { useNuiEvent } from "../../hooks/useNuiEvent"; import { debugData } from "../../utils/debugData"; import { fetchNui } from "../../utils/fetchNui"; interface Props { label?: string; duration: number; position?: "middle" | "bottom"; percent?: boolean; } debugData([ { action: "circleProgress", data: { duration: 8000, label: "Using Armour", }, }, ]); 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 [label, setLabel] = React.useState(""); 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 setVisible(false); }; useNuiEvent("progressCancel", progressCancel); useNuiEvent("circleProgress", (data) => { if (visible) return; setCancelled(false); setVisible(true); setValue(0); setLabel(data.label || ""); 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 ( {visible && ( {value}% {label} )} ); }; export default CircleProgressbar;