-
Notifications
You must be signed in to change notification settings - Fork 42
/
Copy pathFooterStatus.tsx
71 lines (61 loc) · 2.01 KB
/
FooterStatus.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import React, { useEffect, useState } from 'react';
import FeaturedLink from '@ably/ui/core/FeaturedLink';
const indicatorClass = (indicator: string) => {
switch (indicator) {
case 'none':
return 'bg-status-operational';
case 'operational':
return 'bg-status-operational';
case 'minor':
return 'bg-status-minor';
case 'major':
return 'bg-status-major';
case 'critical':
return 'bg-status-critical';
default:
return 'bg-status-unknown';
}
};
const Status = ({ statusUrl, additionalCSS }: { statusUrl: string; additionalCSS?: string }) => {
const [data, setData] = useState<string | null>(null);
additionalCSS ??= '';
useEffect(() => {
let interval: string | number | NodeJS.Timeout | undefined;
if (statusUrl !== '') {
const fetchData = async () => {
try {
const response = await fetch(statusUrl);
const jsonData = await response.json();
setData(jsonData);
} catch (error) {
console.error('Error fetching status data:', error);
}
};
fetchData();
interval = setInterval(fetchData, 60000); // Fetch data every minute
}
return () => {
clearInterval(interval);
};
}, [statusUrl]);
return (
<a href="https://status.ably.com" className={`inline-block ${additionalCSS}`} target="_blank" rel="noreferrer">
<span className="flex items-center h-30 w-30">
<span
className={`w-22 h-22 rounded-full ${!data ? 'animate-pulse' : ''} ${indicatorClass(data?.status?.indicator)}`}
></span>
</span>
</a>
);
};
export const FooterStatus = () => (
<>
<div className="flex flex-row mt-24 -mb-6">
<Status statusUrl="https://status.ably.com/api/v2/status.json" additionalCSS="-mt-4" />
<span className="pl-4 font-bold">System status</span>
</div>
<FeaturedLink url="https://status.ably.com/" textSize="text-p3">
<span className="pl-4 ml-30">More on our status site</span>
</FeaturedLink>
</>
);