Files
hpos-web/src/App.js

149 lines
4.7 KiB
JavaScript
Raw Normal View History

import logo from './logo.png';
import './App.css';
2023-07-05 07:12:43 +05:30
import React, { useEffect, useState } from 'react';
import { initializeApp } from "firebase/app";
import { getAnalytics } from "firebase/analytics";
2023-07-07 08:48:14 +05:30
import { getFirestore, collection, getDocs, doc, onSnapshot, query } from "firebase/firestore";
2023-07-07 04:51:55 +05:30
import Card from './components/Card';
2023-07-05 07:12:43 +05:30
2023-07-14 16:56:28 +05:30
// dev and test
// const firebaseConfig = {
// apiKey: "AIzaSyBFl_YkJ5PMIvMY3G70313SyrqemjFnUv8",
// authDomain: "hpos-af3cc.firebaseapp.com",
// projectId: "hpos-af3cc",
// storageBucket: "hpos-af3cc.appspot.com",
// messagingSenderId: "650071678820",
// appId: "1:650071678820:web:ce50538bf46632d46c6471",
// measurementId: "G-6JHQ47S9DD"
// };
// prod
2023-07-05 07:12:43 +05:30
const firebaseConfig = {
2023-07-14 16:56:28 +05:30
apiKey: "AIzaSyBF4pLZReAedU4dWX1eRJNFNIaOIz2xk4s",
authDomain: "hpos-prod.firebaseapp.com",
projectId: "hpos-prod",
storageBucket: "hpos-prod.appspot.com",
messagingSenderId: "1012719870714",
appId: "1:1012719870714:web:fcd00acef93f6612de5f43",
measurementId: "G-B0NZ7DEF69"
2023-07-05 07:12:43 +05:30
};
const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
const db = getFirestore(app);
function App() {
2023-07-05 07:12:43 +05:30
const [mtests, setMtests] = useState([]);
2023-07-07 08:48:14 +05:30
const [totalScreened, setTotalScreened] = useState(0);
2023-07-05 07:12:43 +05:30
const [males, setMales] = useState(0);
2023-07-07 08:48:14 +05:30
const [females, setFemales] = useState(0);
const [positives, setPositives] = useState(0);
2023-07-07 08:48:14 +05:30
const [traits, setTraits] = useState(0);
const [diseases, setDiseases] = useState(0);
const [lastUpdate, setLastUpdate] = useState(Date.now());
2023-07-05 07:12:43 +05:30
useEffect(() => {
2023-07-07 08:48:14 +05:30
const q = query(collection(db, "patientData"));
const unsub = onSnapshot(q, (querySnapshot) => {
const patients = [];
let maleCount = 0;
let femaleCount = 0;
querySnapshot.forEach((document) => {
const patient = document.data();
patients.push(patient);
2023-07-07 09:01:35 +05:30
const { gender } = patient;
2023-07-17 17:17:01 +05:30
if (gender.toLowerCase() === 'male') {
2023-07-07 08:48:14 +05:30
maleCount++;
}
2023-07-17 17:17:01 +05:30
if (gender.toLowerCase() === 'female') {
2023-07-07 08:48:14 +05:30
femaleCount++;
}
});
setTotalScreened(patients.length);
setMales(maleCount);
setFemales(femaleCount);
setLastUpdate(Date.now());
2023-07-07 08:48:14 +05:30
});
}, []);
useEffect(() => {
const q = query(collection(db, "testData"));
const unsub = onSnapshot(q, (querySnapshot) => {
const hposTests = [];
let traitCount = 0;
let diseaseCount = 0;
querySnapshot.forEach((document) => {
const hposTestData = document.data();
hposTests.push(hposTestData);
2023-07-07 09:01:35 +05:30
const { result } = hposTestData;
if (result === 'SICKLECELLTRAIT') {
2023-07-07 08:48:14 +05:30
traitCount++;
}
2023-07-07 09:01:35 +05:30
if (result === 'SICKLECELLDISEASE') {
2023-07-07 08:48:14 +05:30
diseaseCount++;
}
});
setPositives(traitCount + diseaseCount);
2023-07-07 08:48:14 +05:30
setTraits(traitCount);
setDiseases(diseaseCount);
2023-07-08 18:59:29 +05:30
setLastUpdate(Date.now());
2023-07-07 08:48:14 +05:30
});
}, []);
2023-07-05 07:12:43 +05:30
async function getTests() {
2023-07-07 04:51:55 +05:30
try {
const testDataCol = collection(db, 'testData');
const testDataSnapshot = await getDocs(testDataCol);
const testDataList = testDataSnapshot.docs.map(doc => doc.data());
console.log(testDataList);
setMtests(testDataList);
return testDataList;
} catch (err) {
// log error
}
2023-07-05 07:12:43 +05:30
}
return (
<div>
<div class='dashboard-title'>
2023-07-08 18:59:29 +05:30
<img className="nscm-logo" src={require('./logo_nobg.png')} />
2023-07-11 14:30:00 +05:30
<div className='title-text'>HPOS Sickel Cell Test Dashboard</div>
<img className="gov-logo-1" src={require('./gov_logo2.png')} />
2023-07-08 18:59:29 +05:30
<img className="gov-logo" src={require('./gov_logo3.png')} />
2023-07-11 14:30:00 +05:30
<img className="gov-logo-3" src={require('./gov_logo4.png')} />
</div>
2023-07-11 14:30:00 +05:30
2023-07-07 04:51:55 +05:30
<div className='cards-container'>
<div className='cards-row'>
2023-07-07 08:48:14 +05:30
<Card title={"Screened"} counter={totalScreened} color={'black'} backgroundColor={'rgb(254, 240, 227)'} />
<Card title={"Male"} counter={males} backgroundColor={'rgb(234, 240, 230)'} />
<Card title={"Female"} counter={females} backgroundColor={'rgb(234, 246, 245)'} />
2023-07-07 04:51:55 +05:30
</div>
<div className='cards-row'>
<Card title={"Tested Positive"} counter={positives} backgroundColor={'rgb(244,137, 137)'} />
2023-07-07 08:48:14 +05:30
<Card title={"Trait"} counter={traits} backgroundColor={'rgb(237, 190, 190)'} />
<Card title={"Disease"} counter={diseases} backgroundColor={'rgb(249, 195, 195)'} />
2023-07-07 04:51:55 +05:30
</div>
2023-07-11 14:30:00 +05:30
<div className='last-update'>
Updated At: {Date(lastUpdate).toLocaleString()}
</div>
<div className='developer'>
Developed by <img className="dev-logo" src={require('./smi-logo-120x120.webp')} /> ShanMukha
</div>
2023-07-07 04:51:55 +05:30
</div>
</div>
);
}
export default App;