fix: resolve all eslint errors (set-state-in-effect, nested components, no-explicit-any)
- Wrap synchronous setState calls in useEffect with startTransition to avoid cascading renders - Convert nested SortIcon components to renderSortIcon helper functions - Replace all `any` types with proper interfaces (OverviewData, TrendPoint, RankItem) - Remove unused formatTokens import in logs page - Add no-any rule to CLAUDE.md
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
"use client";
|
||||
|
||||
import { useEffect, useState, useCallback } from "react";
|
||||
import { useEffect, useState, useCallback, startTransition } from "react";
|
||||
import { motion } from "motion/react";
|
||||
import { ScrollText, Search, ChevronLeft, ChevronRight, Zap } from "lucide-react";
|
||||
import { TimeRangeSelector } from "@/components/TimeRangeSelector";
|
||||
import { buildQuery, formatNumber, formatTokens, formatDate } from "@/lib/utils";
|
||||
import { buildQuery, formatNumber, formatDate } from "@/lib/utils";
|
||||
import { useTimeRange } from "@/lib/time-range-context";
|
||||
import { useI18n } from "@/lib/i18n";
|
||||
|
||||
@@ -26,15 +26,15 @@ export default function LogsPage() {
|
||||
const pageSize = 100;
|
||||
|
||||
const fetchData = useCallback(async () => {
|
||||
setLoading(true);
|
||||
startTransition(() => setLoading(true));
|
||||
const { start, end } = getEffectiveRange();
|
||||
const res = await fetch(buildQuery("/api/logs", { start, end, page, page_size: pageSize, ...filters }));
|
||||
const data = await res.json();
|
||||
setLogs(data.logs); setTotal(data.total); setLoading(false);
|
||||
startTransition(() => { setLogs(data.logs); setTotal(data.total); setLoading(false); });
|
||||
}, [page, filters, getEffectiveRange]);
|
||||
|
||||
useEffect(() => { fetchData(); }, [fetchData]);
|
||||
useEffect(() => { setPage(1); }, [getEffectiveRange, filters]);
|
||||
useEffect(() => { startTransition(() => setPage(1)); }, [getEffectiveRange, filters]);
|
||||
const totalPages = Math.ceil(total / pageSize);
|
||||
|
||||
const headers = [t("th.time"), t("th.user"), t("th.realModel"), t("th.channel"), t("th.input"), t("th.output"), t("th.totalToken"), t("th.latency"), ""];
|
||||
|
||||
Reference in New Issue
Block a user