From 3b7b2ae56dec901aee1ab58771a6472278118283 Mon Sep 17 00:00:00 2001 From: vladtechno Date: Mon, 25 May 2026 21:43:07 +1000 Subject: [PATCH] fix(pwa/repairs): allow clearing price input without sticky 0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit В CreateRepairPage поле «Цена применённая» хранило цифру через price_applied: number. При удалении символов React сразу подставлял 0 и его нельзя было стереть — приходилось каретку перед нулём ставить руками. Поменяли тип на number | "" в WorkRow и в onChange оставляем пустую строку в стейте, пока юзер не ввёл новую цифру. На submit и в сумму "" трактуется как 0 (Number("") === 0). EditRepairPage не задет — там цена правится через модалку, цена там уже жила как string (useState(String(...))) и пустое было допустимо. --- .../src/pages/repairs/CreateRepairPage.tsx | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/mechanic-pwa/frontend/src/pages/repairs/CreateRepairPage.tsx b/mechanic-pwa/frontend/src/pages/repairs/CreateRepairPage.tsx index c08aeeb..887ba1d 100644 --- a/mechanic-pwa/frontend/src/pages/repairs/CreateRepairPage.tsx +++ b/mechanic-pwa/frontend/src/pages/repairs/CreateRepairPage.tsx @@ -54,7 +54,10 @@ interface WorkRow { work_catalog_id: number; name: string; // снапшот имени из прайса price_catalog: number; - price_applied: number; + // "" допустим в процессе редактирования — иначе React при очистке inputа + // сразу подставляет "0" и его приходится курсором обходить, см. жалобу + // механиков. На submit пустое трактуется как 0 (или как ошибка валидации). + price_applied: number | ""; unlocked: boolean; // карандашик разблокировал поле override_comment: string; } @@ -501,15 +504,19 @@ export default function CreateRepairPage() { min={0} value={w.price_applied} disabled={!w.unlocked} - onChange={(e) => + onChange={(e) => { + const v = e.target.value; + // Пустое поле остаётся пустым в стейте (не сбрасываем в 0), + // чтобы юзер мог сразу набрать новую цену поверх. + const next: number | "" = v === "" ? "" : Number(v); setWorks((arr) => arr.map((row) => row.rowKey === w.rowKey - ? { ...row, price_applied: Number(e.target.value) } + ? { ...row, price_applied: next } : row, ), - ) - } + ); + }} className="w-24" />