import { useState } from 'react'; import { useTickers, useAddTicker, useDeleteTicker } from '../../hooks/useTickers'; import { ConfirmDialog } from '../ui/ConfirmDialog'; import { SkeletonTable } from '../ui/Skeleton'; import { formatDateTime } from '../../lib/format'; export function TickerManagement() { const { data: tickers, isLoading, isError, error } = useTickers(); const addTicker = useAddTicker(); const deleteTicker = useDeleteTicker(); const [newSymbol, setNewSymbol] = useState(''); const [deleteTarget, setDeleteTarget] = useState(null); function handleAdd(e: React.FormEvent) { e.preventDefault(); const symbol = newSymbol.trim().toUpperCase(); if (!symbol) return; addTicker.mutate(symbol, { onSuccess: () => setNewSymbol('') }); } function handleConfirmDelete() { if (!deleteTarget) return; deleteTicker.mutate(deleteTarget, { onSuccess: () => setDeleteTarget(null) }); } return (
setNewSymbol(e.target.value)} placeholder="Enter ticker symbol (e.g. AAPL)" className="flex-1 input-glass px-3 py-2.5 text-sm" />
{isLoading && } {isError &&

{(error as Error)?.message || 'Failed to load tickers'}

} {tickers && tickers.length > 0 && (
{tickers.map((ticker) => ( ))}
Symbol Added Actions
{ticker.symbol} {formatDateTime(ticker.created_at)}
)} {tickers && tickers.length === 0 && (

No tickers registered yet. Add one above.

)} setDeleteTarget(null)} />
); }