Skip to content
Snippets Groups Projects
chartComponent.js 1.83 KiB
Newer Older
import * as React from "react";
francoisdillinger's avatar
francoisdillinger committed
import { useState, useEffect} from 'react';
import {
  Chart as ChartJS,
  CategoryScale,
  LinearScale,
  PointElement,
  LineElement,
  Title,
  Tooltip,
  Legend,
} from 'chart.js';
import { Line } from 'react-chartjs-2';

ChartJS.register(
  CategoryScale,
  LinearScale,
  PointElement,
  LineElement,
  Title,
  Tooltip,
  Legend
);

export const options = {
  responsive: true,
  plugins: {
    legend: {
      position: 'top',
    },
    title: {
      display: true,
Ethan R Shaw's avatar
Ethan R Shaw committed
      text: 'Utility Usage',
francoisdillinger's avatar
francoisdillinger committed
const ChartComponent = (props) => {
francoisdillinger's avatar
francoisdillinger committed
  const [chartData, setChartData] = useState(null);
francoisdillinger's avatar
francoisdillinger committed
  const fetchData = async () => {
    try {
      const response = await fetch('http://127.0.0.1:5000/api/costData');

      if (!response.ok) {
        throw new Error('Network response was not ok');
      }
      
      const chartData = await response.json();
      setChartData(chartData);
    } catch (error) {
      console.error('There was a problem with the fetch operation:', error);
    }
  };
francoisdillinger's avatar
francoisdillinger committed
  useEffect(() => {
    fetchData();
  }, []);
francoisdillinger's avatar
francoisdillinger committed
  const data = {
    labels: chartData ? chartData.map(data => data[0]) : [],
    datasets: [
      {
        label: 'Power Usage (MW)',
        data: chartData ? chartData.map(data => (data[1] / 1000)) : [],
        borderColor: 'red',
        backgroundColor: 'red',
      },
      {
        label: 'Cost ($)',
        data: chartData ? chartData.map(data => data[2]) : [],
        borderColor: 'green',
        backgroundColor: 'green',
      },
      {
        label: 'Water Usage',
        data: chartData ? chartData.map(data => data[3]) : [],
        borderColor: 'blue',
        backgroundColor: 'blue',
      },
    ],
  };
francoisdillinger's avatar
francoisdillinger committed
  return (
    <div id="chart">
      {chartData && <Line options={options} data={data} />}
    </div>
  );
};
Ethan R Shaw's avatar
Ethan R Shaw committed
export default ChartComponent;
francoisdillinger's avatar
francoisdillinger committed