import { Center, Title } from '@mantine/core'
import { IconCircleCheck, IconAlertCircle } from '@tabler/icons-react'
import { useEffect, useState } from 'react';
function useWindowVisibility() {
const [isVisible, setIsVisible] = useState(true);
useEffect(() => {
const handleVisibilityChange = () => {
console.log('visibility change', document.visibilityState);
setIsVisible(document.visibilityState === 'visible');
};
document.addEventListener('visibilitychange', handleVisibilityChange);
return () => {
document.removeEventListener('visibilitychange', handleVisibilityChange);
};
}, []);
return isVisible;
}
export default function OverallStatus({
state,
}: {
state: { overallUp: number; overallDown: number; lastUpdate: number }
}) {
let statusString = ''
let icon =
if (state.overallUp === 0 && state.overallDown === 0) {
statusString = '暂无数据'
} else if (state.overallUp === 0) {
statusString = '所有系统均未正常运转'
} else if (state.overallDown === 0) {
statusString = '所有系统均正常运转'
icon =
} else {
statusString = `部分系统未正常运转(${state.overallDown}个异常,共计${state.overallUp + state.overallDown}个)`
}
const [openTime] = useState(Math.round(Date.now() / 1000))
const [currentTime, setCurrentTime] = useState(Math.round(Date.now() / 1000))
const isWindowVisible = useWindowVisibility();
useEffect(() => {
const interval = setInterval(() => {
if (!isWindowVisible) {
return
}
if (currentTime - state.lastUpdate > 300 && currentTime - openTime > 30) {
// trigger a re-fetch
window.location.reload()
}
setCurrentTime(Math.round(Date.now() / 1000))
}, 1000)
return () => clearInterval(interval)
})
return (
<>
{icon}
{statusString}
上次更新时间:{' '}
{`${new Date(state.lastUpdate * 1000).toLocaleString()} (${currentTime - state.lastUpdate} 秒之前)`}
>
)
}