import { Accordion, Alert, Stack, Text } from "@mantine/core"; import type { FC } from "react"; import { useTranslation } from "react-i18next"; import type { BrokerageAccount } from "@/entities/brokerage-account"; import { BrokerageEventsPreview } from "@/entities/brokerage-event"; import type { Portfolio } from "@/entities/portfolio"; import { formatSnapshotTime } from "@/shared/lib"; import classes from "../AccountPage.module.css"; import type { AccountPageIncomeSummary, AccountPagePositionSection, AccountPageRecentEvents, AccountPageRecentOperations, } from "../AccountPage.vm"; import { AccountHeading } from "./AccountHeading.view"; import { CurrencyCards } from "./CurrencyCards.view"; import { IncomeSummary } from "./IncomeSummary.view"; import { PortfolioRefreshState } from "./PortfolioRefreshState.view"; import { PortfolioStructure } from "./PortfolioStructure"; import { PositionSection } from "./PositionSection.view"; import { RecentOperations } from "./RecentOperations.view"; type AccountPageLoadedProps = { account?: BrokerageAccount; accountId?: string; portfolio: Portfolio; positionSections: AccountPagePositionSection[]; refreshing?: boolean; refreshError?: boolean; retry?: () => void; recentOperations: AccountPageRecentOperations; recentEvents: AccountPageRecentEvents; incomeSummary?: AccountPageIncomeSummary; }; const AccountPageLoaded: FC = (props) => { const { t } = useTranslation(); return ( {props.portfolio.isStale ? ( {t("portfolio.staleWarning")} ) : null} {t( props.accountId === "all" ? "portfolio.allUpdatedAt" : "portfolio.updatedAt", { date: formatSnapshotTime(props.portfolio.lastSuccessfulAt), }, )} section.kind), "cash", "recentOperations", "recentEvents", "incomeSummary", ]} classNames={{ control: classes.accordionControl, label: classes.accordionLabel, chevron: classes.accordionChevron, panel: classes.accordionPanel, }} > {props.positionSections.map((section) => ( {t(positionSectionTitleKey(section.kind))} ))} {t("portfolio.cashBalances")} {t("ledger.recentTitle")} {t("events.recentTitle")} {t("income.summaryTitle")} {props.incomeSummary ? ( ) : null} ); }; function positionSectionTitleKey(kind: AccountPagePositionSection["kind"]) { if (kind === "stocks") return "portfolio.stocks"; if (kind === "bonds") return "portfolio.bonds"; return "portfolio.otherPositions"; } export { AccountPageLoaded };