Merges the full git history of Inventory_frontend into the monorepo under frontend/. Removes the submodule in favor of a unified repo. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
37 lines
1.0 KiB
TypeScript
37 lines
1.0 KiB
TypeScript
import { normalizePhone } from '~/utils/formatters/phone'
|
|
|
|
/** Pattern used for the HTML input `pattern` attribute on phone fields. */
|
|
export const PHONE_INPUT_PATTERN = '[0-9+ .]*'
|
|
|
|
const PHONE_VALIDATION_PATTERN = /^\+?\d{7,15}$/
|
|
|
|
export type PhoneValidationResult = {
|
|
valid: boolean
|
|
error?: string
|
|
}
|
|
|
|
export const PHONE_VALIDATION_ERROR = 'Numéro de téléphone invalide'
|
|
|
|
/**
|
|
* Lightweight phone schema mirroring the API used across the app.
|
|
*/
|
|
export const phoneSchema = {
|
|
pattern: PHONE_VALIDATION_PATTERN,
|
|
message: PHONE_VALIDATION_ERROR,
|
|
validate(value: string): PhoneValidationResult {
|
|
const normalized = normalizePhone(value)
|
|
if (!normalized) {
|
|
// Empty values are considered valid; required-ness is handled by the caller.
|
|
return { valid: true }
|
|
}
|
|
|
|
if (PHONE_VALIDATION_PATTERN.test(normalized)) {
|
|
return { valid: true }
|
|
}
|
|
|
|
return { valid: false, error: PHONE_VALIDATION_ERROR }
|
|
},
|
|
}
|
|
|
|
export const isPhoneValid = (value: string): boolean => phoneSchema.validate(value).valid
|