Squash merge de develop vers master. Livrables principaux (ticket #101 et mise au point associée) : - Branchement du formulaire d'inscription parent sur POST /api/v1/auth/register/parent - Payload DTO (parents, enfants, photos base64, CGU) et services Auth - Parcours gestionnaire : cartes dossiers, wizard validation famille, images authentifiées - Scripts d'inscription test (Martin, Durand/Rousseau, Lecomte) ; .gitignore .cursor/ Inclut également les ajustements develop fusionnés dans ce lot (inscription AM, champs relais, etc.). Closes #101 Made-with: Cursor
33 lines
897 B
Dart
33 lines
897 B
Dart
/// Formatage affichage prénom / nom (capitalisation par mot et segments après `-` ou `'`).
|
||
|
||
String formatPersonNameCase(String raw) {
|
||
final trimmed = raw.trim();
|
||
if (trimmed.isEmpty) {
|
||
return trimmed;
|
||
}
|
||
final words = trimmed.split(RegExp(r'\s+'));
|
||
return words.map(_capitalizeComposedWord).join(' ');
|
||
}
|
||
|
||
String _capitalizeComposedWord(String word) {
|
||
if (word.isEmpty) {
|
||
return word;
|
||
}
|
||
final lower = word.toLowerCase();
|
||
const separators = <String>{'-', "'", '’'};
|
||
final buffer = StringBuffer();
|
||
var capitalizeNext = true;
|
||
|
||
for (var i = 0; i < lower.length; i++) {
|
||
final char = lower[i];
|
||
if (capitalizeNext && RegExp(r'[a-zà-öø-ÿ]').hasMatch(char)) {
|
||
buffer.write(char.toUpperCase());
|
||
capitalizeNext = false;
|
||
} else {
|
||
buffer.write(char);
|
||
capitalizeNext = separators.contains(char);
|
||
}
|
||
}
|
||
return buffer.toString();
|
||
}
|