import { Button, Heading, Text } from '@moex-vibe/design-system' import { Box } from '@mui/material' import { useEffect } from 'react' import { BROKER_OPERATION_TYPE_OPTIONS, isBrokerOperationType, useBrokerOperations, useSyncBrokerOperations, } from '@/entities/broker-operation' import { useSearchParamsCompat } from '@/shared/lib/router/useSearchParams' import { useCursorPagination } from '@/shared/lib/useCursorPagination' import { useBrokerAccountContext } from '@/widgets/broker-account-layout' import { BrokerOperationsTable } from '@/widgets/broker-operations-table' function getDefaultSyncRange() { const now = new Date() const start = new Date(Date.UTC(now.getUTCFullYear(), 0, 1)) return { from: start.toISOString(), to: now.toISOString(), } } export function BrokerOperationsPage() { const { accountId } = useBrokerAccountContext() const sync = useSyncBrokerOperations(accountId) const [searchParams, setSearchParams] = useSearchParamsCompat() const urlType = searchParams.get('type') const selectedType = isBrokerOperationType(urlType) ? urlType : '' const pagination = useCursorPagination() const operations = useBrokerOperations(accountId, { limit: 10, cursor: pagination.cursor, operationTypes: selectedType || undefined, }) useEffect(() => { pagination.reset() }, [pagination.reset]) function handleTypeChange(event: React.ChangeEvent) { const nextType = event.target.value setSearchParams(nextType ? { type: nextType } : {}, { replace: true }) } const history = operations.error ? ( Не удалось загрузить историю операций ) : ( 1, canGoForward: Boolean(operations.data?.hasNext && operations.data.nextCursor), onPrevious: pagination.handlePrevious, onNext: () => pagination.handleNext(operations.data?.nextCursor), }} /> ) function handleSync() { const range = getDefaultSyncRange() sync.mutate(range) } return ( Операции Тип операции {sync.isSuccess && ( Синхронизировано: {sync.data?.upserted} операций )} {sync.isError && ( Ошибка синхронизации )} {history} ) }