import type { FC } from "react"; import { Alert, Anchor, Stack, Text } from "@mantine/core"; import { useTranslation } from "react-i18next"; import { Link } from "react-router"; import { formatDecimal, formatMoney, formatSnapshotTime } from "@/shared/lib"; import type { InstrumentPositionVm } from "../model/types"; import classes from "./InstrumentDetails.module.css"; import { InstrumentSection } from "./InstrumentSection.view"; type InstrumentPositionProps = { quantityLabel?: string; returnNote?: string; vm: InstrumentPositionVm; }; const InstrumentPosition: FC = (props) => { const { vm } = props; const { t } = useTranslation(); if (vm.position && vm.position.accounts.length === 0) return; const positionReturnColor = vm.position?.absoluteReturn?.value.startsWith("-") ? "red.8" : "green.8"; return ( {!!vm.position && ( {!!vm.position.isStale && {t("portfolio.staleWarning")}}
{props.quantityLabel ?? t("stock.quantity")} {formatDecimal(vm.position.quantity)}
{t("stock.value")} {formatMoney(vm.position.currentValue)}
{t("stock.average")} {formatMoney(vm.position.averagePurchasePrice)}
{t("stock.openReturn")} {formatMoney(vm.position.absoluteReturn)} {vm.position.returnPercent !== null && ( {formatDecimal(vm.position.returnPercent)} % )}
{props.returnNote ?? t("stock.openReturnNote")}
{vm.position.accounts.map((account) => { const accountReturnColor = account.absoluteReturn?.value.startsWith("-") ? "red.8" : undefined; return (
{account.account ? ( {account.account.name} ) : {t("stock.portfolio")}}
{props.quantityLabel ?? t("stock.quantity")} {formatDecimal(account.quantity)}
{t("stock.average")} {formatMoney(account.averagePurchasePrice)}
{t("stock.value")} {formatMoney(account.currentValue)}
{t("stock.openReturn")} {formatMoney(account.absoluteReturn)} {account.returnPercent !== null && ( {formatDecimal(account.returnPercent)} % )}
); })}
{t("stock.snapshotAt", { date: formatSnapshotTime(vm.position.observedAt), })}
)}
); }; export { InstrumentPosition };