import { Alert, Group, SegmentedControl, Stack, Tabs, Text, } from "@mantine/core"; import { type FC, useState } from "react"; import { useTranslation } from "react-i18next"; import type { BrokerageAccount } from "@/entities/brokerage-account"; import type { Portfolio } from "@/entities/portfolio"; import type { InvestmentResourceMeta } from "@/shared/api"; import { BrokerageEventsPreview } from "@/entities/brokerage-event"; import { formatMoney } from "@/shared/lib"; import { SourceSyncStatus } from "@/shared/ui"; import { PortfolioStructure } from "@/widgets/portfolio-structure"; import type { AccountPagePositionSection } from "../../../model/positions"; import type { AccountPageIncomeSummary, AccountPageRecentEvents, AccountPageRecentOperations, } from "../../../model/previews"; import classes from "../AccountPage.module.css"; import { AccountHeading } from "./AccountHeading.view"; import { CurrencyCards } from "./CurrencyCards/CurrencyCards.view"; import { IncomeSummary } from "./IncomeSummary.view"; import { PositionSection } from "./PositionSection.view"; import { RecentOperations } from "./RecentOperations.view"; type AccountPageLoadedProps = { account?: BrokerageAccount; accountId?: string; incomeSummary?: AccountPageIncomeSummary; partial?: boolean; portfolio: Portfolio; positionSections: AccountPagePositionSection[]; recentEvents: AccountPageRecentEvents; recentOperations: AccountPageRecentOperations; source?: InvestmentResourceMeta; unrealizedReturns: Portfolio["totalsByCurrency"]; }; const AccountPageLoaded: FC = (props) => { const { t } = useTranslation(); const [filter, setFilter] = useState(); const activeSection = props.positionSections.find( section => section.kind === filter, ) ?? props.positionSections[0]; const positionKindLabels: Record = { bonds: t("portfolio.positionKinds.bonds"), other: t("portfolio.positionKinds.other"), stocks: t("portfolio.positionKinds.stocks"), }; const filterOptions = props.positionSections.map(section => ({ label: positionKindLabels[section.kind], value: section.kind, })); return ( {props.partial ? {t("investment.partial")} : } {!props.partial && props.unrealizedReturns.length > 0 && ( {t("portfolio.unrealizedResult")} {props.unrealizedReturns.map(total => ( {formatMoney(total)} ))} {t("portfolio.unrealizedResultCaption")} )} {!props.partial && ( )} {t("portfolio.tabs.positions")} {t("portfolio.tabs.cash")} {t("portfolio.tabs.operations")} {t("portfolio.tabs.events")} {t("portfolio.tabs.income")} {props.positionSections.length > 1 && (
)} {activeSection && }
{!!props.incomeSummary && ( )}
); }; export { AccountPageLoaded };