fix(transport) : affiche le message 409 (homonyme) à la restauration + virgule décimale dans sanitizeDecimal (ERP-170)
This commit is contained in:
@@ -255,6 +255,7 @@ import {
|
|||||||
showRestoreAction,
|
showRestoreAction,
|
||||||
type CarrierPriceRead,
|
type CarrierPriceRead,
|
||||||
} from '~/modules/transport/utils/forms/carrierMappers'
|
} from '~/modules/transport/utils/forms/carrierMappers'
|
||||||
|
import { extractApiErrorMessage } from '~/shared/utils/api'
|
||||||
|
|
||||||
interface SelectOption {
|
interface SelectOption {
|
||||||
value: string
|
value: string
|
||||||
@@ -481,8 +482,14 @@ async function runToggleArchive(): Promise<void> {
|
|||||||
: t('transport.carriers.toast.restoreSuccess'),
|
: t('transport.carriers.toast.restoreSuccess'),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
catch {
|
catch (err) {
|
||||||
toast.error({ title: t('transport.carriers.toast.error') })
|
// 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,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ describe('numberInput — saisie volume / indexation (ERP-170)', () => {
|
|||||||
it('sanitizeDecimal : ne garde que chiffres + un seul point', () => {
|
it('sanitizeDecimal : ne garde que chiffres + un seul point', () => {
|
||||||
expect(sanitizeDecimal('30')).toBe('30')
|
expect(sanitizeDecimal('30')).toBe('30')
|
||||||
expect(sanitizeDecimal('30.5')).toBe('30.5')
|
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('1.2.3')).toBe('1.23') // un seul point conservé
|
||||||
expect(sanitizeDecimal('abc12.3x')).toBe('12.3')
|
expect(sanitizeDecimal('abc12.3x')).toBe('12.3')
|
||||||
expect(sanitizeDecimal('')).toBe('')
|
expect(sanitizeDecimal('')).toBe('')
|
||||||
|
|||||||
@@ -5,10 +5,11 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Restreint une saisie à un nombre décimal : chiffres + UN seul point (RG volume m³,
|
* 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 {
|
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('.')
|
const dot = cleaned.indexOf('.')
|
||||||
if (dot !== -1) {
|
if (dot !== -1) {
|
||||||
// Conserve le 1er point, retire les suivants.
|
// Conserve le 1er point, retire les suivants.
|
||||||
|
|||||||
Reference in New Issue
Block a user