From 861423c1e31c9629941c94f3a3daae0482a0c6c8 Mon Sep 17 00:00:00 2001 From: Celes Renata Date: Thu, 30 Apr 2026 03:15:22 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20make=20ticker=20clickable=20on=20positi?= =?UTF-8?q?ons=20page=20=E2=80=94=20links=20to=20company=20detail?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ticker column now links to /companies/{id} using a ticker→company ID lookup. Falls back to plain text if company not found. --- frontend/src/pages/Positions.tsx | 35 ++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/frontend/src/pages/Positions.tsx b/frontend/src/pages/Positions.tsx index 5d0194d..13e49ed 100644 --- a/frontend/src/pages/Positions.tsx +++ b/frontend/src/pages/Positions.tsx @@ -1,4 +1,5 @@ -import { usePositions } from '../api/hooks'; +import { Link } from '@tanstack/react-router'; +import { usePositions, useCompanies } from '../api/hooks'; import { DataTable, type Column } from '../components/DataTable'; import { LoadingSpinner } from '../components/ui'; import type { Position } from '../api/hooks'; @@ -25,6 +26,36 @@ const columns: Column[] = [ export function PositionsPage() { const { data, isLoading } = usePositions(); + const { data: companies } = useCompanies(); + + // Build ticker → company ID lookup + const tickerToId: Record = {}; + for (const c of companies ?? []) { + tickerToId[c.ticker] = c.id; + } + + const posColumns: Column[] = [ + { + key: 'ticker', + header: 'Ticker', + render: (r) => { + const companyId = tickerToId[r.ticker]; + return companyId ? ( + + {r.ticker} + + ) : ( + {r.ticker} + ); + }, + }, + { key: 'quantity', header: 'Qty' }, + { key: 'avg_entry_price', header: 'Entry', render: (r) => {fmtUsd(r.avg_entry_price)} }, + { key: 'current_price', header: 'Current', render: (r) => {fmtUsd(r.current_price)} }, + { key: 'unrealized_pnl', header: 'Unrealized P&L', render: (r) => {fmtUsd(r.unrealized_pnl)} }, + { key: 'realized_pnl', header: 'Realized P&L', render: (r) => {fmtUsd(r.realized_pnl)} }, + { key: 'updated_at', header: 'Updated', render: (r) => {new Date(r.updated_at).toLocaleString()} }, + ]; if (isLoading) return ; @@ -58,7 +89,7 @@ export function PositionsPage() {

Positions

data={positions} - columns={columns} + columns={posColumns} keyField="id" footerRow={footer} />