moex-vibe/apps/frontend/src/pages/broker-positions/ui/BrokerPositionsPage.tsx
Sergey Krylov 2744608d06
Some checks failed
CI / ci (pull_request) Failing after 2m23s
CI / ci (push) Failing after 2m19s
chore: add @conarti/eslint-plugin-feature-sliced for FSD layer enforcement
2026-06-20 23:21:14 +03:00

42 lines
1.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { useBrokerPositions } from '@/entities/broker-position';
import { useBrokerAccountContext } from '@/widgets/broker-account-layout';
import { BrokerPositionTable } from '@/widgets/broker-positions-table';
import { useCursorPagination } from '@/shared/lib/useCursorPagination';
type BrokerPositionsPageProps = {
type: 'share' | 'bond';
title: 'Акции' | 'Облигации';
};
export function BrokerPositionsPage({ type, title }: BrokerPositionsPageProps) {
const { accountId } = useBrokerAccountContext();
const pagination = useCursorPagination();
const positions = useBrokerPositions(accountId, { type, limit: 10, cursor: pagination.cursor });
if (positions.error) {
return (
<section aria-labelledby={`broker-${type}-heading`}>
<h2 id={`broker-${type}-heading`} style={{ fontSize: 20, margin: 0 }}>
{title}
</h2>
<p role="alert">
{type === 'share' ? 'Не удалось загрузить акции' : 'Не удалось загрузить облигации'}
</p>
</section>
);
}
return (
<BrokerPositionTable
title={title}
page={positions.data}
isLoading={positions.isLoading}
isFetching={positions.isFetching}
emptyMessage={type === 'share' ? 'На счёте нет акций' : 'На счёте нет облигаций'}
pageNumber={pagination.pageNumber}
onNext={() => pagination.handleNext(positions.data?.nextCursor)}
onPrevious={pagination.handlePrevious}
/>
);
}