/* * QQQ - Low-code Application Framework for Engineers. * Copyright (C) 2021-2022. Kingsrook, LLC * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States * contact@kingsrook.com * https://github.com/Kingsrook/ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ import Card from "@mui/material/Card"; import Icon from "@mui/material/Icon"; import {useMemo, ReactNode} from "react"; import {Line} from "react-chartjs-2"; import colors from "qqq/components/Temporary/colors"; import MDBox from "qqq/components/Temporary/MDBox"; import MDTypography from "qqq/components/Temporary/MDTypography"; import configs from "qqq/pages/dashboards/Widgets/Configs/LineChartConfigs"; interface Props { icon?: { color?: "primary" | "secondary" | "info" | "success" | "warning" | "error" | "light" | "dark"; component: ReactNode; }; title?: string; description?: string | ReactNode; height?: string | number; chart: { labels: string[]; datasets: { label: string; color?: "primary" | "secondary" | "info" | "success" | "warning" | "error" | "light" | "dark"; data: number[]; }[]; }; [key: string]: any; } function LineChart({icon, title, description, height, chart}: Props): JSX.Element { const chartDatasets = chart.datasets ? chart.datasets.map((dataset) => ({ ...dataset, tension: 0, pointRadius: 3, borderWidth: 4, backgroundColor: "transparent", fill: true, pointBackgroundColor: colors[dataset.color] ? colors[dataset.color || "dark"].main : colors.dark.main, borderColor: colors[dataset.color] ? colors[dataset.color || "dark"].main : colors.dark.main, maxBarThickness: 6, })) : []; const {data, options} = configs(chart.labels || [], chartDatasets); const renderChart = ( {title || description ? ( {icon.component && ( {icon.component} )} {title && {title}} {description} ) : null} {useMemo( () => ( ), [chart, height] )} ); return title || description ? {renderChart} : renderChart; } LineChart.defaultProps = { icon: {color: "info", component: ""}, title: "", description: "", height: "19.125rem", }; export default LineChart;