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" />