page.jsx 2,91 ko
Newer Older
"use client";

import React, {useEffect, useState} from "react";
import config from '../config.js';

import FetchService from "./help/fetch-service";
Thibault Fouchet's avatar
Thibault Fouchet a validé
import Donut from "./components/donut.jsx";
import DateInput from "./components/date-input";
import DataForm from "./components/bar-chart/form";
import BarChart from "./components/bar-chart/chart";
Thibault Fouchet's avatar
Thibault Fouchet a validé
import Line_Chart from "./components/line_chart.jsx";
    const [donutValues, setDonutValues] = useState([]);
    const [chartData, setChartData] = useState([]);
Thibault Fouchet's avatar
Thibault Fouchet a validé
    const [lineData, setLineData] = useState([]);
    const [isLoading, setIsLoading] = useState(false);
    const Loader = () => <div>Loading...</div>;
Thibault Fouchet's avatar
Thibault Fouchet a validé
    const handleFormSubmit = async (formData) => {
        setIsLoading(true);
        const data = await FetchService.fetchBarChartData(formData);
Thibault Fouchet's avatar
Thibault Fouchet a validé
        setChartData(data);
        setIsLoading(false);
    };
    const loadInitialBarChartData = async () => {
        setIsLoading(true);
        try {
            const formData = {
                startDate: '2020-01-01',
                endDate: '2022-01-01',
                granularity: 'month'
            };
            const data = await FetchService.fetchBarChartData(formData);
            setChartData(data);
        } catch (error) {
            console.error('Error fetching bar chart data:', error);
        }
        setIsLoading(false);
    };
    useEffect(() => {
            loadInitialBarChartData();
Thibault Fouchet's avatar
Thibault Fouchet a validé
            try {
                const response = await FetchService.getTimesSeries();
Thibault Fouchet's avatar
Thibault Fouchet a validé
                if (!response.ok) {
                    throw new Error(`HTTP error! Status: ${response.status}`);
                }
                const data = await response.json();
                setLineData(data);
            } catch (error) {
                console.error('Error fetching time series data:', error);
Thibault Fouchet's avatar
Thibault Fouchet a validé
            }
Thibault Fouchet's avatar
Thibault Fouchet a validé
            const data = await FetchService.getDonutContent();
            const formattedData = data.map((x) => ({
                id: x.region,
                count: x.occurences
            }));
            setDonutValues(formattedData);
        })();
    }, []);
Thibault Fouchet's avatar
Thibault Fouchet a validé
    return (
        <>
            <div className="card-container">
                <div className="card">
                    <h3>L’évolution du prix de vente moyen du mètre carré </h3>
Thibault Fouchet's avatar
Thibault Fouchet a validé
                    <Line_Chart data={lineData} />
Thibault Fouchet's avatar
Thibault Fouchet a validé
                </div>
                <div className="card">
                    <h3>Nombre des ventes par période</h3>
                    {isLoading && <Loader/>}
                    <DataForm onSubmit={handleFormSubmit}/>
                    <BarChart data={chartData}/>
Thibault Fouchet's avatar
Thibault Fouchet a validé
                <div className="card">
                    <h3>Répartition des ventes par régions</h3>
                    <DateInput/>
                    <Donut data={donutValues}/>
                </div>
            </div>
        </>
    );
Thibault Fouchet's avatar
Thibault Fouchet a validé