fix(mera/v2): форма принимала этаж больше этажности дома #3226

Merged
lekss361 merged 2 commits from fix/mera-floor-validation into main 2026-08-29 15:19:25 +00:00

2 commits

Author SHA1 Message Date
bot-backend
57531c9f21 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. Ассерты при этом были зелёные, падал сам прогон.
2026-08-29 18:17:28 +03:00
bot-backend
ac5f16abfd fix(mera/v2): форма принимала этаж больше этажности дома
Some checks failed
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
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) Failing after 51s
Прод-инцидент 6d0c268e (пр-кт Академика Сахарова 81): оценка ушла в
расчёт с floor=17 при total_floors=9. Ни форма, ни бэкенд не отбили
взаимно противоречивый ввод — мусор дошёл до этажных коэффициентов.

ParamsPanel v2 теперь блокирует сабмит по тому же паттерну, что уже
используется для адреса и площади (fieldErrors + aria-invalid +
aria-describedby + текст под инпутом):

- floor > total_floors (когда заполнены оба)
- нулевой этаж / нулевая этажность
- этаж или этажность > 100

Оба поля остаются опциональными — пустые значения не блокируют.
Правка любого из двух полей сбрасывает обе ошибки: floor > total_floors
— ошибка про пару, а не про одно поле.

Бэкенд не трогали: серверная проверка — отдельным заходом.
2026-08-29 16:03:03 +03:00