diff --git a/frontend/modules/transport/pages/carriers/[id]/index.vue b/frontend/modules/transport/pages/carriers/[id]/index.vue index 9e24284..50e737c 100644 --- a/frontend/modules/transport/pages/carriers/[id]/index.vue +++ b/frontend/modules/transport/pages/carriers/[id]/index.vue @@ -255,6 +255,7 @@ import { showRestoreAction, type CarrierPriceRead, } from '~/modules/transport/utils/forms/carrierMappers' +import { extractApiErrorMessage } from '~/shared/utils/api' interface SelectOption { value: string @@ -481,8 +482,14 @@ async function runToggleArchive(): Promise { : t('transport.carriers.toast.restoreSuccess'), }) } - catch { - toast.error({ title: t('transport.carriers.toast.error') }) + catch (err) { + // Surface le message back (ex. 409 « homonyme actif » à la restauration), + // propagé exprès par useCarrier ; fallback générique sinon. + const data = (err as { response?: { _data?: unknown } })?.response?._data + toast.error({ + title: t('transport.carriers.toast.error'), + message: extractApiErrorMessage(data) || undefined, + }) } } diff --git a/frontend/modules/transport/utils/forms/__tests__/numberInput.test.ts b/frontend/modules/transport/utils/forms/__tests__/numberInput.test.ts index e64a7df..fff0a56 100644 --- a/frontend/modules/transport/utils/forms/__tests__/numberInput.test.ts +++ b/frontend/modules/transport/utils/forms/__tests__/numberInput.test.ts @@ -5,7 +5,7 @@ describe('numberInput — saisie volume / indexation (ERP-170)', () => { it('sanitizeDecimal : ne garde que chiffres + un seul point', () => { expect(sanitizeDecimal('30')).toBe('30') expect(sanitizeDecimal('30.5')).toBe('30.5') - expect(sanitizeDecimal('30,5 kg')).toBe('305') // virgule + espace + lettres retirés + expect(sanitizeDecimal('30,5 kg')).toBe('30.5') // virgule FR → point ; espace + lettres retirés expect(sanitizeDecimal('1.2.3')).toBe('1.23') // un seul point conservé expect(sanitizeDecimal('abc12.3x')).toBe('12.3') expect(sanitizeDecimal('')).toBe('') diff --git a/frontend/modules/transport/utils/forms/numberInput.ts b/frontend/modules/transport/utils/forms/numberInput.ts index 6e845c7..29f9f8e 100644 --- a/frontend/modules/transport/utils/forms/numberInput.ts +++ b/frontend/modules/transport/utils/forms/numberInput.ts @@ -5,10 +5,11 @@ /** * Restreint une saisie à un nombre décimal : chiffres + UN seul point (RG volume m³, - * « nombres avec des points » comme les autres modules). Supprime tout autre caractère. + * « nombres avec des points » comme les autres modules). La virgule décimale FR est + * convertie en point (« 30,5 » → « 30.5 ») ; tout autre caractère est supprimé. */ export function sanitizeDecimal(value: string): string { - let cleaned = (value ?? '').replace(/[^0-9.]/g, '') + let cleaned = (value ?? '').replace(/,/g, '.').replace(/[^0-9.]/g, '') const dot = cleaned.indexOf('.') if (dot !== -1) { // Conserve le 1er point, retire les suivants.