From fdd947635b552fa866e0bdab6a81c52b9db3dfe7 Mon Sep 17 00:00:00 2001 From: mslowin Date: Thu, 26 Jun 2025 01:46:58 +0200 Subject: [PATCH 1/2] fix: leading zeros in the inputs --- src/features/workout-session/ui/workout-session-set.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/features/workout-session/ui/workout-session-set.tsx b/src/features/workout-session/ui/workout-session-set.tsx index dec6c6ac..b64bf9ce 100644 --- a/src/features/workout-session/ui/workout-session-set.tsx +++ b/src/features/workout-session/ui/workout-session-set.tsx @@ -26,12 +26,14 @@ export function WorkoutSessionSet({ set, setIndex, onChange, onFinish, onRemove }; const handleValueIntChange = (columnIndex: number) => (e: React.ChangeEvent) => { + e.target.value = e.target.value === "" ? "" : e.target.value.replace(/^0+(?=\d)/, "") || "0"; const newValuesInt = Array.isArray(set.valuesInt) ? [...set.valuesInt] : []; newValuesInt[columnIndex] = e.target.value ? parseInt(e.target.value, 10) : 0; onChange(setIndex, { valuesInt: newValuesInt }); }; const handleValueSecChange = (columnIndex: number) => (e: React.ChangeEvent) => { + e.target.value = e.target.value === "" ? "" : e.target.value.replace(/^0+(?=\d)/, "") || "0"; const newValuesSec = Array.isArray(set.valuesSec) ? [...set.valuesSec] : []; newValuesSec[columnIndex] = e.target.value ? parseInt(e.target.value, 10) : 0; onChange(setIndex, { valuesSec: newValuesSec }); From 8c226228e05a9ded07d0753fddb01562a7ca414b Mon Sep 17 00:00:00 2001 From: mslowin Date: Mon, 30 Jun 2025 11:42:52 +0200 Subject: [PATCH 2/2] Refactor: update input handling to properly remove leading zeros and support floating-point values --- .../ui/workout-session-set.tsx | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/features/workout-session/ui/workout-session-set.tsx b/src/features/workout-session/ui/workout-session-set.tsx index b64bf9ce..11abe99c 100644 --- a/src/features/workout-session/ui/workout-session-set.tsx +++ b/src/features/workout-session/ui/workout-session-set.tsx @@ -25,15 +25,26 @@ export function WorkoutSessionSet({ set, setIndex, onChange, onFinish, onRemove onChange(setIndex, { types: newTypes }); }; - const handleValueIntChange = (columnIndex: number) => (e: React.ChangeEvent) => { - e.target.value = e.target.value === "" ? "" : e.target.value.replace(/^0+(?=\d)/, "") || "0"; + const handleValueFloatChange = (columnIndex: number) => (e: React.ChangeEvent) => { + e.target.value = e.target.value === "" ? "" : String(Number(e.target.value)) || "0"; + let value = e.target.value ? parseFloat(e.target.value) : 0; + + // Truncate to 2 decimal places + if (!Number.isNaN(value)) { + const parts = e.target.value.split("."); + if (parts.length === 2) { + // Keep only first 2 digits after decimal + value = parseFloat(parts[0] + "." + parts[1].slice(0, 2)); + } + } + const newValuesInt = Array.isArray(set.valuesInt) ? [...set.valuesInt] : []; - newValuesInt[columnIndex] = e.target.value ? parseInt(e.target.value, 10) : 0; + newValuesInt[columnIndex] = value; onChange(setIndex, { valuesInt: newValuesInt }); }; const handleValueSecChange = (columnIndex: number) => (e: React.ChangeEvent) => { - e.target.value = e.target.value === "" ? "" : e.target.value.replace(/^0+(?=\d)/, "") || "0"; + e.target.value = e.target.value === "" ? "" : String(Number(e.target.value)) || "0"; const newValuesSec = Array.isArray(set.valuesSec) ? [...set.valuesSec] : []; newValuesSec[columnIndex] = e.target.value ? parseInt(e.target.value, 10) : 0; onChange(setIndex, { valuesSec: newValuesSec }); @@ -86,7 +97,7 @@ export function WorkoutSessionSet({ set, setIndex, onChange, onFinish, onRemove className="border border-black rounded px-1 py-2 w-1/2 text-base text-center font-bold dark:bg-slate-800 dark:placeholder:text-slate-500" disabled={set.completed} min={0} - onChange={handleValueIntChange(columnIndex)} + onChange={handleValueFloatChange(columnIndex)} pattern="[0-9]*" placeholder="min" type="number" @@ -112,7 +123,7 @@ export function WorkoutSessionSet({ set, setIndex, onChange, onFinish, onRemove className="border border-black rounded px-1 py-2 w-1/2 text-base text-center font-bold dark:bg-slate-800" disabled={set.completed} min={0} - onChange={handleValueIntChange(columnIndex)} + onChange={handleValueFloatChange(columnIndex)} pattern="[0-9]*" placeholder="" type="number" @@ -135,7 +146,7 @@ export function WorkoutSessionSet({ set, setIndex, onChange, onFinish, onRemove className="border border-black rounded px-1 py-2 w-full text-base text-center font-bold dark:bg-slate-800" disabled={set.completed} min={0} - onChange={handleValueIntChange(columnIndex)} + onChange={handleValueFloatChange(columnIndex)} pattern="[0-9]*" placeholder="" type="number"