From 7df8a937fa998f70b001422cd335c034db30b832 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Tue, 27 Oct 2026 19:03:01 +0400 Subject: [PATCH] =?UTF-8?q?fix(#195):=20=D1=81=D0=B1=D1=80=D0=BE=D1=81=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B4=D0=B0=D0=BB=D0=BA=D0=B8=20=C2=AB=D0=A3=D0=BA?= =?UTF-8?q?=D0=B0=D0=B7=D0=B0=D1=82=D1=8C=C2=BB=20=D0=B8=20=D0=B2=D0=BE?= =?UTF-8?q?=D0=B7=D0=B2=D1=80=D0=B0=D1=82=20=D1=81=D0=BE=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=8B=20=D0=B7=D0=B0=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=86=D0=BE=D0=BC=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA?= =?UTF-8?q?=D0=B0=20(T5.1=E2=80=93T5.3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- web/src/widgets/ConsolidatedOsv/CounterPairsView.tsx | 7 +++++++ .../ConsolidatedOsvContent/ConsolidatedOsvContent.tsx | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/web/src/widgets/ConsolidatedOsv/CounterPairsView.tsx b/web/src/widgets/ConsolidatedOsv/CounterPairsView.tsx index e61b328..c2bc981 100644 --- a/web/src/widgets/ConsolidatedOsv/CounterPairsView.tsx +++ b/web/src/widgets/ConsolidatedOsv/CounterPairsView.tsx @@ -55,6 +55,11 @@ function usePagedRows(versionId: string, filters: OsvFilters | null, reloadKey: getConsolidatedOsv(versionId, filters, OSV_PAGE_SIZE, (page - 1) * OSV_PAGE_SIZE) .then((r) => { if (requestId !== requestRef.current) return; + // страница ушла за конец (последнюю строку сопоставили) — назад на допустимую + if (r.items.length === 0 && page > 1) { + setPage(page - 1); + return; + } setRows(r.items); setTotal(r.total); setError(null); @@ -89,6 +94,7 @@ export function CounterPairsView({ versionId, pairs, selected, numFormat, onSele useEffect(() => { setQ(''); setDebouncedQ(''); + setMapping(null); }, [selectedKey]); const centerFilters: OsvFilters | null = selected ? { legal_entity_id: selected.holder_id, counterparty_id: selected.missing_id } : null; @@ -128,6 +134,7 @@ export function CounterPairsView({ versionId, pairs, selected, numFormat, onSele ]; const mapped = useCallback(() => { + setMapping(null); setReloadKey((k) => k + 1); onMapped(); }, [onMapped]); diff --git a/web/src/widgets/ConsolidatedOsvContent/ConsolidatedOsvContent.tsx b/web/src/widgets/ConsolidatedOsvContent/ConsolidatedOsvContent.tsx index 9888527..4550630 100644 --- a/web/src/widgets/ConsolidatedOsvContent/ConsolidatedOsvContent.tsx +++ b/web/src/widgets/ConsolidatedOsvContent/ConsolidatedOsvContent.tsx @@ -62,7 +62,9 @@ export function OsvContent({ card, onSummaryChange }: Props) { if (selectedPair && (selectedPair.holder_id !== pairsView.holder || selectedPair.missing_id !== pairsView.missing)) { setView({ view: 'pairs', holder: selectedPair.holder_id, missing: selectedPair.missing_id }); } - }); + // biome-ignore lint/correctness/useExhaustiveDependencies: setView пересоздаётся каждый рендер, нужны только эти значения + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [inPairs, s, selectedPair, pairsView.holder, pairsView.missing]); useEffect(() => { onSummaryChange?.(s); }, [s, onSummaryChange]);