import { Box, Paper, Typography, useMediaQuery, useTheme } from "@mui/material"; import { LineChart } from "@mui/x-charts"; import moment from "moment"; import type { GeneralResponse } from "@api/statistic"; import { FC } from "react"; type GeneralItemsProps = { title: string; general: Record; color: string; numberType: "sum" | "percent" | "time"; }; type GeneralProps = { data: GeneralResponse | null; }; const COLORS: Record = { 0: "#61BB1A", 1: "#7E2AEA", 2: "#FB5607", 3: "#0886FB", }; const dateParser = (object: Record): Record => { const result = {} as Record; for (var key in object) { result[moment.utc(Number(key) * 1000).format("DD/MM/YYYY")] = object[key]; console.log(result); } return result; }; const GeneralItem = ({ title, general, color, numberType, }: GeneralItemsProps) => { const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down(700)); 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); console.log("general", general); console.log(Object.keys(general).length === 0); if (Object.keys(general).length === 0) return ( {`${title} - нет данных`} ); return ( {title} {numberType === "sum" ? numberValue : `${numberValue.toFixed()}%`} moment.utc(Number(value) * 1000).format("DD/MM/YYYY"), }, ]} series={[{ data: Object.values(general) }]} // 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" }, }} /> ); }; export const General: FC = ({ data }) => { const theme = useTheme(); const isTablet = useMediaQuery(theme.breakpoints.down(1000)); const isMobile = useMediaQuery(theme.breakpoints.down(700)); if (!data) { return ( нет данных о ключевых метриках ); } return ( Ключевые метрики v > 0) .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 } } color={COLORS[0]} /> v > 0) .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 } } color={COLORS[1]} /> v > 0) .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 } } color={COLORS[2]} /> v > 0) .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 } } color={COLORS[3]} /> ); };