aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'frontend')
-rw-r--r--frontend/public/round_expand_less_white_18dp.pngbin0 -> 170 bytes
-rw-r--r--frontend/public/round_expand_more_white_18dp.pngbin0 -> 166 bytes
-rw-r--r--frontend/src/Hub.js26
-rw-r--r--frontend/src/HubList.js43
-rw-r--r--frontend/src/SECAPIData.js8
5 files changed, 72 insertions, 5 deletions
diff --git a/frontend/public/round_expand_less_white_18dp.png b/frontend/public/round_expand_less_white_18dp.png
new file mode 100644
index 0000000..a64f430
--- /dev/null
+++ b/frontend/public/round_expand_less_white_18dp.png
Binary files differ
diff --git a/frontend/public/round_expand_more_white_18dp.png b/frontend/public/round_expand_more_white_18dp.png
new file mode 100644
index 0000000..f8c7213
--- /dev/null
+++ b/frontend/public/round_expand_more_white_18dp.png
Binary files differ
diff --git a/frontend/src/Hub.js b/frontend/src/Hub.js
new file mode 100644
index 0000000..982ffee
--- /dev/null
+++ b/frontend/src/Hub.js
@@ -0,0 +1,26 @@
+// React import
+import { useState } from "react";
+
+/**
+ * Componenet for checkins. Has a toggle to show more info.
+ * @param {Object} props The props of the component.
+ * @returns {import('react').HtmlHTMLAttributes} A list element holding a checkin's info.
+ */
+function Hub(props) {
+ // State - toggled
+ const [isToggled, setIsToggled] = useState(false);
+
+ return (
+ <li className='Checkin'>
+ <div className="Img-flex">
+ <span><span className="Clickable-name" onClick= {(e) => console.log(props.name)}>{props.name}</span> has {props.value}</span>
+ <img className="Img-btn" hidden={isToggled} onClick={() => setIsToggled((toggle) => !toggle)} src="/round_expand_more_white_18dp.png" alt="image"/>
+ <img className="Img-btn" hidden={!isToggled} onClick={() => setIsToggled((toggle) => !toggle)} src="/round_expand_less_white_18dp.png" alt="image"/>
+ </div>
+ <div hidden={!isToggled}>
+ Testing field...
+ </div>
+ </li>);
+}
+
+export default Hub; \ No newline at end of file
diff --git a/frontend/src/HubList.js b/frontend/src/HubList.js
new file mode 100644
index 0000000..9947d5e
--- /dev/null
+++ b/frontend/src/HubList.js
@@ -0,0 +1,43 @@
+// React and component imports
+import { useEffect, useState } from "react";
+import Hub from './Hub';
+
+/**
+ * Component that build the checkin list and displays checkin info.
+ * @returns {import('react').HtmlHTMLAttributes} A div with the checkins
+ * in a vertical layout.
+ */
+function HubList(props) {
+ const [hubItems, setHubItems] = useState([]);
+
+ /**
+ * Loads new the checkins into the current cache/map of checkins.
+ */
+ const updateHubItems = () => {
+ let tempCheckinItems = [];
+ const sorted = Object.entries(props.data).sort(([,a],[,b]) => b-a);
+ console.log(sorted);
+ for (const [key, value] of sorted) {
+ tempCheckinItems.push(
+ <Hub name={key} value={value}></Hub>
+ );
+ }
+ setHubItems(tempCheckinItems);
+ }
+
+ // React hook that queries the checkin database every 5 seconds.
+ useEffect(() => {
+ updateHubItems();
+ }, [props.data]);
+
+ return (
+ <div className="User-checkin">
+ <div className="Checkins">
+ <h2>Hubs and Suspicion</h2>
+ <ul className='Checkin-list'>{hubItems}</ul>
+ </div>
+ </div>
+ );
+}
+
+export default HubList; \ No newline at end of file
diff --git a/frontend/src/SECAPIData.js b/frontend/src/SECAPIData.js
index b1b4939..a209ff2 100644
--- a/frontend/src/SECAPIData.js
+++ b/frontend/src/SECAPIData.js
@@ -1,5 +1,6 @@
import React, {useState, useEffect} from 'react';
import Button from './Button';
+import HubList from './HubList'
@@ -70,10 +71,7 @@ function SECAPIData() {
credentials: "same-origin"
})
- .then(response => {
- setDisplayData(JSON.stringify(response));
- console.log(response);
- })
+ .then(response => response.json().then(data => setDisplayData(data)))
.catch(function (error) {
console.log(error);
});
@@ -86,7 +84,7 @@ function SECAPIData() {
<div>
<h1>SECAPIData</h1>
<Button onPress={requestData}></Button>
- <p>DISPLAY DATA: {displayData}</p>
+ <HubList data={displayData}></HubList>
</div>
);
}