forked from solana-foundation/explorer
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathClusterStatusButton.tsx
More file actions
46 lines (38 loc) · 1.58 KB
/
ClusterStatusButton.tsx
File metadata and controls
46 lines (38 loc) · 1.58 KB
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
'use client';
import { useCluster, useClusterModal } from '@providers/cluster';
import { Cluster, ClusterStatus } from '@utils/cluster';
import React, { useCallback } from 'react';
import { AlertCircle, CheckCircle } from 'react-feather';
export const ClusterStatusButton = () => {
const { status, cluster, name, customUrl } = useCluster();
const [, setShow] = useClusterModal();
const onClickHandler = useCallback(() => setShow(true), [setShow]);
const statusName = cluster !== Cluster.Custom ? `${name}` : `${customUrl}`;
const btnClasses = (variant: string) => {
return `btn d-block btn-${variant}`;
};
const spinnerClasses = 'align-text-top spinner-grow spinner-grow-sm me-2';
switch (status) {
case ClusterStatus.Connected:
return (
<span className={btnClasses('primary')} onClick={onClickHandler}>
<CheckCircle className="fe me-2" size={15} />
{statusName}
</span>
);
case ClusterStatus.Connecting:
return (
<span className={btnClasses('warning')} onClick={onClickHandler}>
<span className={spinnerClasses} role="status" aria-hidden="true"></span>
{statusName}
</span>
);
case ClusterStatus.Failure:
return (
<span className={btnClasses('danger')} onClick={onClickHandler}>
<AlertCircle className="me-2" size={15} />
{statusName}
</span>
);
}
};