import { Alert, Button, Progress, Spacer } from '@heroui/react' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import DefaultLayout from '../layouts/default' import type { StatusSchema } from '../models/StatusSchema.ts' import { Fragment } from 'react' function useStatus() { return useQuery({ queryKey: ['status'], queryFn: async () => { const res = await fetch('/api/status', { method: 'GET', headers: { 'Content-Type': 'application/json', }, }) if (!res.ok) { throw new Error('Failed to fetch data') } return res.json() as Promise }, refetchInterval: 200, refetchIntervalInBackground: true, }) } function useRestart() { const queryClient = useQueryClient() return useMutation({ mutationFn: async () => { const res = await fetch('/api/restart', { method: 'POST', headers: { 'Content-Type': 'application/json', }, }) return res.json() }, onSuccess: async () => { return queryClient.invalidateQueries({ queryKey: ['status'] }) }, }) } function useStop() { const queryClient = useQueryClient() return useMutation({ mutationFn: async () => { const res = await fetch('/api/stop', { method: 'POST', headers: { 'Content-Type': 'application/json', }, }) return res.json() }, onSuccess: async () => { return queryClient.invalidateQueries({ queryKey: ['status'] }) }, }) } function Status({ percentages }: { percentages: StatusSchema['percentages'] }) { return ( <> {Object.entries(percentages || {}).map(([label, percentage]) => { return ( ) })} ) } export default function IndexPage() { const { data } = useStatus() const { mutateAsync: restart } = useRestart() const { mutateAsync: stop } = useStop() return (
{!data && No connection to URL} />} {data?.name && (

{data.name}

)} {data?.percentages && }
{data && (
)}
) }