Фронтовая половина #3257. После выбора адреса из автокомплита дёргается
GET /geocode/house-facts и заполняет поля, которые пользователь не трогал.
Покрытие справочника: этажность 98.3%, год 86.8% — значит большинству
пользователей эти три поля больше заполнять не придётся.
Три вещи, которые здесь ломаются молча, поэтому сделаны явно:
1. Не затираем ввод. Подставляем только в пустое поле либо в то, что раньше
заполнили мы сами. Человек вписал 16 этажей — 16 и останется.
2. Гонка. Пользователь успевает выбрать второй адрес, пока летит первый запрос.
Гейт по счётчику поколений + AbortController: ответ на устаревший адрес не
применяется, даже если пришёл последним.
3. Не зовём setState после размонтирования. В этом файле уже был ровно такой
баг (#3226, debounce-таймер переживал unmount) — при размонтировании
отменяем летящий запрос.
found=false и сетевые сбои — тихий no-op с console.debug: предзаполнение это
удобство, а не функциональность формы, ронять или пугать красным нечего.
Рядом с подставленным значением показываем «из справочника» вместо обычной
подсказки поля, чтобы человек понимал, откуда число. Правит руками — пометка
снимается.
Тесты: 4 кейса на предзаполнение (пустое поле, ввод не затирается, found=false,
гонка двух выборов). Проверены мутацией — снятие гейта поколений и снятие
условия «только пустое поле» роняют ровно по одному тесту каждое.