Skip to content

Commit 7bca0fb

Browse files
committed
feat: show when standup started
1 parent b001a33 commit 7bca0fb

File tree

1 file changed

+49
-17
lines changed

1 file changed

+49
-17
lines changed

src/components/Standup.tsx

Lines changed: 49 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,13 @@ const getClosestTimeZone = () => {
1414
// get the time in each timezone
1515
const aryIannaTimeZones = Intl.supportedValuesOf('timeZone');
1616

17-
let smallestDifference = 24 * 60;
18-
let matchingTimeZones: string[] = [];
17+
let closestBefore6am = 0;
18+
let closestAfter6am = 24 * 60;
19+
20+
const times: {
21+
timeZone: string;
22+
time: number;
23+
}[] = [];
1924

2025
aryIannaTimeZones.forEach((timeZone) => {
2126
// get current hour and minute in this timezone
@@ -31,28 +36,49 @@ const getClosestTimeZone = () => {
3136
.split(':')
3237
.map((x) => parseInt(x))
3338
.reduce((acc, cur) => acc * 60 + cur);
34-
if (time < 360) {
35-
if (360 - time < smallestDifference) {
36-
smallestDifference = 360 - time;
37-
matchingTimeZones = [timeZone];
38-
} else if (360 - time === smallestDifference) {
39-
matchingTimeZones.push(timeZone);
40-
}
39+
if (time < 360 && time > closestBefore6am) {
40+
closestBefore6am = time;
41+
}
42+
if (time > 360 && time < closestAfter6am) {
43+
closestAfter6am = time;
4144
}
45+
times.push({
46+
timeZone,
47+
time,
48+
});
4249
});
4350

44-
return [matchingTimeZones, smallestDifference] as const;
51+
return [times, closestBefore6am, closestAfter6am] as const;
4552
};
4653

4754
const StandUp = () => {
48-
const [matchingTimeZones, setMatchingTimeZones] = useState<string[]>([]);
49-
const [smallestDifference, setSmallestDifference] = useState<number>(0);
55+
const [times, setTimes] = useState<{
56+
allBefore6am: string[];
57+
allAfter6am: string[];
58+
timeTo6am: number;
59+
timeFrom6am: number;
60+
}>({
61+
allBefore6am: [],
62+
allAfter6am: [],
63+
timeTo6am: 0,
64+
timeFrom6am: 0,
65+
});
5066

5167
useEffect(() => {
5268
const updateClosestTimeZone = () => {
53-
const [matchingTimeZones, smallestDifference] = getClosestTimeZone();
54-
setMatchingTimeZones(matchingTimeZones);
55-
setSmallestDifference(smallestDifference);
69+
const [times, closestBefore6am, closestAfter6am] = getClosestTimeZone();
70+
const allBefore6am = times
71+
.filter((time) => time.time === closestBefore6am)
72+
.map((time) => time.timeZone);
73+
const allAfter6am = times
74+
.filter((time) => time.time === closestAfter6am)
75+
.map((time) => time.timeZone);
76+
setTimes({
77+
allBefore6am,
78+
allAfter6am,
79+
timeTo6am: 360 - closestBefore6am,
80+
timeFrom6am: closestAfter6am - 360,
81+
});
5682
};
5783
updateClosestTimeZone();
5884
const interval = setInterval(updateClosestTimeZone, 300);
@@ -65,11 +91,17 @@ const StandUp = () => {
6591
return (
6692
<div className="mx-auto max-w-xl">
6793
<h1 className="text-4xl">Stand Up</h1>
94+
<p>Our current stand up started {times.timeFrom6am} minutes ago in:</p>
95+
<ul className="list-disc">
96+
{times.allAfter6am.map((timeZone) => (
97+
<li key={timeZone}>{timeZone}</li>
98+
))}
99+
</ul>
68100
<p>
69-
It is currently {smallestDifference} minutes until our 6am stand up in:
101+
It is currently {times.timeTo6am} minutes until our 6am stand up in:
70102
</p>
71103
<ul className="list-disc">
72-
{matchingTimeZones.map((timeZone) => (
104+
{times.allBefore6am.map((timeZone) => (
73105
<li key={timeZone}>{timeZone}</li>
74106
))}
75107
</ul>

0 commit comments

Comments
 (0)