diff --git a/src/pages/account/model/positions.test.ts b/src/pages/account/model/positions.test.ts index 6d63f7f..e70943c 100644 --- a/src/pages/account/model/positions.test.ts +++ b/src/pages/account/model/positions.test.ts @@ -93,6 +93,7 @@ describe("account position sections", () => { displayName: "Акция", logoSrc: "https://invest-brands.cdn-tinkoff.ru/akciyax160.png", returnPercent: null, + returnPercentText: null, returnText: "+10 ₽", returnTone: "positive", shareText: "66,7 %", @@ -107,6 +108,7 @@ describe("account position sections", () => { displayName: "Облигация", logoSrc: null, returnPercent: "-11.111111", + returnPercentText: "-11,11 %", returnText: "-5 ₽", returnTone: "negative", shareText: "33,3 %", @@ -120,6 +122,7 @@ describe("account position sections", () => { displayName: "Фонд", logoSrc: null, returnPercent: null, + returnPercentText: null, returnText: null, returnTone: undefined, shareText: null, diff --git a/src/pages/account/model/positions.ts b/src/pages/account/model/positions.ts index 6c74c2b..0a217db 100644 --- a/src/pages/account/model/positions.ts +++ b/src/pages/account/model/positions.ts @@ -1,10 +1,11 @@ import { formatShare, type Portfolio } from "@/entities/portfolio"; -import { formatMoney, instrumentLogoUrl } from "@/shared/lib"; +import { formatDecimal, formatMoney, instrumentLogoUrl } from "@/shared/lib"; type AccountPagePosition = Portfolio["positions"][number] & { instrumentTo?: string; logoSrc: null | string; returnPercent: null | string; + returnPercentText: null | string; returnText: null | string; returnTone?: AccountPageReturnTone; shareText: null | string; @@ -222,6 +223,8 @@ function toPosition( const returnPrefix = isExpanded && returnValue !== null && returnValue > 0 ? "+" : ""; + const percent = returnPercent(position); + return { ...position, instrumentTo: @@ -231,7 +234,10 @@ function toPosition( logoSrc: isExpanded ? instrumentLogoUrl(position.logoName) : null, - returnPercent: returnPercent(position), + returnPercent: percent, + returnPercentText: percent + ? `${formatDecimal(formatPositionReturnPercent(percent))} %` + : null, returnText: position.absoluteReturn ? `${returnPrefix}${formatMoney(position.absoluteReturn)}` : null, diff --git a/src/pages/account/ui/AccountPage/components/PositionCard/PositionCard.stories.tsx b/src/pages/account/ui/AccountPage/components/PositionCard/PositionCard.stories.tsx index 3c792fa..f6f3c97 100644 --- a/src/pages/account/ui/AccountPage/components/PositionCard/PositionCard.stories.tsx +++ b/src/pages/account/ui/AccountPage/components/PositionCard/PositionCard.stories.tsx @@ -16,6 +16,7 @@ const syntheticPosition logoSrc: null, quantity: "100", returnPercent: "25", + returnPercentText: "+25,00 %", returnText: "+5 000 ₽", returnTone: "positive", shareText: "20%", @@ -75,6 +76,7 @@ export const BondLoss: Story isin: "DEMO-BOND-2030", quantity: "10", returnPercent: "-5", + returnPercentText: "-5,00 %", returnText: "−500 ₽", returnTone: "negative", shareText: "7,6%", @@ -126,6 +128,7 @@ export const MissingValuation: Story currentValue: null, displayName: "Учебная позиция без текущей оценки", returnPercent: null, + returnPercentText: null, returnText: null, returnTone: undefined, shareText: null, diff --git a/src/pages/account/ui/AccountPage/components/PositionCard/PositionCard.view.tsx b/src/pages/account/ui/AccountPage/components/PositionCard/PositionCard.view.tsx index c6cfc2b..0ae8ee2 100644 --- a/src/pages/account/ui/AccountPage/components/PositionCard/PositionCard.view.tsx +++ b/src/pages/account/ui/AccountPage/components/PositionCard/PositionCard.view.tsx @@ -4,13 +4,13 @@ import { Anchor, Card, Group, Stack, Text } from "@mantine/core"; import { useTranslation } from "react-i18next"; import { Link } from "react-router"; -import { formatDecimal, formatMoney } from "@/shared/lib"; +import { formatMoney } from "@/shared/lib"; -import { - type AccountPagePosition, - type AccountPagePositionSection, - formatPositionReturnPercent, +import type { + AccountPagePosition, + AccountPagePositionSection, } from "../../../../model/positions"; + import classes from "../../AccountPage.module.css"; import { PositionLogo } from "../PositionLogo.view"; @@ -30,8 +30,8 @@ const PositionCard: FC = (props) => { let returnText = position.returnText; - if (returnText && position.returnPercent) { - returnText += ` · ${formatDecimal(formatPositionReturnPercent(position.returnPercent))} %`; + if (returnText && position.returnPercentText) { + returnText += ` · ${position.returnPercentText}`; } if (returnText && !isExpanded) { diff --git a/src/pages/account/ui/AccountPage/components/PositionGroupCard.view.tsx b/src/pages/account/ui/AccountPage/components/PositionGroupCard.view.tsx index b3dcc3c..2e5753f 100644 --- a/src/pages/account/ui/AccountPage/components/PositionGroupCard.view.tsx +++ b/src/pages/account/ui/AccountPage/components/PositionGroupCard.view.tsx @@ -4,13 +4,13 @@ import { Anchor, Card, Group, Stack, Text } from "@mantine/core"; import { useTranslation } from "react-i18next"; import { Link } from "react-router"; -import { formatDecimal, formatMoney } from "@/shared/lib"; +import { formatMoney } from "@/shared/lib"; -import { - type AccountPagePositionGroup, - type AccountPagePositionSection, - formatPositionReturnPercent, +import type { + AccountPagePositionGroup, + AccountPagePositionSection, } from "../../../model/positions"; + import classes from "../AccountPage.module.css"; import { PositionLogo } from "./PositionLogo.view"; @@ -63,8 +63,8 @@ const PositionGroupCard: FC = (props) => { ? classes[position.returnTone] : undefined; - const returnPercent = position.returnPercent - ? ` · ${formatDecimal(formatPositionReturnPercent(position.returnPercent))} %` + const returnPercent = position.returnPercentText + ? ` · ${position.returnPercentText}` : ""; const returnValue = `${position.returnText ?? ""}${returnPercent}`; diff --git a/src/pages/account/ui/AccountPage/position-layout.browser.test.tsx b/src/pages/account/ui/AccountPage/position-layout.browser.test.tsx index 03926a2..10bd665 100644 --- a/src/pages/account/ui/AccountPage/position-layout.browser.test.tsx +++ b/src/pages/account/ui/AccountPage/position-layout.browser.test.tsx @@ -41,6 +41,7 @@ it("keeps expanded positions vertical while other positions adapt to the viewpor logoSrc: null, quantity: "10", returnPercent: null, + returnPercentText: null, returnText: null, shareText: null, ticker: null,