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 { Concentration as ConcentrationModel, Slice } from "../../../model/concentration"; 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 { Concentration } from "./Concentration/Concentration.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; concentration: ConcentrationModel | null; currency: null | string; incomeSummary?: AccountPageIncomeSummary; onCurrencyChange: (currency: null | string) => void; onSliceChange: (slice: Slice) => void; onTabChange: (tab: null | string) => void; partial?: boolean; portfolio: Portfolio; positionSections: AccountPagePositionSection[]; recentEvents: AccountPageRecentEvents; recentOperations: AccountPageRecentOperations; slice: Slice; source?: InvestmentResourceMeta; tab: string; unrealizedReturns: Portfolio["totalsByCurrency"]; }; const AccountPageLoaded: FC = (props) => { const { t } = useTranslation(); const [filter, setFilter] = useState(); const tab = props.tab; const onTabChange = props.onTabChange; 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 ? tab !== "concentration" && ( {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")} {props.accountId !== "all" && ( {t("portfolio.concentration.title")} )} {t("portfolio.tabs.cash")} {t("portfolio.tabs.operations")} {t("portfolio.tabs.events")} {t("portfolio.tabs.income")} {props.positionSections.length > 1 && (
)} {activeSection && }
{props.accountId !== "all" && ( {props.concentration && ( )} )} {!!props.incomeSummary && ( )}
); }; export { AccountPageLoaded };