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
+9 -37
View File
@@ -1,7 +1,6 @@
import { useParams, useSearchParams } from "react-router";
import { useParams } from "react-router";
import {
type BondPeriod,
useBond,
useBondCandles,
useBondCoupons,
@@ -9,37 +8,21 @@ import {
useBondPosition,
useBondQuote,
} from "@/entities/bond";
import { type OperationCategory, useBrokerageOperationHistory } from "@/entities/broker-operation";
import { section } from "@/features/instrument-details";
import { useBrokerageOperationHistory } from "@/entities/broker-operation";
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: BondPeriod[] = ["month", "halfYear", "year", "all"];
const filters = ["all", "trades", "coupons", "other"] as const;
type BondEventFilter = (typeof filters)[number];
const categories: Record<BondEventFilter, OperationCategory[]> = {
all: [],
coupons: ["income"],
other: ["tax", "fee", "transfer", "other"],
trades: ["trade"],
};
type BondPageVm = ReturnType<typeof useBondPageVm>;
function useBondPageVm() {
const { bondId = "" } = useParams();
const bond = useBond(bondId);
const uid = bond.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("coupons");
const quote = useBondQuote(uid);
const metrics = useBondMetrics(uid);
@@ -48,8 +31,7 @@ function useBondPageVm() {
const coupons = useBondCoupons(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,
});
@@ -60,9 +42,7 @@ function useBondPageVm() {
{
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: "bond",
@@ -70,14 +50,6 @@ function useBondPageVm() {
[bond, quote, candles, position, metrics, coupons, operations],
);
const setParameter = (key: string, value: string) => {
const next = new URLSearchParams(parameters);
next.set(key, value);
setParameters(next, { replace: true });
};
const search = parameters.size > 0 ? `?${parameters.toString()}` : "";
return {
bond: bond.data,
bondState: section(bond, uid ? sync.retry : () => bond.refetch()),
@@ -132,8 +104,8 @@ function useBondPageVm() {
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,
upcoming:
coupons.data?.coupons
.filter(event => event.timing === "upcoming")