Fix French decimal separator handling in money input fields

Number.parseFloat() only recognizes dots as decimal separators, causing
inputs like "256,54" (French locale) to be parsed as "256". Added a
parseLocaleFloat utility that detects whether comma or dot is the decimal
separator and normalizes accordingly before parsing.

Fixes #1138

https://claude.ai/code/session_01ThfszjiCmbDDPyb4TZqk2X
This commit is contained in:
Claude
2026-03-07 10:17:27 +00:00
parent df650b0284
commit 144d99b6e4
5 changed files with 30 additions and 10 deletions

View File

@@ -1,4 +1,5 @@
import { Controller } from "@hotwired/stimulus"
import parseLocaleFloat from "utils/parse_locale_float"
export default class extends Controller {
static targets = ["customWrapper", "customField", "tickerSelect", "qtyField", "priceField", "priceWarning", "priceWarningMessage"]
@@ -42,8 +43,8 @@ export default class extends Controller {
// Calculate the implied/entered price
let enteredPriceCents = null
const qty = Number.parseFloat(this.qtyFieldTarget?.value)
const enteredPrice = Number.parseFloat(this.priceFieldTarget?.value)
const qty = parseLocaleFloat(this.qtyFieldTarget?.value)
const enteredPrice = parseLocaleFloat(this.priceFieldTarget?.value)
if (enteredPrice && enteredPrice > 0) {
// User entered a price directly