|
1 | 1 | 'use client'; |
2 | 2 |
|
3 | | -import { useEffect, useState } from 'react'; |
| 3 | +import { useEffect, useState, useTransition } from 'react'; |
4 | 4 | import { fetchAdminDisputes, type AdminDispute } from '@/lib/api'; |
5 | 5 |
|
6 | 6 | export default function AdminDisputesPage() { |
7 | 7 | const [disputes, setDisputes] = useState<AdminDispute[]>([]); |
8 | 8 | const [total, setTotal] = useState(0); |
9 | 9 | const [loading, setLoading] = useState(true); |
10 | 10 | const [statusFilter, setStatusFilter] = useState<string>(''); |
| 11 | + const [isPending, startTransition] = useTransition(); |
11 | 12 |
|
12 | 13 | useEffect(() => { |
13 | 14 | const adminKey = sessionStorage.getItem('adminKey') ?? ''; |
14 | 15 | if (!adminKey) return; |
15 | 16 | setLoading(true); |
16 | 17 | fetchAdminDisputes(adminKey, { status: statusFilter || undefined, limit: '50' }).then((data) => { |
17 | 18 | if (data) { |
18 | | - setDisputes(data.disputes); |
19 | | - setTotal(data.total); |
| 19 | + startTransition(() => { |
| 20 | + setDisputes(data.disputes); |
| 21 | + setTotal(data.total); |
| 22 | + }); |
20 | 23 | } |
21 | 24 | setLoading(false); |
22 | 25 | }); |
@@ -49,7 +52,7 @@ export default function AdminDisputesPage() { |
49 | 52 | ) : disputes.length === 0 ? ( |
50 | 53 | <p className="mono mt-8 text-sm text-[var(--color-text-3)]">No disputes found.</p> |
51 | 54 | ) : ( |
52 | | - <table className="mono mt-6 w-full text-sm"> |
| 55 | + <table className={`mono mt-6 w-full text-sm ${isPending ? 'opacity-60 transition-opacity' : ''}`}> |
53 | 56 | <thead> |
54 | 57 | <tr className="border-b border-[var(--color-border)] text-left text-[var(--color-text-3)]"> |
55 | 58 | <th className="py-2">ID</th> |
|
0 commit comments