refactor(front) : champs anti-parasites via masks maska (filtrage natif, focus/curseur OK) au lieu du sanitizer @update ; email sans masque (ERP-193)
This commit is contained in:
@@ -133,6 +133,7 @@
|
||||
v-else
|
||||
:model-value="model.city"
|
||||
:label="t('commercial.clients.form.address.city')"
|
||||
:mask="ADDRESS_MASK"
|
||||
:readonly="readonly"
|
||||
:disabled="disabled"
|
||||
:required="true"
|
||||
@@ -184,6 +185,7 @@
|
||||
<MalioInputText
|
||||
:model-value="model.streetComplement"
|
||||
:label="t('commercial.clients.form.address.streetComplement')"
|
||||
:mask="ADDRESS_MASK"
|
||||
:readonly="readonly"
|
||||
:disabled="disabled"
|
||||
:error="errors?.streetComplement"
|
||||
@@ -204,7 +206,7 @@ import {
|
||||
import { useAddressAutocomplete, type AddressSuggestion } from '~/shared/composables/useAddressAutocomplete'
|
||||
import type { CategoryOption, RefOption } from '~/modules/commercial/composables/useClientReferentials'
|
||||
import type { AddressFormDraft } from '~/modules/commercial/types/clientForm'
|
||||
import { sanitizeAddress, sanitizeEmail } from '~/shared/utils/textSanitize'
|
||||
import { ADDRESS_MASK } from '~/shared/utils/textSanitize'
|
||||
|
||||
// Masque code postal FR : 5 chiffres.
|
||||
const POSTAL_CODE_MASK = '#####'
|
||||
@@ -300,23 +302,14 @@ const addressLoading = ref(false)
|
||||
// Conserve les suggestions d'adresse pour retrouver ville/CP au moment du select.
|
||||
let lastAddressSuggestions: AddressSuggestion[] = []
|
||||
|
||||
// Filtres de saisie par champ (ERP-193) : voie / complement / ville = profil
|
||||
// adresse, emails de facturation = profil email.
|
||||
const FIELD_SANITIZERS: Partial<Record<keyof AddressFormDraft, (v: string) => string>> = {
|
||||
street: sanitizeAddress,
|
||||
streetComplement: sanitizeAddress,
|
||||
city: sanitizeAddress,
|
||||
billingEmail: sanitizeEmail,
|
||||
billingEmailSecondary: sanitizeEmail,
|
||||
}
|
||||
// Filtrage des caracteres parasites : porte par le mask ADDRESS_MASK (maska) sur
|
||||
// les champs texte editables (complement, ville en mode degrade). La voie en
|
||||
// autocomplete (BAN) et la ville en select ne sont pas masquees (le back valide
|
||||
// via Assert\Regex) ; les emails de facturation valident leur format (Assert\Email).
|
||||
|
||||
/** Emet un nouveau brouillon avec le champ modifie (immutabilite), sanitise si besoin. */
|
||||
/** Emet un nouveau brouillon avec le champ modifie (immutabilite). */
|
||||
function update<K extends keyof AddressFormDraft>(field: K, value: AddressFormDraft[K]): void {
|
||||
const sanitizer = FIELD_SANITIZERS[field]
|
||||
const next = (sanitizer && typeof value === 'string')
|
||||
? (sanitizer(value) as AddressFormDraft[K])
|
||||
: value
|
||||
emit('update:modelValue', { ...props.modelValue, [field]: next })
|
||||
emit('update:modelValue', { ...props.modelValue, [field]: value })
|
||||
}
|
||||
|
||||
/** Revele le 2e champ email de facturation (clic sur le « + »). */
|
||||
|
||||
Reference in New Issue
Block a user