a b/client/src/components/APITest.jsx
1
import { useEffect, useState } from "react";
2
import InputField from "./InputField";
3
import { predict } from "../API";
4
import PieChart, { COLORS } from "./PieChart";
5
6
7
function APITest() {
8
    const [inputs, setInputs] = useState({
9
        "BVP_mean": -0.181673262,
10
        "BVP_std": 107.648359,
11
        "EDA_phasic_mean": 1.824289,
12
        "EDA_phasic_min": 0.367977083,
13
        "EDA_smna_min": 0.0000000522965804,
14
        "EDA_tonic_mean": 1.23216412,
15
        "Resp_mean": 0.148183977,
16
        "Resp_std": 2.93561681,
17
        "TEMP_mean": 35.8170909,
18
        "TEMP_std": 0.0126739141,
19
        "TEMP_slope": -0.000169059802,
20
        "BVP_peak_freq": 0.13566987,
21
        "age": 27,
22
        "height": 175.0,
23
        "weight": 80.0
24
    });
25
26
    
27
28
    const [results, setResults] = useState(null);
29
    const [processedResults, setProcessedResults] = useState(null);
30
31
    async function handleSubmit() {
32
        const res = await predict(inputs);
33
        setResults(res);
34
    }
35
36
    useEffect(() => {
37
        if (results) {
38
            let x = [];
39
            for (let i = 0; i < 3; i++) {
40
                let temp = {
41
                    name: results.labels[i],
42
                    prob: results.prob[i]
43
                };
44
                x.push(temp);
45
            }
46
47
            setProcessedResults(x);
48
            console.log(x);
49
        }
50
    }, [results])
51
52
    
53
54
    return (
55
        <>
56
            <div className="text-3xl text-center text-white/60 mt-8 mb-4">
57
                Model Demonstration
58
            </div>
59
            <div className="flex justify-between mx-auto w-[60%] flex-wrap">
60
                <InputField inputs={inputs} setInputs={setInputs} name="BVP_mean" />
61
                <InputField inputs={inputs} setInputs={setInputs} name="BVP_std" />
62
                <InputField inputs={inputs} setInputs={setInputs} name="EDA_phasic_mean" />
63
                <InputField inputs={inputs} setInputs={setInputs} name="EDA_phasic_min" />
64
                <InputField inputs={inputs} setInputs={setInputs} name="EDA_smna_min" />
65
                <InputField inputs={inputs} setInputs={setInputs} name="EDA_tonic_mean" />
66
                <InputField inputs={inputs} setInputs={setInputs} name="Resp_mean" />
67
                <InputField inputs={inputs} setInputs={setInputs} name="TEMP_mean" />
68
                <InputField inputs={inputs} setInputs={setInputs} name="TEMP_std" />
69
                <InputField inputs={inputs} setInputs={setInputs} name="TEMP_slope" />
70
                <InputField inputs={inputs} setInputs={setInputs} name="BVP_peak_freq" />
71
                <div className="w-40"></div>
72
                <InputField inputs={inputs} setInputs={setInputs} name="age" small />
73
                <InputField inputs={inputs} setInputs={setInputs} name="height" small />
74
                <InputField inputs={inputs} setInputs={setInputs} name="weight" small />
75
                <button className="rounded-lg bg-yellow-500 hover:bg-yellow-600 transition duration-150 px-2 h-min py-2 mr-12 text-indigo-900 font-semibold mt-4"
76
                    onClick={handleSubmit}>
77
                    Predict Stress
78
                </button>
79
            </div>
80
81
            {processedResults && (
82
                <div className="flex justify-center items-center text-2xl rounded-xl bg-black/20 mx-16 mt-8">
83
                    <PieChart data={processedResults} width={500} height={500} outerRadius={200} label />
84
                    <div className="flex flex-col gap-4">
85
                        {processedResults.map((entry, index) => (
86
                            <div className="flex gap-4 items-center">
87
                                <div className="w-8 h-6 border-[1px] border-white" style={{backgroundColor: COLORS[index % COLORS.length]}}></div>
88
                                {entry.name} - {entry.prob * 100}%
89
                            </div>
90
                        ))}
91
                        
92
                    </div>
93
                </div>
94
            )}
95
        </>
96
    );
97
}
98
99
export default APITest;