feat: calculateTime

This commit is contained in:
IlyaDoronin 2024-04-08 17:22:19 +03:00
parent d07acf57fd
commit 07c9bd06cc
2 changed files with 31 additions and 17 deletions

@ -35,8 +35,6 @@ type PaginationProps = {
setPage: (page: number) => void; setPage: (page: number) => void;
}; };
const ANSWERS_PER_PAGE = 5;
const Answer = ({ title, percent, highlight }: AnswerProps) => { const Answer = ({ title, percent, highlight }: AnswerProps) => {
const theme = useTheme(); const theme = useTheme();
@ -263,7 +261,7 @@ export const Answers: FC<AnswersProps> = ({ data }) => {
}, },
}} }}
> >
Заголовок вопроса. {answers[page - 1][0]} Заголовок вопроса. {answers[page - 1]?.[0] ?? ""}
</Typography> </Typography>
<ButtonBase> <ButtonBase>
<DoubleCheckIcon /> <DoubleCheckIcon />
@ -272,16 +270,14 @@ export const Answers: FC<AnswersProps> = ({ data }) => {
<NextIcon /> <NextIcon />
</ButtonBase> </ButtonBase>
</Box> </Box>
{Object.entries(answers[page - 1][1]) {Object.entries(answers[page - 1]?.[1] ?? []).map((element, index) => (
<Answer
.map((element, index) => ( key={index}
<Answer title={element[0]}
key={index} percent={element[1]}
title={element[0]} highlight={!index}
percent={element[1]} />
highlight={!index} ))}
/>
))}
</Paper> </Paper>
<Pagination page={page} setPage={setPage} pagesAmount={answers.length} /> <Pagination page={page} setPage={setPage} pagesAmount={answers.length} />
</Box> </Box>

@ -10,6 +10,7 @@ type GeneralItemsProps = {
general: Record<string, number>; general: Record<string, number>;
color: string; color: string;
numberType: "sum" | "percent" | "time"; numberType: "sum" | "percent" | "time";
calculateTime?: boolean;
}; };
type GeneralProps = { type GeneralProps = {
@ -37,6 +38,7 @@ const GeneralItem = ({
general, general,
color, color,
numberType, numberType,
calculateTime = false,
}: GeneralItemsProps) => { }: GeneralItemsProps) => {
const theme = useTheme(); const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down(700)); const isMobile = useMediaQuery(theme.breakpoints.down(700));
@ -50,12 +52,20 @@ const GeneralItem = ({
0, 0,
) / Object.keys(general).length || Number(0); ) / Object.keys(general).length || Number(0);
console.log("general", general); if (Object.keys(general).length === 0) {
console.log(Object.keys(general).length === 0);
if (Object.keys(general).length === 0)
return ( return (
<Typography textAlign="center">{`${title} - нет данных`}</Typography> <Typography textAlign="center">{`${title} - нет данных`}</Typography>
); );
}
const getCalculatedTime = (time: number) => {
const hours = String(Math.floor(time / 3600)).padStart(2, "0");
const minutes = String(Math.floor((time % 3600) / 60)).padStart(2, "0");
const seconds = String(Math.floor((time % 3600) % 60)).padStart(2, "0");
return `${hours}:${minutes}:${seconds}`;
};
return ( return (
<Paper <Paper
sx={{ sx={{
@ -76,7 +86,13 @@ const GeneralItem = ({
moment.utc(Number(value) * 1000).format("DD/MM/YYYY"), moment.utc(Number(value) * 1000).format("DD/MM/YYYY"),
}, },
]} ]}
series={[{ data: Object.values(general) }]} series={[
{
data: Object.values(general),
valueFormatter: (value) =>
calculateTime ? getCalculatedTime(value) : String(value),
},
]}
// dataset={Object.entries(general).map(([, v]) => moment.unix(v).format("ss/mm/HH")).reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {})} // dataset={Object.entries(general).map(([, v]) => moment.unix(v).format("ss/mm/HH")).reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {})}
height={220} height={220}
colors={[color]} colors={[color]}
@ -101,6 +117,7 @@ export const General: FC<GeneralProps> = ({ data }) => {
</Typography> </Typography>
); );
} }
return ( return (
<Box sx={{ marginTop: "45px" }}> <Box sx={{ marginTop: "45px" }}>
<Typography <Typography
@ -158,6 +175,7 @@ export const General: FC<GeneralProps> = ({ data }) => {
<GeneralItem <GeneralItem
title="Среднее время прохождения квиза" title="Среднее время прохождения квиза"
numberType="time" numberType="time"
calculateTime
general={ general={
Object.entries(data.AvTime) Object.entries(data.AvTime)
.filter(([, v]) => v > 0) .filter(([, v]) => v > 0)