fix(mera/v2): debounce-таймер адреса не чистился при размонтировании панели
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 59s

Таймер из onAddressChange (200 мс) переживал unmount и дёргал setState уже
мёртвого компонента. В CI это валило frontend-checks у PR #3226 как unhandled
`ReferenceError: window is not defined` — новый тест ParamsPanel.floors
печатает адрес и завершается раньше, чем таймер срабатывает, и тот стрелял
после teardown jsdom. Ассерты при этом были зелёные, падал сам прогон.
This commit is contained in:
bot-backend 2026-08-29 18:17:28 +03:00
parent ac5f16abfd
commit 57531c9f21

View file

@ -758,6 +758,17 @@ export default function ParamsPanel({
initialValues?.target_fias_id ?? null,
);
const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);
// Debounce-таймер адреса переживал размонтирование панели: набранный текст
// ставит таймер на 200 мс, и если панель закрыть раньше, он дёргает setState
// уже мёртвого компонента. В тестах это падает как unhandled
// `ReferenceError: window is not defined` после teardown окружения (#3226).
useEffect(
() => () => {
if (debounceRef.current) clearTimeout(debounceRef.current);
},
[],
);
// БАЛКОН radiogroup focus targets (roving tabindex).
const balNoRef = useRef<HTMLButtonElement>(null);
const balYesRef = useRef<HTMLButtonElement>(null);