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);