feat: Enhance Uptime heartbeat bar

- Frontend: Increase heartbeat history to 60 items (1 hour)
- Frontend: Add empty bars for alignment when history is sparse
- Frontend: Improve tooltips with detailed status info
- Frontend: Update API client to support limit parameter
This commit is contained in:
Wikid82
2025-11-23 23:50:04 +00:00
parent 527c54582f
commit 642d4d2437
3 changed files with 51 additions and 12 deletions

View File

@@ -3,7 +3,7 @@ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { getProviders, createProvider, updateProvider, deleteProvider, testProvider, NotificationProvider } from '../api/notifications';
import { Card } from '../components/ui/Card';
import { Button } from '../components/ui/Button';
import { Bell, Plus, Trash2, Edit2, Send } from 'lucide-react';
import { Bell, Plus, Trash2, Edit2, Send, Check, X, Loader2 } from 'lucide-react';
import { useForm } from 'react-hook-form';
const ProviderForm: React.FC<{
@@ -24,6 +24,25 @@ const ProviderForm: React.FC<{
}
});
const [testStatus, setTestStatus] = useState<'idle' | 'success' | 'error'>('idle');
const testMutation = useMutation({
mutationFn: testProvider,
onSuccess: () => {
setTestStatus('success');
setTimeout(() => setTestStatus('idle'), 3000);
},
onError: () => {
setTestStatus('error');
setTimeout(() => setTestStatus('idle'), 3000);
}
});
const handleTest = () => {
const formData = watch();
testMutation.mutate(formData as any);
};
const type = watch('type');
const setTemplate = (template: string) => {
@@ -141,6 +160,18 @@ const ProviderForm: React.FC<{
<div className="flex justify-end gap-2 pt-4">
<Button variant="secondary" onClick={onClose}>Cancel</Button>
<Button
type="button"
variant="secondary"
onClick={handleTest}
disabled={testMutation.isPending}
className="min-w-[80px]"
>
{testMutation.isPending ? <Loader2 className="w-4 h-4 animate-spin mx-auto" /> :
testStatus === 'success' ? <Check className="w-4 h-4 text-green-500 mx-auto" /> :
testStatus === 'error' ? <X className="w-4 h-4 text-red-500 mx-auto" /> :
"Test"}
</Button>
<Button type="submit">Save</Button>
</div>
</form>