import React from 'react'; import useSWR from 'swr'; import { Box, Flex, space, color, BoxProps } from '@stacks/ui'; import { border, transition } from '@common/utils'; import { Link } from '@components/mdx'; import { LinkProps, Text } from '@components/typography'; import { Spinner } from '@stacks/ui'; import { CircleCheck } from '@components/icons/circle-check'; import { AlertCircleIcon } from '@components/icons/alert-circle'; import { STATUS_CHECKER_URL } from '@common/constants'; import { css } from '@stacks/ui-core'; import { getCapsizeStyles } from '@components/mdx/typography'; const fetcher = url => fetch(url.replace(navigator.language, '')).then(r => r.json()); type Status = 'online' | 'slow' | 'degraded' | 'loading' | undefined; const getColor = (status: Status) => { switch (status) { case 'degraded': return 'feedback-error'; case 'online': return 'feedback-success'; case 'slow': return 'feedback-alert'; } }; const StatusWords: React.FC = ({ status, ...rest }) => ( <> : {` ${status}`} ); const getStatus = (data: number): Status | 'loading' => { switch (data) { case 0: return 'online'; case 1: return 'slow'; case 2: return 'degraded'; default: return 'loading'; } }; export const StatusCheck: React.FC = props => { const { data, error } = useSWR(`/api/status`, fetcher); const status = getStatus(data); const critical = error || status === 'degraded'; const warn = status === 'slow'; return ( {!data && !error ? ( ) : critical || warn ? ( ) : ( )} Stacks 2.0 testnet status ); };