fix(pwa/repairs): allow clearing price input without sticky 0
В CreateRepairPage поле «Цена применённая» хранило цифру через
price_applied: number. При удалении символов React сразу подставлял 0
и его нельзя было стереть — приходилось каретку перед нулём ставить
руками. Поменяли тип на number | "" в WorkRow и в onChange оставляем
пустую строку в стейте, пока юзер не ввёл новую цифру. На submit и в
сумму "" трактуется как 0 (Number("") === 0).
EditRepairPage не задет — там цена правится через модалку, цена там
уже жила как string (useState(String(...))) и пустое было допустимо.
This commit is contained in:
@@ -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"
|
||||
/>
|
||||
<Button
|
||||
|
||||
Reference in New Issue
Block a user