Files
solana/explorer/src/components/ClusterStatusButton.tsx

67 lines
1.5 KiB
TypeScript
Raw Normal View History

import React from "react";
2020-03-31 14:36:40 +08:00
import { useCluster, ClusterStatus, Cluster } from "../providers/cluster";
function ClusterStatusButton({
onClick,
expand
}: {
onClick: () => void;
expand?: boolean;
}) {
2020-03-19 18:18:58 +08:00
return (
<div onClick={onClick}>
<Button expand={expand} />
2020-03-19 18:18:58 +08:00
</div>
);
}
function Button({ expand }: { expand?: boolean }) {
2020-03-31 14:36:40 +08:00
const { status, cluster, name, customUrl } = useCluster();
const statusName = cluster !== Cluster.Custom ? `${name}` : `${customUrl}`;
const btnClasses = (variant: string) => {
if (expand) {
2020-06-02 17:27:27 +08:00
return `btn b-white lift d-block btn-${variant}`;
} else {
2020-06-02 17:27:27 +08:00
return `btn b-white lift btn-outline-${variant}`;
}
};
let spinnerClasses = "spinner-grow spinner-grow-sm mr-2";
if (!expand) {
spinnerClasses += " text-warning";
}
switch (status) {
2020-03-31 14:36:40 +08:00
case ClusterStatus.Connected:
2020-03-19 18:18:58 +08:00
return (
<span className={btnClasses("success")}>
2020-03-19 18:18:58 +08:00
<span className="fe fe-check-circle mr-2"></span>
{statusName}
</span>
);
2020-03-31 14:36:40 +08:00
case ClusterStatus.Connecting:
return (
<span className={btnClasses("warning")}>
<span
className={spinnerClasses}
role="status"
aria-hidden="true"
></span>
2020-03-19 18:18:58 +08:00
{statusName}
</span>
);
2020-03-31 14:36:40 +08:00
case ClusterStatus.Failure:
2020-03-19 18:18:58 +08:00
return (
<span className={btnClasses("danger")}>
2020-03-19 18:18:58 +08:00
<span className="fe fe-alert-circle mr-2"></span>
{statusName}
</span>
);
}
}
2020-03-31 14:36:40 +08:00
export default ClusterStatusButton;