MCPcopy Create free account
hub / github.com/AmazingAng/PolyWorld / SignalPanel

Function SignalPanel

src/components/SignalPanel.tsx:107–153  ·  view source on GitHub ↗
({
  trades,
  markets,
  leaderboard,
  onSelectMarket,
  onSelectWallet,
  onOpenTrade,
  categoryFilter,
  strengthFilter,
  onTrade,
}: SignalPanelProps)

Source from the content-addressed store, hash-verified

105}
106
107export default function SignalPanel({
108 trades,
109 markets,
110 leaderboard,
111 onSelectMarket,
112 onSelectWallet,
113 onOpenTrade,
114 categoryFilter,
115 strengthFilter,
116 onTrade,
117}: SignalPanelProps) {
118 const { t } = useI18n();
119 const { signals, slugToCategory } = useSignalData(trades, markets, leaderboard);
120 const filtered = useMemo(() => {
121 let result = signals;
122 if (strengthFilter.size > 0) result = result.filter((s) => strengthFilter.has(s.strength));
123 if (categoryFilter.size > 0) result = result.filter((s) => {
124 const cat = slugToCategory.get(s.market.slug);
125 return cat && categoryFilter.has(cat);
126 });
127 return result;
128 }, [signals, categoryFilter, strengthFilter, slugToCategory]);
129
130 return (
131 <div className="font-mono">
132 {filtered.length === 0 ? (
133 <div className="text-[12px] text-[var(--text-ghost)] py-4 text-center">
134 {t("signals.noSignals")}
135 </div>
136 ) : (
137 <div className="space-y-0">
138 {filtered.map((sig) => (
139 <SignalCard
140 key={sig.id}
141 signal={sig}
142 markets={markets}
143 onSelectMarket={onSelectMarket}
144 onSelectWallet={onSelectWallet}
145 onOpenTrade={onOpenTrade}
146 onTrade={onTrade}
147 />
148 ))}
149 </div>
150 )}
151 </div>
152 );
153}
154
155const POPUP_W = 480;
156const POPUP_MAX_H = 420;

Callers

nothing calls this directly

Calls 3

useI18nFunction · 0.90
useSignalDataFunction · 0.85
getMethod · 0.45

Tested by

no test coverage detected