import { useState } from 'react'; import { useParams } from 'react-router-dom'; import type { BrokerMoney } from '../../api/responses'; import { useBrokerOperations } from '../../hooks/useBrokerOperations'; import { useBrokerPortfolio } from '../../hooks/useBrokerPortfolio'; import { BrokerOperationsTable } from './BrokerOperationsTable'; import { BrokerPositionsSection } from './BrokerPositionsSection'; function formatMoney(value: BrokerMoney | null | undefined) { if (!value) return '-'; return new Intl.NumberFormat('ru-RU', { style: 'currency', currency: value.currency || 'RUB', maximumFractionDigits: 2, }).format(value.value); } export function BrokerAccountDetailPage() { const { accountId } = useParams(); const [operationCursor, setOperationCursor] = useState(undefined); const [operationCursorStack, setOperationCursorStack] = useState>([]); const portfolio = useBrokerPortfolio(accountId); const operations = useBrokerOperations(accountId, { limit: 10, cursor: operationCursor }); if (portfolio.isLoading) return

Загрузка портфеля...

; if (portfolio.error || !portfolio.data) { return

Не удалось загрузить портфель

; } function handleNextOperationsPage() { const nextCursor = operations.data?.nextCursor; if (!nextCursor || !operations.data?.hasNext) return; setOperationCursorStack((previous) => [...previous, operationCursor]); setOperationCursor(nextCursor); } function handlePreviousOperationsPage() { if (operationCursorStack.length === 0) return; const nextStack = operationCursorStack.slice(0, -1); const previousCursor = operationCursorStack[operationCursorStack.length - 1]; setOperationCursorStack(nextStack); setOperationCursor(previousCursor); } return (

{portfolio.data.account.name}

{formatMoney(portfolio.data.totals.portfolio)} День: {formatMoney(portfolio.data.yields.daily)} Ожидаемая: {portfolio.data.yields.expectedPercent ?? '-'}%
{portfolio.data.cash.map((money) => (
{money.currency}
{formatMoney(money)}
))}
0} canGoForward={Boolean(operations.data?.hasNext && operations.data.nextCursor)} onPrevious={handlePreviousOperationsPage} onNext={handleNextOperationsPage} />
); }