import React, { memo, useContext, useEffect, useMemo, useState } from "react"; import { Box, styled } from "@mui/system"; import Grid from "@mui/material/Grid2"; import { inputProps } from "../interface/inputfieldProps"; import { useJsonForms, withJsonFormsControlProps } from "@jsonforms/react"; import { DataContext } from "../context/Context"; import { getFieldName } from "../permissions/getFieldName"; import ComponentWrapper from "../common/ComponentWrapper"; import { TooltipProps, Tooltip, tooltipClasses } from "@mui/material"; import Archer from "../assets/Archer"; import Arrow from "../assets/Arrow"; import Target from "../assets/Target"; const StyledTooltip = memo( styled(({ className, theme, ...props }: any) => ( ))(({theme}) => ({ [`& .${tooltipClasses.tooltip}`]: { "& .MuiTooltip-arrow": { color: theme.myTheme.palette.secondary.main, }, backgroundColor: theme.myTheme.palette.secondary.main, color: theme.myTheme.palette.text.primary, fontSize: 11, boxShadow: `1px 2px ${theme.myTheme.palette.secondary.dark}`, }, })) ); const RunnerProgressBar = memo(function ({ data, uischema, path, }: inputProps) { const { pageName, permissions, theme } = useContext(DataContext); const tooltipTitle = useMemo( () => ( <>
Target Achieved
{data?.achieve}
), [data?.achieve] ); const [progress, setProgrss] = useState(0); useEffect(() => { setProgrss(((data?.achieve * 100) / data?.total) || 0); }, [data?.total, data?.achieve]); const getColor = () => { if (progress < 25) { return [`${theme.myTheme.palette.grey[300]}`, `red`]; } else if (progress < 50) { return [`${theme.myTheme.palette.grey[300]}`, `yellow`]; } else { return [`${theme.myTheme.palette.grey[300]}`, `#0d8b92`]; } }; const fieldName = getFieldName(path); const ctx = useJsonForms(); const pathArray = path.split("."); const finalPath = pathArray[pathArray.length - 1]; return ( 100 ? "100%" : `${progress}%`, }, }, animation: `widthAnimationHover ${ (progress > 100 ? 100 : progress) * (1 / 20) }s ease-out 0.2s 1 forwards`, }, }, "&:hover ~ .arrow-parent .arrow": { left: 0, "@keyframes leftAnimationHover": { from: { left: 0 }, to: { left: progress > 100 ? "100%" : `${progress}%` }, }, animation: `leftAnimationHover ${ (progress > 100 ? 100 : progress) * (1 / 20) }s ease-out 0.2s 1 forwards`, }, }} >
100 ? "100%" : `${progress}%`, }, }, animation: `widthAnimation ${ (progress > 100 ? 100 : progress) * (1 / 20) }s ease-out 0s 1 forwards`, backgroundColor: getColor()[1], height: "100%", borderRadius: "10px", marginBottom: "0px", transition: "width 2s ease-out", position: "relative", border: "1px solid transparent", overflow: "hidden", "&:hover": { border: "1px solid black", }, }} >
100 ? "100%" : `${progress}%`, }, }, animation: `leftAnimation ${ (progress > 100 ? 100 : progress) * (1 / 20) }s ease-out 0s 1 forwards`, zIndex: "1", borderRadius: "50%", position: "absolute", transform: "translateX(-100%)", }} >
{uischema?.config?.main?.bottomLabel_1 || "Target"}
{data?.total || data?.bottomLabel_1_value}
{uischema?.config?.main?.bottomLabel_2 || "Achieved"}
{data?.achieve || data?.bottomLabel_2_value}
{uischema?.config?.main?.bottomLabel_3 || "Remaining"}
{Math.max(0, data?.remaining || data?.total - data?.achieve)}
); }); export default withJsonFormsControlProps(RunnerProgressBar);