Skip to content

Commit 68197ef

Browse files
AmazingAngclaude
andcommitted
Fix OpenOrdersPanel lint errors: remove manual useCallback for React Compiler
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 7eb29df commit 68197ef

1 file changed

Lines changed: 27 additions & 21 deletions

File tree

src/components/OpenOrdersPanel.tsx

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use client";
22

3-
import { useState, useEffect, useCallback, useRef, useMemo } from "react";
3+
import { useState, useEffect, useRef, useMemo } from "react";
44
import { useWalletStore } from "@/stores/walletStore";
55
import type { ProcessedMarket } from "@/types";
66
import {
@@ -22,50 +22,56 @@ export default function OpenOrdersPanel({ markets, onSelectMarket }: OpenOrdersP
2222
const [loading, setLoading] = useState(false);
2323
const [cancellingIds, setCancellingIds] = useState<Set<string>>(new Set());
2424
const [cancellingAll, setCancellingAll] = useState(false);
25-
const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);
25+
const sessionTokenRef = useRef(tradeSession?.sessionToken);
26+
sessionTokenRef.current = tradeSession?.sessionToken;
2627

27-
const refresh = useCallback(async () => {
28-
if (!tradeSession?.sessionToken) return;
28+
const refresh = async () => {
29+
const token = sessionTokenRef.current;
30+
if (!token) return;
2931
setLoading(true);
3032
try {
31-
const result = await fetchOpenOrders(tradeSession.sessionToken);
33+
const result = await fetchOpenOrders(token);
3234
setOrders(result);
3335
} catch { /* ignore */ }
3436
setLoading(false);
35-
}, [tradeSession?.sessionToken]);
37+
};
38+
const refreshRef = useRef(refresh);
39+
refreshRef.current = refresh;
3640

3741
// Poll every 15s
3842
useEffect(() => {
3943
if (!tradeSession?.sessionToken) { setOrders([]); return; }
40-
void refresh();
41-
intervalRef.current = setInterval(refresh, 15_000);
42-
return () => { if (intervalRef.current) clearInterval(intervalRef.current); };
43-
}, [tradeSession?.sessionToken, refresh]);
44+
void refreshRef.current();
45+
const iv = setInterval(() => { void refreshRef.current(); }, 15_000);
46+
return () => clearInterval(iv);
47+
}, [tradeSession?.sessionToken]);
4448

4549
// Listen for order-placed events
4650
useEffect(() => {
47-
const handler = () => { void refresh(); };
51+
const handler = () => { void refreshRef.current(); };
4852
window.addEventListener("polyworld:order-placed", handler);
4953
return () => window.removeEventListener("polyworld:order-placed", handler);
50-
}, [refresh]);
54+
}, []);
5155

52-
const handleCancel = useCallback(async (orderId: string) => {
53-
if (!tradeSession?.sessionToken) return;
56+
const handleCancel = async (orderId: string) => {
57+
const token = sessionTokenRef.current;
58+
if (!token) return;
5459
setCancellingIds((s) => new Set(s).add(orderId));
5560
try {
56-
await cancelOpenOrder(orderId, tradeSession.sessionToken);
61+
await cancelOpenOrder(orderId, token);
5762
setOrders((prev) => prev.filter((o) => o.id !== orderId));
5863
} catch { /* ignore */ }
5964
setCancellingIds((s) => { const n = new Set(s); n.delete(orderId); return n; });
60-
}, [tradeSession?.sessionToken]);
65+
};
6166

62-
const handleCancelAll = useCallback(async () => {
63-
if (!tradeSession?.sessionToken || orders.length === 0) return;
67+
const handleCancelAll = async () => {
68+
const token = sessionTokenRef.current;
69+
if (!token || orders.length === 0) return;
6470
setCancellingAll(true);
65-
await cancelAllOpenOrders(orders.map((o) => o.id), tradeSession.sessionToken);
66-
await refresh();
71+
await cancelAllOpenOrders(orders.map((o) => o.id), token);
72+
await refreshRef.current();
6773
setCancellingAll(false);
68-
}, [tradeSession?.sessionToken, orders, refresh]);
74+
};
6975

7076
const tokenIndex = useMemo(() => buildTokenIndex(markets), [markets]);
7177
const resolved = useMemo(

0 commit comments

Comments
 (0)