[#ERP-42] Mettre à jour la lib Malio UI #16

Merged
tristan merged 6 commits from feature/ERP-42-mettre-a-jour-la-lib-malio-ui into develop 2026-05-28 12:27:33 +00:00
Owner
Numéro du ticket Titre du ticket

Description de la PR

Modification du .env

Check list

  • Pas de régression
  • TU/TI/TF rédigée
  • TU/TI/TF OK
  • CHANGELOG modifié
| Numéro du ticket | Titre du ticket | |------------------|-----------------| | | | ## Description de la PR ## Modification du .env ## Check list - [x] Pas de régression - [x] TU/TI/TF rédigée - [x] TU/TI/TF OK - [ ] CHANGELOG modifié
tristan self-assigned this 2026-05-28 06:20:11 +00:00
tristan added 3 commits 2026-05-28 06:20:11 +00:00
- adaptation a l'API MalioDrawer 1.7 (titre via slot #header, footer frere du body scrollable)
- footer fixe : boutons 150px, justify-between, bordures header/footer
- permissions en accordeon Malio par module (RoleDrawer + UserRbacDrawer)
- cases a cocher sur une seule colonne
- suppression de PermissionGroup, devenu inutilise

Ajustements restants (layers/titres) a suivre.
- sidebar deplie a 232px (repli 72px conserve)
- marge horizontale du contenu responsive, 170px des xl (1280px)
- gap navbar -> contenu de 47px
- composant partage PageHeader (titre 32px/600, marge basse 44px, slot actions)
- migration des 6 pages vers PageHeader, suppression des marges hautes redondantes
feat(audit) : filtres du journal dans un drawer (accordeons malio)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m32s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 10m13s
0dfdaf3300
- bouton Filtres ouvrant un drawer dedie (icone mdi:equalizer)
- accordeons Malio : dates (MalioDateTime Du/Au), type d'entite (checkbox),
  action (radio), utilisateur (recherche texte)
- application des filtres uniquement au clic sur Voir les resultats (etat brouillon)
- Reinitialiser vide brouillon + filtres actifs et recharge
- i18n : audit.filters.title / apply / date_range
tristan added 1 commit 2026-05-28 07:01:42 +00:00
fix(audit) : drawer footer style and filter icon
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m40s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 10m14s
256b8d4ff2
matthieu reviewed 2026-05-28 09:00:35 +00:00
matthieu left a comment
Owner

Review PR #16 — Maj @malio/layer-ui 1.7.1

Verdict : Refonte propre qui adopte bien la 1.7.1 (slots #header/#footer des drawers, drawer de filtres) et factorise les titres via PageHeader. Trois remarques structurelles avant merge — voir commentaires inline.

🟢 Bons points

  • Le pattern brouillon → apply dans audit-log.vue est un vrai gain : suppression des 4 watchers + du flag watchersSuspended + du nextTick + du debouncedReload. Code beaucoup plus lisible, filtrage atomique.
  • L'introduction de PageHeader est saine — source unique pour les titres + slot #actions. Bien adoptée dans 6 pages.
  • Les commentaires expliquent le pourquoi (refonte footer 1.7.1, brouillon vs appliqué, MalioDateTime sans fuseau → ISO UTC) — conforme à la règle projet.
  • Les 3 drawers (Role / UserRbac / Site) sont refondus de la même façon (bordures noires, footer justify-between p-6, boutons w-[150px]) — cohérence visuelle assurée.
  • Le bump 1.5.0 → 1.7.1 est cohérent (package.json + package-lock.json) et audit-log.vue conserve bien la règle « pas de persistance URL des filtres » (CLAUDE.md).

Vérifications à faire avant merge

  • Lancer npm install puis tester visuellement les 3 drawers (mon node_modules local est resté en 1.4.2, le code n'a pas pu tourner en réel).
  • Vérifier que MalioDateTime accepte bien string | null en v-model et émet le format YYYY-MM-DDTHH:MM:00 attendu par toIso.
  • Vérifier que la sélection initiale (ouverture du drawer filtres après filtres déjà appliqués) recopie bien tous les champs vers le brouillon.
## Review PR #16 — Maj @malio/layer-ui 1.7.1 **Verdict :** Refonte propre qui adopte bien la 1.7.1 (slots `#header`/`#footer` des drawers, drawer de filtres) et factorise les titres via `PageHeader`. Trois remarques structurelles avant merge — voir commentaires inline. ### 🟢 Bons points - Le pattern **brouillon → apply** dans `audit-log.vue` est un vrai gain : suppression des 4 watchers + du flag `watchersSuspended` + du `nextTick` + du `debouncedReload`. Code beaucoup plus lisible, filtrage atomique. - L'introduction de `PageHeader` est saine — source unique pour les titres + slot `#actions`. Bien adoptée dans 6 pages. - Les commentaires expliquent le **pourquoi** (refonte footer 1.7.1, brouillon vs appliqué, MalioDateTime sans fuseau → ISO UTC) — conforme à la règle projet. - Les 3 drawers (Role / UserRbac / Site) sont refondus de la même façon (bordures noires, footer `justify-between p-6`, boutons `w-[150px]`) — cohérence visuelle assurée. - Le bump 1.5.0 → 1.7.1 est cohérent (`package.json` + `package-lock.json`) et `audit-log.vue` conserve bien la règle « pas de persistance URL des filtres » (CLAUDE.md). ### Vérifications à faire avant merge - Lancer `npm install` puis tester visuellement les 3 drawers (mon `node_modules` local est resté en 1.4.2, le code n'a pas pu tourner en réel). - Vérifier que `MalioDateTime` accepte bien `string | null` en v-model et émet le format `YYYY-MM-DDTHH:MM:00` attendu par `toIso`. - Vérifier que la sélection initiale (ouverture du drawer filtres après filtres déjà appliqués) recopie bien tous les champs vers le brouillon.
@@ -17,3 +18,3 @@
<SiteSelector v-if="showSiteSelector"/>
<main
class="flex flex-1 flex-col overflow-y-auto overflow-x-hidden bg-white px-4 pb-24 sm:px-8 lg:px-16">
class="flex flex-1 flex-col overflow-y-auto overflow-x-hidden bg-white px-4 pb-10 sm:px-6 lg:px-12 xl:px-[170px]">
Owner

🟡 Valeurs en dur dans le layout

  • sidebar-class="w-[232px]" ligne 9
  • xl:px-[170px] ici
  • h-[47px] ligne 22 pour la sticky bar (au lieu de l'ancien h-8 sm:h-12)

Pourquoi 232 / 170 / 47 ? Si ces valeurs viennent d'une maquette Figma, OK mais un commentaire à côté serait précieux. Sinon, des tokens Tailwind standards (w-58, lg:px-12, h-12) seraient préférables — ces arbitrary values rendent le layout fragile au moindre design tweak.

🟡 **Valeurs en dur dans le layout** - `sidebar-class="w-[232px]"` ligne 9 - `xl:px-[170px]` ici - `h-[47px]` ligne 22 pour la sticky bar (au lieu de l'ancien `h-8 sm:h-12`) Pourquoi 232 / 170 / 47 ? Si ces valeurs viennent d'une maquette Figma, OK mais un commentaire à côté serait précieux. Sinon, des tokens Tailwind standards (`w-58`, `lg:px-12`, `h-12`) seraient préférables — ces *arbitrary values* rendent le layout fragile au moindre design tweak.
Author
Owner

J'ai ajouté des commentaire puisque c'est des valeurs venant d'une maquette.

J'ai ajouté des commentaire puisque c'est des valeurs venant d'une maquette.
@@ -48,1 +53,3 @@
<PermissionGroup
<!-- Un panneau d'accordeon par module (mode multiple) ; le compteur
selectionnees/total reste visible dans l'en-tete replie. -->
<MalioAccordion v-else v-model="openModules">
Owner

🔴 Duplication du PermissionGroup supprimé

Le composant PermissionGroup.vue est supprimé, mais sa logique (en-tête module + checkbox « tout sélectionner » + liste de cases + compteur sélectionnés/total) est réimplémentée à l'identique ici (lignes 55-95) ET dans UserRbacDrawer.vue (lignes 71-110). Avant : 1 source. Maintenant : 2 copies divergeantes (préfixes d'ID role- vs direct-, noms de fonctions différents selectedCountFor vs directSelectedCount).

Régression DRY — toute évolution UX devra être faite 2 fois.

Suggestion : créer frontend/modules/core/components/PermissionAccordion.vue qui prend permissions-by-module + selected-ids en props et émet toggle / toggle-all. Réutilisable comme l'était PermissionGroup.

🔴 **Duplication du PermissionGroup supprimé** Le composant `PermissionGroup.vue` est supprimé, mais sa logique (en-tête module + checkbox « tout sélectionner » + liste de cases + compteur sélectionnés/total) est **réimplémentée à l'identique** ici (lignes 55-95) ET dans `UserRbacDrawer.vue` (lignes 71-110). Avant : 1 source. Maintenant : 2 copies divergeantes (préfixes d'ID `role-` vs `direct-`, noms de fonctions différents `selectedCountFor` vs `directSelectedCount`). Régression DRY — toute évolution UX devra être faite 2 fois. **Suggestion** : créer `frontend/modules/core/components/PermissionAccordion.vue` qui prend `permissions-by-module` + `selected-ids` en props et émet `toggle` / `toggle-all`. Réutilisable comme l'était `PermissionGroup`.
Author
Owner

J'ai fait un composant

J'ai fait un composant
@@ -269,0 +279,4 @@
}
// Bascule un type d'entite dans le brouillon (multi-selection).
function toggleEntity(value: string, selected: boolean): void {
Owner

🟡 toggleEntity se complique inutilement avec un Set

const set = new Set(draftEntityTypes.value)
if (selected) set.add(value)
else set.delete(value)
draftEntityTypes.value = [...set]

Les valeurs sont déjà uniques par construction (un v-for sur entityTypeOptions), donc le Set ne dédoublonne rien. Plus simple :

draftEntityTypes.value = selected
    ? [...draftEntityTypes.value, value]
    : draftEntityTypes.value.filter(v => v !== value)
🟡 **`toggleEntity` se complique inutilement avec un Set** ```ts const set = new Set(draftEntityTypes.value) if (selected) set.add(value) else set.delete(value) draftEntityTypes.value = [...set] ``` Les valeurs sont déjà uniques par construction (un `v-for` sur `entityTypeOptions`), donc le Set ne dédoublonne rien. Plus simple : ```ts draftEntityTypes.value = selected ? [...draftEntityTypes.value, value] : draftEntityTypes.value.filter(v => v !== value) ```
Author
Owner

Fixed

Fixed
tristan added 2 commits 2026-05-28 12:17:42 +00:00
- extrait PermissionAccordion (modules/core/components) : source unique pour
  l'accordeon de permissions par module, utilise par RoleDrawer et UserRbacDrawer
  (supprime la duplication selectedCountFor/directSelectedCount + ~25 lignes de markup)
- expose le type PermissionModule dans shared/types/rbac
- audit-log : simplifie toggleEntity (filter au lieu de Set, valeurs uniques par construction)
- default.vue : commente les valeurs en dur (232/170/47) comme issues de la maquette Figma
- audit-log : corrige iconSize -> icon-size (warning eslint vue/attribute-hyphenation)
fix(audit) : eviter les echecs silencieux du journal d'audit
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m38s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 10m14s
e611f4c65a
- log + toast d'erreur dans le catch de loadEntries : evite qu'une RangeError
  de toIso (date invalide) ou une 500 API laisse l'utilisateur devant une
  table vide indistinguable d'un filtre a zero resultat
- onMounted : Promise.all pour charger entity types et liste en parallele
  (TTFD divise par 2 sur backend lent), comportement promis par le commentaire
- filtre dates : :max sur Du et :min sur Au empechent une plage inversee a la
  saisie (le backend renvoyait 0 ligne sans diag)
- i18n : audit.error.title / message
tristan merged commit 2a0918bbfe into develop 2026-05-28 12:27:33 +00:00
tristan deleted branch feature/ERP-42-mettre-a-jour-la-lib-malio-ui 2026-05-28 12:27:34 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MALIO-DEV/Starseed#16