import { LineChart, XAxis, YAxis, Line, Tooltip, Legend } from "recharts";
import { timeFormat } from "d3-time-format";
import useWindowSize from '../../utils/hook-windowresize';
import styles from '../../styles/styles.module.css';
interface ToolTipProps {
active?: boolean,
payload?: {name: string, payload: {value: string, time: Date}}[],
unit?: string
}
const defaultProps = {
active: false,
payload: Object,
unit: '',
};
interface TimedValue {
time: Date;
value: number;
}
interface ChartProps {
data?: TimedValue[],
title?: string,
color: string,
unit: string,
dataCollections?: any[],
}
function CustomizedTooltip(props: ToolTipProps) {
const { active, payload, unit } = props;
if (active && payload && payload[0]) {
const time = payload[0].payload ? timeFormat("%I:%M")(new Date(payload[0].payload.time)) : "";
const tooltipDetails = payload.map(data => {
return
{data.payload.value}{unit} {data.name}
});
return (
{time}
{tooltipDetails}
);
}
return null;
}
CustomizedTooltip.defaultProps = defaultProps;
export default function Chart({ data, title, color, unit, dataCollections }: ChartProps) {
if (!data && !dataCollections) {
return null;
}
const windowSize = useWindowSize();
const chartWidth = windowSize.width * .68;
const chartHeight = chartWidth * .333;
const timeFormatter = (tick: string) => {
return timeFormat("%I:%M")(new Date(tick));
};
let ticks = [];
if (dataCollections.length > 0) {
ticks = dataCollections[0].data?.map((collection) => {
return collection?.time;
})
} else if (data?.length > 0){
ticks = data?.map(item => {
return item?.time;
});
}
const line = data && data?.length > 0 ? (
) : null;
return (
} />
{line}
{dataCollections?.map((s) => (
))}
);
}
Chart.defaultProps = {
dataCollections: [],
data: [],
title: '',
};