Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
N
notebooks
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
kevinle2
notebooks
Commits
f16676c6
Commit
f16676c6
authored
1 year ago
by
kevinle350
Browse files
Options
Downloads
Patches
Plain Diff
Fixed styling, all that is left is to integrate everything
parent
1766cb43
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
ui-subsystem/src/components/Landing.css
+18
-1
18 additions, 1 deletion
ui-subsystem/src/components/Landing.css
ui-subsystem/src/components/Landing.js
+16
-147
16 additions, 147 deletions
ui-subsystem/src/components/Landing.js
with
34 additions
and
148 deletions
ui-subsystem/src/components/Landing.css
+
18
−
1
View file @
f16676c6
...
@@ -145,11 +145,28 @@
...
@@ -145,11 +145,28 @@
width
:
11.25rem
;
width
:
11.25rem
;
height
:
3.5625rem
;
height
:
3.5625rem
;
border-radius
:
2.5rem
;
border-radius
:
2.5rem
;
background-color
:
#FFBF00
;
/*
background-color: #FFBF00;
*/
border
:
none
;
border
:
none
;
color
:
white
;
color
:
white
;
font-size
:
large
;
font-size
:
large
;
font-weight
:
750
;
font-weight
:
750
;
vertical-align
:
top
;
vertical-align
:
top
;
}
.health-text
{
color
:
white
;
width
:
11.25rem
;
height
:
3.5625rem
;
border-radius
:
2.5rem
;
background-color
:
#FFBF00
;
border
:
none
;
color
:
white
;
font-size
:
large
;
font-weight
:
750
;
}
.adjust
{
margin-top
:
-30px
;
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
ui-subsystem/src/components/Landing.js
+
16
−
147
View file @
f16676c6
...
@@ -3,14 +3,12 @@ import useWebSocket, { ReadyState } from 'react-use-websocket';
...
@@ -3,14 +3,12 @@ import useWebSocket, { ReadyState } from 'react-use-websocket';
import
'
./Landing.css
'
;
import
'
./Landing.css
'
;
import
MyModal
from
'
./Modal
'
;
import
MyModal
from
'
./Modal
'
;
import
WarnModal
from
'
./WarnModal
'
;
import
WarnModal
from
'
./WarnModal
'
;
// import {useQuery} from '@apollo/client';
// import {USER_QUERY} from "../GraphQL/Queries" ;
// import { Button, Card } from 'react-bootstrap';
function
Landing
()
{
function
Landing
()
{
const
[
plants
,
setPlants
]
=
useState
([]);
const
[
plants
,
setPlants
]
=
useState
([]);
const
[
modalIsOpen
,
setModalIsOpen
]
=
useState
(
false
)
const
[
modalIsOpen
,
setModalIsOpen
]
=
useState
(
false
)
const
[
maxWaterUsage
,
setMaxWaterUsage
]
=
useState
(
0
);
var
[
dataFromModal
,
setDataFromModal
]
=
useState
({});
var
[
dataFromModal
,
setDataFromModal
]
=
useState
({});
// station: '192.168.4.1' localWiFi(AP): 172.16.107.184
// station: '192.168.4.1' localWiFi(AP): 172.16.107.184
...
@@ -20,7 +18,7 @@ function Landing() {
...
@@ -20,7 +18,7 @@ function Landing() {
// For Data Transmission testing purposes
// For Data Transmission testing purposes
const
handleClickSendMessage
=
()
=>
{
const
handleClickSendMessage
=
()
=>
{
sendMessage
(
'
Hello ESP32!
'
);
sendMessage
(
'
Hello ESP32!
'
);
};
};
const
connectionStatus
=
{
const
connectionStatus
=
{
...
@@ -31,35 +29,6 @@ function Landing() {
...
@@ -31,35 +29,6 @@ function Landing() {
[
ReadyState
.
UNINSTANTIATED
]:
'
Uninstantiated
'
,
[
ReadyState
.
UNINSTANTIATED
]:
'
Uninstantiated
'
,
}[
readyState
];
}[
readyState
];
// const loadPlant = () => {
// // Check if all required fields have values
// if (
// dataFromModal['plantName'] ||
// dataFromModal['maxWaterUsage'] ||
// dataFromModal['minMoistureLevel'] ||
// dataFromModal['wateringHours']
// ) {
// const newPlantData = {
// name: dataFromModal['plantName'],
// maxWaterUsage: dataFromModal['maxWaterUsage'],
// minMoistureLevel: dataFromModal['minMoistureLevel'],
// wateringHours: dataFromModal['wateringHours'],
// };
// const newPlants = [...plants, newPlantData];
// setPlants(newPlants);
// // Now, you can log the updated state in a useEffect to ensure it's displayed correctly
// } else {
// // Handle the case when some fields are undefined or empty
// console.error('Some fields are undefined or empty');
// }
// };
const
loadPlant
=
(
newPlantData
)
=>
{
const
loadPlant
=
(
newPlantData
)
=>
{
setPlants
(
prevPlants
=>
[...
prevPlants
,
newPlantData
]);
setPlants
(
prevPlants
=>
[...
prevPlants
,
newPlantData
]);
...
@@ -74,24 +43,17 @@ function Landing() {
...
@@ -74,24 +43,17 @@ function Landing() {
setModalIsOpen
(
false
);
setModalIsOpen
(
false
);
}
}
// const receiveData = (data) => {
// setDataFromModal(data, () => {
// // Only call loadPlant after the state has been updated
// loadPlant();
// closeModal();
// });
// }
const
receiveData
=
(
data
)
=>
{
const
receiveData
=
(
data
)
=>
{
const
newPlantData
=
{
const
newPlantData
=
{
name
:
data
[
'
plantName
'
],
name
:
data
[
'
plantName
'
],
maxWaterUsage
:
data
[
'
maxWaterUsage
'
],
//
maxWaterUsage: data['maxWaterUsage'],
minMoistureLevel
:
data
[
'
minMoistureLevel
'
],
minMoistureLevel
:
data
[
'
minMoistureLevel
'
],
wateringHours
:
data
[
'
wateringHours
'
],
wateringHours
:
data
[
'
wateringHours
'
],
wateringDays
:
data
[
'
wateringDays
'
],
};
};
// Ensure the new plant data is valid before adding
// Ensure the new plant data is valid before adding
if
(
newPlantData
.
name
&&
newPlantData
.
maxWaterUsage
&&
newPlantData
.
minMoistureLevel
&&
newPlantData
.
wateringHours
)
{
if
(
newPlantData
.
name
&&
newPlantData
.
minMoistureLevel
&&
newPlantData
.
wateringHours
&&
newPlantData
.
wateringDays
)
{
loadPlant
(
newPlantData
);
loadPlant
(
newPlantData
);
closeModal
();
closeModal
();
}
else
{
}
else
{
...
@@ -137,6 +99,9 @@ function Landing() {
...
@@ -137,6 +99,9 @@ function Landing() {
Send
Message
to
ESP32
Send
Message
to
ESP32
<
/button
>
<
/button
>
<
/div
>
<
/div
>
<
div
>
<
p
>
Max
Water
Usage
:
{
maxWaterUsage
}
<
/p
>
<
/div
>
<
div
>
<
div
>
{
lastMessage
?
<
p
>
Last
message
from
server
:
{
lastMessage
.
data
}
<
/p> : "Waiting for message"
}
{
lastMessage
?
<
p
>
Last
message
from
server
:
{
lastMessage
.
data
}
<
/p> : "Waiting for message"
}
<
/div
>
<
/div
>
...
@@ -151,9 +116,9 @@ function Landing() {
...
@@ -151,9 +116,9 @@ function Landing() {
<
div
className
=
'
options-container
'
>
<
div
className
=
'
options-container
'
>
<
div
className
=
'
options
'
>
<
div
className
=
'
options
'
>
<
button
className
=
'
add-plant-btn
'
onClick
=
{
()
=>
{
openModal
();}}
>
Add
Plant
<
/button
>
<
button
className
=
'
add-plant-btn
'
onClick
=
{
()
=>
{
openModal
();}}
>
Add
Plant
<
/button
>
<
p
className
=
'
options-text
'
>
Max
Water
Usage
<
/p
>
<
p
className
=
'
options-text
'
>
Min
Moisture
Level
<
/p
>
<
p
className
=
'
options-text
'
>
Min
Moisture
Level
<
/p
>
<
p
className
=
'
options-text
'
>
Watering
Hours
<
/p
>
<
p
className
=
'
options-text
'
>
Watering
Hours
<
/p
>
<
p
className
=
'
options-text
'
>
Watering
Days
<
/p
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
MyModal
isOpen
=
{
modalIsOpen
}
closeModal
=
{
closeModal
}
sendDataToParent
=
{
receiveData
}
/
>
<
MyModal
isOpen
=
{
modalIsOpen
}
closeModal
=
{
closeModal
}
sendDataToParent
=
{
receiveData
}
/
>
...
@@ -161,9 +126,9 @@ function Landing() {
...
@@ -161,9 +126,9 @@ function Landing() {
{
plants
.
length
>
0
?
(
plants
.
map
((
plant
,
index
)
=>
(
{
plants
.
length
>
0
?
(
plants
.
map
((
plant
,
index
)
=>
(
<
div
className
=
'
new-plant
'
key
=
{
index
}
>
<
div
className
=
'
new-plant
'
key
=
{
index
}
>
<
p
className
=
'
new-plant-text
'
>
Plant
{
index
+
1
}:
{
plant
.
name
}
<
/p
>
<
p
className
=
'
new-plant-text
'
>
Plant
{
index
+
1
}:
{
plant
.
name
}
<
/p
>
<
p
className
=
'
new-plant-text
'
>
{
plant
.
maxWaterUsage
}
<
/p
>
<
p
className
=
'
new-plant-text
'
>
{
plant
.
minMoistureLevel
}
<
/p
>
<
p
className
=
'
new-plant-text
'
>
{
plant
.
minMoistureLevel
}
<
/p
>
<
p
className
=
'
new-plant-text
'
>
{
plant
.
wateringHours
}
<
/p
>
<
p
className
=
'
new-plant-text
'
>
{
plant
.
wateringHours
}
<
/p
>
<
p
className
=
'
new-plant-text
'
>
{
plant
.
wateringDays
}
<
/p
>
<
/div
>
<
/div
>
))
))
)
:
(
<
p
>
No
Plants
added
yet
.
<
/p
>
)
:
(
<
p
>
No
Plants
added
yet
.
<
/p
>
...
@@ -173,18 +138,15 @@ function Landing() {
...
@@ -173,18 +138,15 @@ function Landing() {
<
div
className
=
'
health-wrap
'
>
<
div
className
=
'
health-wrap
'
>
<
p
className
=
'
health-header
'
>
Plant
Health
<
/p
>
<
p
className
=
'
health-header
'
>
Plant
Health
<
/p
>
<
div
className
=
'
health-container
'
>
<
div
className
=
'
adjust
'
>
{
dataObjects
.
map
((
item
,
index
)
=>
(
<
div
className
=
'
health-container
'
>
<
p
key
=
{
index
}
>
{
dataObjects
.
map
((
item
,
index
)
=>
(
Address
:
{
item
.
address
}
,
Health
:
{
item
.
health
}
<
p
key
=
{
index
}
className
=
'
health-text
'
>
Address
:
{
item
.
address
}
<
br
/>
Health
:
{
item
.
health
}
<
/p
>
<
/p
>
))}
))}
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
...
@@ -196,96 +158,3 @@ function Landing() {
...
@@ -196,96 +158,3 @@ function Landing() {
}
}
export
default
Landing
;
export
default
Landing
;
//Random stuff dont need rn
// const {error, loading, configData} = useQuery(USER_QUERY)
// const [test, getTest] = useState
// useEffect(() => {
// console.log(configData.users[0]);
// }, [configData]);
// const newPlant = (
// <div className='new-plant'>
// <p className='new-plant-text'>Plant {plants.length + 1}: {dataFromModal['Plant Name']}</p>
// <p className='new-plant-text'>{dataFromModal['Max Water Usage']}</p>
// <p className='new-plant-text'>{dataFromModal['Min Moisture Level']}</p>
// <p className='new-plant-text'>{dataFromModal['Watering Hours']}</p>
// </div>
// );
// ESP32 -> Frontend
// const fetchSensorData = async () => {
// try {
// const response = await fetch("http://${ESP32_IP_ADDRESS}/sensor-data");
// if (response.ok) {
// const data = await response.json();
// setSensorData(data.sensorValue);
// } else {
// console.error("Failed to fetch sensor data");
// }
// } catch (error) {
// console.error("Error fetching sensor data:", error);
// }
// };
// Will need 3 of these for: wateringHours, maxWaterUsage, minMoistureLevel
// const setThresholdOnESP32 = async (threshold) => {
// try {
// const response = await fetch(`http://${ESP32_IP_ADDRESS}/set-threshold?threshold=${threshold}`);
// if (response.ok) {
// const data = await response.text();
// console.log(data);
// } else {
// console.error("Failed to set threshold on ESP32");
// }
// } catch (error) {
// console.error("Error setting threshold:", error);
// }
// };
// useEffect(() => {
// // Fetch sensor data on component mount
// fetchSensorData();
// }, []);
// sensorDatas: [(curMoistureLvl, curWaterUsage)]
// {sensorDatas.map((sensorData, index) => (
// <div key = {index}>{health}</div>
// <p>{sensorData[0]}, {sensorData[1]}</p>
// ))}
// setSensorDatas(lastMessage.data)
// Important, for parsing Data
//const [dataObjects, setDataObjects] = useState([]);
// useEffect(() => {
// if (lastMessage !== null) {
// try {
// // Parse the message data as JSON and update the state
// const data = JSON.parse(lastMessage.data);
// setDataObjects(data);
// } catch (e) {
// console.error("Failed to parse JSON:", e);
// }
// }
// }, [lastMessage]);
// <div>
// <h1>Data Tuples</h1>
// <ul>
// {dataObjects.map((item, index) => (
// <li key={index}>
// Address: {item.address}, Health: {item.health}
// </li>
// ))}
// </ul>
// </div>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment