import type { FC } from "react"; import { Anchor, Card, Group, Stack, Text } from "@mantine/core"; import { useTranslation } from "react-i18next"; import { Link } from "react-router"; import { formatMoney } from "@/shared/lib"; import type { AccountPagePosition, AccountPagePositionSection } from "../../../../model/positions"; import classes from "../../AccountPage.module.css"; import { PositionLogo } from "../PositionLogo.view"; type PositionCardProps = { kind: AccountPagePositionSection["kind"]; position: AccountPagePosition; }; const PositionCard: FC = (props) => { const { kind, position } = props; const { t } = useTranslation(); const isExpanded = kind !== "other"; const returnClass = position.returnTone ? classes[position.returnTone] : undefined; let returnText = position.returnText; if (returnText && !isExpanded) returnText = t("portfolio.return", { value: returnText }); const instrumentTo = position.instrumentTo; const identifier = kind === "stocks" ? (position.ticker ?? position.isin) : position.isin; const identifierText = [ t("portfolio.quantity", { value: position.quantity }), identifier, ] .filter(Boolean) .join(" · "); const accountLink = position.account ? ( {position.account.name} ) : undefined; const secondaryText = [ position.averagePurchasePrice ? t("portfolio.avgPrice", { value: formatMoney(position.averagePurchasePrice), }) : null, position.shareText ? t("portfolio.share", { value: position.shareText }) : null, ] .filter(Boolean) .join(" · "); if (isExpanded) return (
{instrumentTo ? ( {position.displayName} ) : ( {position.displayName} )} {accountLink} {identifierText} {!!position.currentValue && ( {formatMoney(position.currentValue)} )} {!!returnText && ( {returnText} )}
{!!secondaryText && ( {secondaryText} )}
); return ( {position.displayName} {accountLink} {!!position.isin && ( {position.isin} )} {t("portfolio.quantity", { value: position.quantity })} {!!position.currentValue && ( {formatMoney(position.currentValue)} )} {!!returnText && ( {returnText} )} {!!(position.averagePurchasePrice || position.shareText) && ( {!!position.averagePurchasePrice && ( {t("portfolio.avgPrice", { value: formatMoney(position.averagePurchasePrice), })} )} {!!position.shareText && ( {t("portfolio.share", { value: position.shareText })} )} )} ); }; export { PositionCard };