diff --git a/Client/src/Components/Charts/Gauge/index.jsx b/Client/src/Components/Charts/Gauge/index.jsx index e324a4dcc..0ae872e3f 100644 --- a/Client/src/Components/Charts/Gauge/index.jsx +++ b/Client/src/Components/Charts/Gauge/index.jsx @@ -2,8 +2,8 @@ import { RadialBarChart, RadialBar, ResponsiveContainer } from "recharts"; import PropTypes from "prop-types"; import { useTheme } from "@emotion/react"; -const MINIMUM_VALUE = 0 ; -const MAXIMUM_VALUE = 100 ; +const MINIMUM_VALUE = 0; +const MAXIMUM_VALUE = 100; const DATA = [{ value: MAXIMUM_VALUE }]; const PROGRESS_THRESHOLD = 50; const DEFAULT_CONTAINER_HEIGHT = 160; @@ -11,14 +11,14 @@ const TEXT_POSITIONS = { value: { x: "50%", y: "45%" }, label: { x: "50%", y: "55%" }, }; -const COMMON_RADIALBAR_PROPS = { +const COMMON_RADIAL_BAR_PROPS = { minAngle: 15, clockWise: true, dataKey: "value", cornerRadius: 0, }; -const RADIALBARCHART_PROPS = { +const RADIAL_BAR_CHART_PROPS = { cx: "50%", cy: "50%", innerRadius: "45%", @@ -27,7 +27,7 @@ const RADIALBARCHART_PROPS = { endAngle: -270, }; -const RADIALBAR_OVERLAY_PROPS = { +const RADIAL_BAR_OVERLAY_PROPS = { transform: "rotate(180deg)", position: "absolute", top: "0", @@ -39,6 +39,29 @@ const COMMON_HEADER_PROPS = { dominantBaseline: "middle", }; +/** + * A circular gauge component that displays a progress value and text. + * The gauge fills based on the progress value and changes color at a 50% threshold. + * + * @component + * @param {Object} props - Component props + * @param {number} props.progressValue - The value to display in the gauge (0-100) + * @param {string} props.displayText - The text to display below the progress value + * @param {number} [props.containerHeight=160] - Height of the gauge container in pixels + * @param {Object} [props.gaugeHeader] - Custom styles to apply to the progress value text + * @param {Object} [props.gaugeSubheader] - Custom styles to apply to the display text + * + * @returns {JSX.Element} A circular gauge chart with progress value and text + * + * @example + * + */ const Gauge = ({ progressValue, displayText, @@ -46,17 +69,17 @@ const Gauge = ({ gaugeHeader, gaugeSubheader, }) => { - const theme = useTheme(); + const theme = useTheme(); const myProgressValue = Math.max(MINIMUM_VALUE, Math.min(progressValue, MAXIMUM_VALUE)); return ( PROGRESS_THRESHOLD ? theme.palette.primary.main @@ -66,15 +89,15 @@ const Gauge = ({ data={[{ value: myProgressValue }]} /> {`${myProgressValue}%`} @@ -82,7 +105,7 @@ const Gauge = ({ {...TEXT_POSITIONS.label} role="text" aria-label={`${displayText}`} - style={{...COMMON_HEADER_PROPS, ...theme.chart.subheader, ...gaugeSubheader }} + style={{ ...COMMON_HEADER_PROPS, ...theme.chart.subheader, ...gaugeSubheader }} > {`${displayText}`}