Skip to content

Commit 3f00b9f

Browse files
authored
Merge pull request #470 from Stellar-xcrow/feat/selectors-and-tradecard
feat: selectActiveTrades selector + arbitrator row in TradeCard
2 parents 1ca9557 + 4c93da3 commit 3f00b9f

2 files changed

Lines changed: 18 additions & 0 deletions

File tree

components/src/escrow/TradeCard.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ export interface TradeCardProps {
1010
amount: string;
1111
status: 'created' | 'funded' | 'completed' | 'disputed' | 'cancelled';
1212
timestamp: string;
13+
/** Optional arbitrator address — shown only when present */
14+
arbitrator?: string;
1315
onClick?: () => void;
1416
}
1517

@@ -20,6 +22,7 @@ export const TradeCard: React.FC<TradeCardProps> = ({
2022
amount,
2123
status,
2224
timestamp,
25+
arbitrator,
2326
onClick,
2427
}) => {
2528
const statusVariant = status === 'completed' ? 'success' : status === 'disputed' ? 'danger' : 'info';
@@ -42,6 +45,12 @@ export const TradeCard: React.FC<TradeCardProps> = ({
4245
<span className="party-label">Buyer:</span>
4346
<span className="party-address">{buyer.slice(0, 10)}...</span>
4447
</div>
48+
{arbitrator && (
49+
<div className="trade-party">
50+
<span className="party-label">Arbitrator:</span>
51+
<span className="party-address">{arbitrator.slice(0, 10)}...</span>
52+
</div>
53+
)}
4554
<div className="trade-amount">
4655
<span className="amount-label">Amount:</span>
4756
<span className="amount-value">{amount} USDC</span>

state/src/selectors.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@ export const selectEventsByTradeId = (state: RootState, tradeId: string): Event[
2424
export const selectEventsLoading = (state: RootState): boolean => state.events.loading;
2525
export const selectEventsError = (state: RootState): string | null => state.events.error;
2626

27+
// Derived / convenience selectors
28+
export const selectTradeCount = (state: RootState): number =>
29+
tradeSelectors.selectTotal(state);
30+
31+
export const selectActiveTrades = (state: RootState): Trade[] =>
32+
tradeSelectors.selectAll(state).filter(
33+
(t) => t.status === 'created' || t.status === 'funded' || t.status === 'disputed'
34+
);
35+
2736
// UI selectors
2837
export const selectSelectedTradeId = (state: RootState): string | null =>
2938
state.ui.selectedTradeId;

0 commit comments

Comments
 (0)