diff --git a/src/pages/Analytics/Analytics.tsx b/src/pages/Analytics/Analytics.tsx index 6f6096ec..74c92a1c 100644 --- a/src/pages/Analytics/Analytics.tsx +++ b/src/pages/Analytics/Analytics.tsx @@ -113,6 +113,7 @@ export default function Analytics() { } }; + console.log(general); const now = moment(); return ( diff --git a/src/pages/Analytics/Answers/Answers.tsx b/src/pages/Analytics/Answers/Answers.tsx index 4e3cc199..ad03fab9 100644 --- a/src/pages/Analytics/Answers/Answers.tsx +++ b/src/pages/Analytics/Answers/Answers.tsx @@ -270,7 +270,8 @@ export const Answers: FC = ({ data }) => { color: theme.palette.brightPurple.main, }, }} - >Заголовок вопроса. + > + Заголовок вопроса. {currentAnswer?.[0].split("(")[0].trim() ? ` ${currentAnswer?.[0]}` : "Без заголовка"} diff --git a/src/pages/Analytics/General.tsx b/src/pages/Analytics/General.tsx index 616230fd..557330b8 100644 --- a/src/pages/Analytics/General.tsx +++ b/src/pages/Analytics/General.tsx @@ -11,6 +11,7 @@ type GeneralItemsProps = { color: string; numberType: "sum" | "percent" | "time"; calculateTime?: boolean; + conversionValue?: number; }; type GeneralProps = { @@ -33,12 +34,20 @@ const dateParser = (object: Record): Record => { return result; }; +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}`; +}; const GeneralItem = ({ title, general, color, numberType, calculateTime = false, + conversionValue, }: GeneralItemsProps) => { const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down(700)); @@ -46,13 +55,14 @@ const GeneralItem = ({ const numberValue = numberType === "sum" ? Object.values(general).reduce((total, item) => total + item, 0) - : 0; - Object.entries(general).reduce( - (total, [key, value]) => total + (value / Number(key)) * 100, - 0, - ) / Object.keys(general).length || Number(0); + : title === "Конверсия" + ? conversionValue + : 0; - if (Object.keys(general).length === 0) { + if ( + Object.keys(general).length === 0 || + Object.values(general).every((x) => x === 0) + ) { return ( {`${title} - нет данных`} ); @@ -76,7 +86,7 @@ const GeneralItem = ({ > {title} - {numberType === "percent" ? `${numberValue.toFixed()}%` : numberValue} + {numberType === "percent" ? `${numberValue.toFixed(2)}%` : numberValue} - calculateTime ? getCalculatedTime(value) : String(value), + calculateTime ? getCalculatedTime(value) : String(value.toFixed(2)), }, ]} - // 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} + colors={[color]} + sx={{ + transform: isMobile ? "scale(1.1)" : "scale(1.2)", + "& .MuiChartsAxis-tickContainer": { display: "none" }, + }} + /> + + ); +}; +const GeneralItemTimeConv = ({ + title, + general, + color, + numberType, + calculateTime = false, + conversionValue, +}: GeneralItemsProps) => { + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down(700)); + + const data = Object.entries(general) + .sort((a, b) => a[0] - b[0]); + + const days = [...data].map(e => e[0]) + + let buffer = 0 + + const time = [...data].map(e => { + if (e[1] > 0) { + buffer = e[1] + } + return buffer + }) + + + console.log("data", data) + console.log("time", time.reduce((a, b) => (Number(a) + Number(b)), 0)) + console.log("time", getCalculatedTime(time.reduce((a, b) => (Number(a) + Number(b)), 0))) + console.log("days", days.length) + const numberValue = calculateTime ? + ( + (time.reduce((a, b) => (Number(a) + Number(b)), 0)) + / + (days.length) + ) || 0 + : + conversionValue + + if ( + Object.keys(general).length === 0 || + Object.values(general).every((x) => x === 0) + ) { + return ( + {`${title} - нет данных`} + ); + } + + + return ( + + {title} + + {calculateTime ? `${getCalculatedTime(numberValue)} с` : `${numberValue.toFixed(2)}%`} + + + moment.utc(Number(value) * 1000).format("DD/MM/YYYY"), + }, + ]} + series={[ + { + data: Object.values(time), + valueFormatter: (value) => { + console.log("log", value) + return calculateTime ? getCalculatedTime(value) : String(value.toFixed(2)) + } + , + }, + ]} + // dataset={Object.entries(general).map(([, v]) => moment.unix(v).format("ss:mm:HH")).reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {})} height={220} colors={[color]} sx={{ @@ -117,7 +217,13 @@ export const General: FC = ({ data }) => { ); } + const conversionValue = + (Object.values(data.Result).reduce((total, item) => total + item, 0) / + Object.values(data.Open).reduce((total, item) => total + item, 0)) * + 100; + console.log(conversionValue); + // console.log(data.Result) return ( = ({ data }) => { v > 0) - .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 } - } + general={data.Open} color={COLORS[0]} /> v > 0) - .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 } - } + general={data.Result} color={COLORS[1]} /> - v > 0) - .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 } - } + conversionValue={conversionValue} + general={data.Conversion} color={COLORS[2]} /> - v > 0) - .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 } - } + general={data.AvTime} color={COLORS[3]} /> diff --git a/src/pages/Questions/PageOptions/PageOptions.tsx b/src/pages/Questions/PageOptions/PageOptions.tsx index f591f745..39645770 100644 --- a/src/pages/Questions/PageOptions/PageOptions.tsx +++ b/src/pages/Questions/PageOptions/PageOptions.tsx @@ -66,7 +66,7 @@ export default function PageOptions({ disableInput, question }: Props) { placeholder={"Можно добавить текст"} value={question.content.text} onChange={({ target }) => setText(target.value)} - maxLength={50} + maxLength={700} /> diff --git a/src/pages/createQuize/MyQuizzesFull.tsx b/src/pages/createQuize/MyQuizzesFull.tsx index 212a5c58..a41366bf 100644 --- a/src/pages/createQuize/MyQuizzesFull.tsx +++ b/src/pages/createQuize/MyQuizzesFull.tsx @@ -108,7 +108,7 @@ export default function MyQuizzesFull({ ( (quiz.passed_count / quiz.session_count) * 100 - ).toFixed(1), + ).toFixed(2), ) : 0 }