feat: calculateTime
This commit is contained in:
parent
d07acf57fd
commit
07c9bd06cc
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user