import React, { useState, useEffect } from "react"; import { Line } from "react-chartjs-2"; import { Chart as ChartJS, CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend, } from "chart.js"; import { Box, Heading, useColorMode } from "@chakra-ui/react"; import ChartsTabs from "../ChartsTabs"; import dayjs from "dayjs"; // Import for date handling import { useGetDailyDataQuery, useGetDateWiseDataQuery, useGetMonthlyDataQuery } from "../../Services/api.service"; import { timeZone } from "../../Constants/Constants"; // Register the components of Chart.js you need ChartJS.register( CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend ); function formatAndSortDataByDayName(data=[]) { console.log("======", data); // Create a shallow copy of the data array before sorting const sortedData = [...data]?.sort((a, b) => a.dayId - b.dayId); return sortedData?.map(item => { return { dayName: item.dayName, year: item.year, transactionCount: item.transactionCount, totalPrice: item.totalPrice, totalGasFee: item.totalGasFee, }; }); } const LineChart = () => { const { colorMode } = useColorMode(); const [selectedValue, setSelectedValue] = useState("24 Hrs"); const [labels, setLabels] = useState([]); const [dataset, setDataset] = useState([]); const { data: monthlyData, isLoading: monthlyDataLoading, refetch } = useGetMonthlyDataQuery(timeZone) const dataSetMonthly = monthlyData?.map((data)=>data?.transactionCount) const dataLableMonthly = monthlyData?.map((data) => data?.monthName) const { data: dailyData, isLoading: dailyDataLoading, } = useGetDailyDataQuery(timeZone) const dataSetDaily = dailyData?.map((data)=>data?.transactionCount) const dataLableDaily = dailyData?.map((data) => data?.hour) const { data: dateData, isLoading: dateDataLoading, } = useGetDateWiseDataQuery(timeZone) console.log(formatAndSortDataByDayName(dateData?.data)); // console.log(formatAndSortDataByDayName(dateData?.data)); const dataSetDate = dateData?.data?.map((data)=>data?.transactionCount) const dataLableDate = dateData?.data?.map((data) => data?.dayName) // const dataSetDate = [...(dateData?.data || [])].reverse().map((data) => data?.transactionCount); // const dataLableDate = [...(dateData?.data || [])].reverse().map((data) => data?.dayName); useEffect(() => { if (selectedValue === "24 Hrs") { // Create hourly labels for 24 hours setLabels(dataLableDaily); // Generate random data for each day setDataset(dataSetDaily); } else if (selectedValue === `${dayjs().daysInMonth()} Days`) { // Create labels for the current month (days) setLabels(dataLableDate); // Generate random data for each day setDataset(dataSetDate); } else if (selectedValue === "12 Months") { // Labels for months (already set up) setLabels(dataLableMonthly); setDataset(dataSetMonthly); } }, [selectedValue]); const data = { labels: labels, datasets: [ { label: "Transaction Data", data: dataset, borderColor: "#978FED", tension: 0.3, pointRadius: 4, pointBackgroundColor: colorMode === "light" ? "#fff" : "#232127", pointBorderColor: "#978FED", pointHoverRadius: 5, pointHoverBackgroundColor: "#978FED", borderWidth: 2, pointBorder: 0, }, ], }; const options = { // animation: { // // Animate the lines progressively // duration: 2000, // Duration of the animation (in milliseconds) // easing: 'easeInOutQuad', // Easing function for smooth animation // x: { // duration: 2000, // Animating x-axis progressively // from: 0, // }, // y: { // duration: 2000, // Animating y-axis progressively // from: 0, // }, // }, responsive: true, plugins: { legend: { display: false, }, tooltip: { callbacks: { beforeLabel: function (tooltipItem) { return `Transactions: $${tooltipItem.raw}`; }, label: function (tooltipItem) { return `Price: $${tooltipItem.raw}`; }, afterLabel: function (tooltipItem) { return `Gas Fee: $${Math.round(tooltipItem.raw * 0.05)}`; }, }, backgroundColor: "#fff", titleColor: "#4B4B4B", bodyColor: "#4B4B4B", displayColors: false, }, }, scales: { y: { beginAtZero: true, ticks: { callback: function (value) { return value / 1000 + "k"; }, }, grid: { drawBorder: false, borderColor: 'transparent' // Remove the border on the Y-axis }, }, x: { grid: { drawBorder: false, borderColor: 'transparent' // Optionally remove the border on the X-axis }, }, }, }; console.log(data); return ( <> Transaction History ); }; export default LineChart;