Files
frontend/src/pages/stock/ui/StockPage/StockPage.view.tsx
T
ksv741 5b30bb802a feat: add quiet reading with rare confirmations
Part of the quiet-user-feedback change; docs and specs land in their own repositories.
2026-10-06 07:01:58 +03:00

77 lines
1.6 KiB
TypeScript

import type { FC } from "react";
import { Text } from "@mantine/core";
import { useTranslation } from "react-i18next";
import {
InstrumentHeader,
InstrumentPage,
InstrumentChart as StockChart,
InstrumentEvents as StockEvents,
InstrumentPosition as StockPosition,
} from "@/features/instrument-details";
import type { StockPageVm } from "./StockPage.vm";
import { StockCompany } from "./components/StockCompany.view";
import { StockDividends } from "./components/StockDividends.view";
import { StockQuote } from "./components/StockQuote.view";
type StockPageViewProps = { vm: StockPageVm };
const StockPageView: FC<StockPageViewProps> = (props) => {
const { vm } = props;
const { t } = useTranslation();
const stock = vm.stock;
if (!stock) return;
const subtitle = (
<>
{stock.ticker} ·{" "}
{t(`stock.shareTypes.${stock.shareType}`, {
defaultValue: t("stock.share"),
})}
</>
);
return (
<InstrumentPage>
<InstrumentHeader
logoSrc={vm.logoSrc}
name={stock.name}
subtitle={subtitle}
>
{!!vm.company?.description && (
<Text mt="md" size="sm" style={{ whiteSpace: "pre-line" }}>
{vm.company.description}
</Text>
)}
<StockQuote quote={vm.quote} quoteState={vm.quoteState} />
<StockCompany
company={vm.company}
companyState={vm.companyState}
stock={stock}
/>
</InstrumentHeader>
<StockChart vm={vm} />
<StockPosition vm={vm} />
<StockDividends
dividends={vm.dividends}
pastDividends={vm.pastDividends}
state={vm.dividendsState}
upcoming={vm.upcoming}
/>
<StockEvents vm={vm} />
</InstrumentPage>
);
};
export { StockPageView };