fix(concept): step="any" on number inputs — stepMismatch блокировал submit (#1953)
Поле «Стоимость участка» (ConceptProgramForm §7 + ConceptParamsForm /concept)
имело step={1_000_000}. Сид из кадастровой стоимости (напр. 74 766.08 ₽, не
кратно шагу) → HTML5 stepMismatch → форма :invalid → браузер МОЛЧА блокирует
submit (submit-событие не выстреливает) → кнопка «Рассчитать концепцию» не
работает на ЛЮБОМ участке с кадастровой стоимостью. Авто-расчёт §7 маскировал
баг — он зовёт движок напрямую, минуя валидацию формы.
Тот же латентный stepMismatch на floor_height (step 0.1) и пятне (step 1) —
clampFloat допускает дробные → step="any" и там.
Подтверждено на проде (DOM-патч step="any" → checkValidity()=true → submit
проходит → GFA 15 876→30 240, FAR 0.24→0.45 под изменённое пятно).
This commit is contained in:
parent
975c400536
commit
68f225f794
2 changed files with 11 additions and 5 deletions
|
|
@ -163,7 +163,10 @@ export function ConceptParamsForm({
|
|||
id="land-cost"
|
||||
type="number"
|
||||
min={0}
|
||||
step={1_000_000}
|
||||
// step="any" — произвольная сумма ₽; step={1_000_000} давал HTML5
|
||||
// stepMismatch на не-кратных значениях → форма :invalid → submit молча
|
||||
// блокировался (см. ConceptProgramForm fix).
|
||||
step="any"
|
||||
value={params.land_cost_rub ?? ""}
|
||||
placeholder="Необязательно"
|
||||
onChange={(e) => {
|
||||
|
|
|
|||
|
|
@ -383,7 +383,7 @@ export function ConceptProgramForm({
|
|||
<input
|
||||
id="cpf-floor-height"
|
||||
type="number"
|
||||
step={0.1}
|
||||
step="any"
|
||||
min={FLOOR_HEIGHT_MIN}
|
||||
max={FLOOR_HEIGHT_MAX}
|
||||
value={floorHeight}
|
||||
|
|
@ -438,7 +438,7 @@ export function ConceptProgramForm({
|
|||
aria-label="Ширина пятна секции, м"
|
||||
min={FOOTPRINT_MIN}
|
||||
max={FOOTPRINT_MAX}
|
||||
step={1}
|
||||
step="any"
|
||||
value={effFootprintW ?? ""}
|
||||
disabled={!catalogReady}
|
||||
onChange={(e) =>
|
||||
|
|
@ -461,7 +461,7 @@ export function ConceptProgramForm({
|
|||
aria-label="Глубина пятна секции, м"
|
||||
min={FOOTPRINT_MIN}
|
||||
max={FOOTPRINT_MAX}
|
||||
step={1}
|
||||
step="any"
|
||||
value={effFootprintD ?? ""}
|
||||
disabled={!catalogReady}
|
||||
onChange={(e) =>
|
||||
|
|
@ -542,7 +542,10 @@ export function ConceptProgramForm({
|
|||
id="cpf-land-cost"
|
||||
type="number"
|
||||
min={0}
|
||||
step={1_000_000}
|
||||
// step="any" — иначе сид из кадастровой стоимости (не кратной шагу,
|
||||
// напр. 74 766.08 ₽) даёт HTML5 stepMismatch → форма :invalid →
|
||||
// браузер молча блокирует submit и кнопка «Рассчитать» не работает.
|
||||
step="any"
|
||||
value={landCostRub ?? ""}
|
||||
placeholder="Необязательно"
|
||||
onChange={(e) => {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue