fix(frontend): refresh file storage stats on tab and page revisit

Set stats query staleTime to 0 with refetchOnMount always, and unmount
inactive file admin tabs so returning to the stats view triggers a new fetch
instead of serving the 30s React Query cache.
This commit is contained in:
ryan
2026-06-18 15:13:09 +08:00
parent 990e3a6f51
commit 83b5475d69
2 changed files with 10 additions and 25 deletions
@@ -2,35 +2,18 @@
import * as React from "react"
import {useQuery} from "@tanstack/react-query"
import {
Upload,
Loader2,
HardDrive,
Database,
TrendingUp,
Files,
Info,
} from "lucide-react"
import {
Area,
AreaChart,
CartesianGrid,
Cell,
Pie,
PieChart,
XAxis,
YAxis,
} from "recharts"
import {Database, Files, HardDrive, Info, Loader2, TrendingUp, Upload,} from "lucide-react"
import {Area, AreaChart, CartesianGrid, Cell, Pie, PieChart, XAxis, YAxis,} from "recharts"
import {Button} from "@/components/ui/button"
import {Card, CardContent, CardDescription, CardHeader, CardTitle} from "@/components/ui/card"
import {
ChartConfig,
ChartContainer,
ChartTooltip,
ChartTooltipContent,
ChartLegend,
ChartLegendContent,
ChartTooltip,
ChartTooltipContent,
} from "@/components/ui/chart"
import services, {formatFileSize} from "@/lib/services"
@@ -84,6 +67,8 @@ export function FileStats() {
const statsQuery = useQuery({
queryKey: ["files", "stats"],
queryFn: () => services.adminUpload.getFileStats(),
staleTime: 0,
refetchOnMount: "always",
})
const stats = statsQuery.data
@@ -159,7 +144,7 @@ export function FileStats() {
)
}, [stats?.trend])
if (statsQuery.isPending) {
if (statsQuery.isLoading) {
return (
<div className="flex items-center justify-center py-32">
<Loader2 className="size-8 animate-spin text-sky-500" />
+3 -3
View File
@@ -42,16 +42,16 @@ export default function FilesPage() {
{/* ──────── TAB 1: 统计看板 ──────── */}
<TabsContent value="stats" className="outline-hidden">
<FileStats />
{activeTab === "stats" ? <FileStats /> : null}
</TabsContent>
{/* ──────── TAB 2: 文件列表 ──────── */}
<TabsContent value="list" className="outline-hidden">
<FileList />
{activeTab === "list" ? <FileList /> : null}
</TabsContent>
<TabsContent value="storage" className="outline-hidden">
<StorageConfigTab />
{activeTab === "storage" ? <StorageConfigTab /> : null}
</TabsContent>
</Tabs>
</motion.div>