Barre horizontale en haut de l'app qui liste les sites autorises de l'utilisateur et permet de switcher d'un click. Consomme le composant MalioSiteSelector de @malio/layer-ui 1.4.0 (upgrade depuis 1.3.0). Composables : - useModules (shared) : consomme /api/modules, expose isModuleActive. Pattern aligne sur useSidebar. - useCurrentSite (layer sites) : singleton state, switchSite optimistic avec rollback sur erreur, garde anti-double-submit, propagation au store auth via action setCurrentSite dediee. Composant : - SiteSelector.vue : wrapper thin autour de MalioSiteSelector. Texte blanc uniforme (conforme maquette Figma) avec taille 24px forcee via labelClass="text-2xl". aria-label du group via ariaGroupLabel i18n. Integration : - Middleware auth.global.ts : chargement parallele sidebar + modules. - layouts/default.vue : render conditionnel si module Sites actif ET user.sites.length > 0. - logout.vue : reset des 3 composables (sidebar, modules, currentSite) dans un try/finally. - nuxt.config.ts : auto-detection des composables/ de chaque layer module (necessaire car imports.dirs explicite override les defaults Nuxt). Couleurs fixtures finales : Chatellerault #056CF2, Saint-Jean #F3CB00, Pommevic #74BF04. Charge aux admins de choisir des teintes foncees (texte blanc non contrastable via calcul WCAG, design choisi). Tests : 40 Vitest (color, useModules, useSidebar, useCurrentSite, SiteSelector) incluant garde anti-regression pour useI18n hors setup. 182/182 PHPUnit backend, avec et sans module actif. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
20 lines
575 B
TypeScript
20 lines
575 B
TypeScript
/**
|
|
* Utilitaires de couleur partages.
|
|
*
|
|
* Aligne sur la regex backend stricte #RRGGBB (voir Site.php).
|
|
*/
|
|
|
|
const HEX_COLOR_REGEX = /^#[0-9A-Fa-f]{6}$/
|
|
|
|
/**
|
|
* Valide qu'une chaine respecte le format #RRGGBB strict (7 caracteres,
|
|
* 6 chiffres hexadecimaux apres le #). Tolere la casse (majuscules,
|
|
* minuscules, mixte).
|
|
*
|
|
* Utilise cote front par SiteDrawer pour bloquer le submit avant l'envoi
|
|
* backend — miroir du pattern Symfony Assert\Regex sur Site::$color.
|
|
*/
|
|
export function isValidSiteColor(hex: string): boolean {
|
|
return HEX_COLOR_REGEX.test(hex)
|
|
}
|