Skip to content

Commit 6868057

Browse files
authored
added date time and network status in sidebar (#62) (#534)
added date time and network status in sidebar (#62)
1 parent 5d5daa1 commit 6868057

File tree

5 files changed

+144
-2
lines changed

5 files changed

+144
-2
lines changed

forms-flow-nav/package-lock.json

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

forms-flow-nav/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
},
4646
"dependencies": {
4747
"i18next-browser-languagedetector": "^7.0.1",
48+
"lucide-react": "^0.487.0",
49+
"moment": "^2.30.1",
4850
"react": "^17.0.2",
4951
"react-bootstrap": "^2.7.0",
5052
"react-dom": "^17.0.2",
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import "./Sidebar.scss";
2+
import React, { useState, useEffect } from "react";
3+
import moment from "moment";
4+
import { WifiOff, Wifi } from "lucide-react";
5+
6+
const DateTimeNetworkWidget = () => {
7+
const [time, setTime] = useState("");
8+
const [date, setDate] = useState("");
9+
const [isOnline, setIsOnline] = useState(navigator.onLine);
10+
const [isDaytime, setIsDaytime] = useState(true);
11+
12+
useEffect(() => {
13+
const updateTime = () => {
14+
const now = moment();
15+
setTime(now.format("HH:mm"));
16+
setDate(now.format("dddd, YYYY-MM-DD"));
17+
18+
const hour = now.hour();
19+
setIsDaytime(hour >= 6 && hour < 18); // Sun between 6AM - 6PM
20+
};
21+
22+
const updateNetworkStatus = () => {
23+
setIsOnline(navigator.onLine);
24+
};
25+
26+
const intervalId = setInterval(updateTime, 1000);
27+
window.addEventListener("online", updateNetworkStatus);
28+
window.addEventListener("offline", updateNetworkStatus);
29+
30+
updateTime();
31+
updateNetworkStatus();
32+
33+
return () => {
34+
clearInterval(intervalId);
35+
window.removeEventListener("online", updateNetworkStatus);
36+
window.removeEventListener("offline", updateNetworkStatus);
37+
};
38+
}, []);
39+
40+
return (
41+
<div className="date-time-network-container">
42+
<div className="sun-moon-container">
43+
<div className={`sun-moon-icon ${isDaytime ? "sun" : "moon"}`} />
44+
</div>
45+
46+
<div className="time">{time}</div>
47+
48+
<div className="date">{date}</div>
49+
50+
<div className="network-icon">
51+
{isOnline ? (
52+
<Wifi size={25} color="white" />
53+
) : (
54+
<WifiOff size={25} color="red" />
55+
)}
56+
</div>
57+
</div>
58+
);
59+
};
60+
61+
export default DateTimeNetworkWidget;

forms-flow-nav/src/sidenav/Sidebar.jsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import MenuComponent from "./MenuComponent";
2525
import { ApplicationLogo } from "@formsflow/components";
2626
import { ProfileSettingsModal } from "./ProfileSettingsModal";
2727
import PropTypes from 'prop-types';
28+
import DateTimeNetworkWidget from "./DateTimeNetworkWidget"
2829

2930
const Sidebar = React.memo(({ props, sidenavHeight="100%" }) => {
3031
const [tenantLogo, setTenantLogo] = React.useState("");
@@ -368,6 +369,9 @@ const Sidebar = React.memo(({ props, sidenavHeight="100%" }) => {
368369
)}
369370
</Accordion>
370371
</div>
372+
{(APPLICATION_NAME === "roadsafety") && isAuthenticated && (
373+
<DateTimeNetworkWidget/>
374+
)}
371375
{isAuthenticated && (<div className="user-container">
372376
<button className="button-as-div justify-content-start m-2" onClick={handleProfileModal}>
373377
<div className="user-icon cursor-pointer" data-testid="user-icon">

forms-flow-nav/src/sidenav/Sidebar.scss

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
2-
.sidenav {
1+
@import "../variables.scss";
2+
.sidenav {
33
height: 100%;
44
width: 12rem;
55
position: fixed;
@@ -236,4 +236,48 @@
236236
}
237237
}
238238

239+
.date-time-network-container {
240+
color: $white;
241+
padding: 20px;
242+
position: relative;
243+
}
244+
245+
.date-time-network-container .sun-moon-container {
246+
position: absolute;
247+
top: 32px;
248+
left: 15px;
249+
}
250+
251+
.date-time-network-container .sun-moon-icon {
252+
width: 16px;
253+
height: 16px;
254+
border-radius: 50%;
255+
margin-right: 8px;
256+
}
257+
258+
.date-time-network-container .sun {
259+
background-color: #facc15;
260+
}
239261

262+
.date-time-network-container .moon {
263+
background-color: #cbd5e0;
264+
}
265+
266+
.date-time-network-container .time {
267+
font-size: 28px;
268+
font-weight: bold;
269+
margin-left: 40px;
270+
}
271+
272+
.date-time-network-container .date {
273+
font-size: 15px;
274+
color: #cbd5e0;
275+
margin-left: 10px;
276+
margin-top: 4px;
277+
}
278+
279+
.date-time-network-container .network-icon {
280+
position: absolute;
281+
top: 23px;
282+
right: 20px;
283+
}

0 commit comments

Comments
 (0)