fix(#195): сброс модалки «Указать» и возврат со страницы за концом списка (T5.1–T5.3)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-10-27 19:03:01 +04:00
parent 6db9fa2ae1
commit 7df8a937fa
2 changed files with 10 additions and 1 deletions

View File

@ -55,6 +55,11 @@ function usePagedRows(versionId: string, filters: OsvFilters | null, reloadKey:
getConsolidatedOsv(versionId, filters, OSV_PAGE_SIZE, (page - 1) * OSV_PAGE_SIZE) getConsolidatedOsv(versionId, filters, OSV_PAGE_SIZE, (page - 1) * OSV_PAGE_SIZE)
.then((r) => { .then((r) => {
if (requestId !== requestRef.current) return; if (requestId !== requestRef.current) return;
// страница ушла за конец (последнюю строку сопоставили) — назад на допустимую
if (r.items.length === 0 && page > 1) {
setPage(page - 1);
return;
}
setRows(r.items); setRows(r.items);
setTotal(r.total); setTotal(r.total);
setError(null); setError(null);
@ -89,6 +94,7 @@ export function CounterPairsView({ versionId, pairs, selected, numFormat, onSele
useEffect(() => { useEffect(() => {
setQ(''); setQ('');
setDebouncedQ(''); setDebouncedQ('');
setMapping(null);
}, [selectedKey]); }, [selectedKey]);
const centerFilters: OsvFilters | null = selected ? { legal_entity_id: selected.holder_id, counterparty_id: selected.missing_id } : null; 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(() => { const mapped = useCallback(() => {
setMapping(null);
setReloadKey((k) => k + 1); setReloadKey((k) => k + 1);
onMapped(); onMapped();
}, [onMapped]); }, [onMapped]);

View File

@ -62,7 +62,9 @@ export function OsvContent({ card, onSummaryChange }: Props) {
if (selectedPair && (selectedPair.holder_id !== pairsView.holder || selectedPair.missing_id !== pairsView.missing)) { if (selectedPair && (selectedPair.holder_id !== pairsView.holder || selectedPair.missing_id !== pairsView.missing)) {
setView({ view: 'pairs', holder: selectedPair.holder_id, missing: selectedPair.missing_id }); 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(() => { useEffect(() => {
onSummaryChange?.(s); onSummaryChange?.(s);
}, [s, onSummaryChange]); }, [s, onSummaryChange]);