refactor: simplify auth and instrument pages
Frontend verify / commits (pull_request) Successful in 24s
Frontend verify / security (pull_request) Failing after 9s
Frontend verify / verify (pull_request) Skipped

This commit is contained in:
2026-09-29 05:45:08 +03:00
parent 32a77860c8
commit b404c1802a
38 changed files with 644 additions and 790 deletions
+10 -38
View File
@@ -1,8 +1,7 @@
import { useParams, useSearchParams } from "react-router";
import { useParams } from "react-router";
import { type OperationCategory, useBrokerageOperationHistory } from "@/entities/broker-operation";
import { useBrokerageOperationHistory } from "@/entities/broker-operation";
import {
type StockPeriod,
useStock,
useStockCandles,
useStockCompany,
@@ -12,36 +11,21 @@ import {
} from "@/entities/stock";
import {
section,
useInstrumentParameters,
} from "@/features/instrument-details";
import { useScreenSync } from "@/features/tbank-connection";
import { apiErrorCode } from "@/shared/api";
import { instrumentLogoUrl } from "@/shared/lib";
const periods: StockPeriod[] = ["month", "halfYear", "year", "all"];
const filters = ["all", "trades", "dividends", "other"] as const;
type StockEventFilter = (typeof filters)[number];
const categories: Record<StockEventFilter, OperationCategory[]> = {
all: [],
dividends: ["income"],
other: ["tax", "fee", "transfer", "other"],
trades: ["trade"],
};
type StockPageVm = ReturnType<typeof useStockPageVm>;
function useStockPageVm() {
const { stockId = "" } = useParams();
const stock = useStock(stockId);
const uid = stock.data?.instrumentUid ?? "";
const [parameters, setParameters] = useSearchParams();
const period
= periods.find(value => value === parameters.get("period")) ?? "month";
const filter
= filters.find(value => value === parameters.get("events")) ?? "all";
const { categories, filter, period, search, setFilter, setPeriod }
= useInstrumentParameters("dividends");
const quote = useStockQuote(uid);
const candles = useStockCandles(uid, period);
@@ -50,8 +34,7 @@ function useStockPageVm() {
const dividends = useStockDividends(uid);
const history = useBrokerageOperationHistory(uid ? "all" : undefined, {
// eslint-disable-next-line security/detect-object-injection -- This lookup uses a fixed typed key set, not an arbitrary external property name.
categories: categories[filter],
categories,
instrumentUid: uid,
limit: 20,
});
@@ -62,9 +45,7 @@ function useStockPageVm() {
{
accountId: "all",
candlePeriod: period,
categories:
// eslint-disable-next-line security/detect-object-injection -- This lookup uses a fixed typed key set, not an arbitrary external property name.
categories[filter],
categories,
instrumentUid: uid,
limit: 20,
screen: "stock",
@@ -72,15 +53,6 @@ function useStockPageVm() {
[stock, quote, candles, position, company, dividends, operations],
);
const setParameter = (key: string, value: string) => {
const next = new URLSearchParams(parameters);
next.set(key, value);
setParameters(next, { replace: true });
};
const companyData = company.data;
const search = parameters.size > 0 ? `?${parameters.toString()}` : "";
return {
candles: candles.data,
candlesState: section(candles, sync.retry),
@@ -89,7 +61,7 @@ function useStockPageVm() {
? `/stocks/${encodeURIComponent(stock.data.slug)}${search}`
: null,
code: apiErrorCode(stock.error),
company: companyData,
company: company.data,
companyState: section(company, sync.retry),
dividends: dividends.data,
dividendsState: section(dividends, sync.retry),
@@ -133,8 +105,8 @@ function useStockPageVm() {
refresh: sync.refresh,
refreshError: sync.transportError || sync.sourceError,
refreshing: sync.refreshing,
setFilter: (value: string) => setParameter("events", value),
setPeriod: (value: string) => setParameter("period", value),
setFilter,
setPeriod,
stock: stock.data,
stockState: section(stock, uid ? sync.retry : () => stock.refetch()),
upcoming: