Appearance
BDD-144 — Sélection de dossier hiérarchique (arborescence) dans le bloc Entrée
Contexte
La sélection de dossier dans le bloc Entrée (mode Dossier) affichait tous les dossiers et sous-dossiers dans un même menu déroulant plat. Il était impossible de distinguer la hiérarchie réelle : Salaires_mensuels et Salaires_mensuels / test apparaissaient au même niveau, rendant la navigation confuse.
Ce ticket remplace la liste plate par une arborescence interactive : cliquer sur un dossier parent révèle ses sous-dossiers, et la sélection reste possible à n'importe quel niveau.
Critères d'acceptance
| # | Critère | Couvert par |
|---|---|---|
| 1 | Les dossiers racines sont affichés en premier niveau | useFolderTree — structure parent/enfant calculée depuis parentUuid |
| 2 | Cliquer sur un dossier parent révèle ses sous-dossiers (expand/collapse) | q-tree + v-model:expanded géré dans useFolderTree |
| 3 | La sélection est possible à n'importe quel niveau de la hiérarchie | WorkflowFolderTreeSelector — clic sur le label du nœud |
| 4 | L'arborescence reflète fidèlement la structure réelle des dossiers en base | Données provenant de GET /folders/workflow-options (champ parentUuid) |
| 5 | La liste plate est remplacée par l'arborescence | WorkflowDepotFolderSourcePanel — q-select remplacé par WorkflowFolderTreeSelector |
Architecture
Aucune modification backend
L'endpoint existant GET /folders/workflow-options retourne déjà le champ parentUuid pour chaque dossier. La construction de l'arborescence est entièrement réalisée côté frontend depuis cette liste plate.
Composable useFolderTree
front/src/composables/useFolderTree.js
Responsabilité unique : transformer une liste plate de WorkflowFolderOption en nœuds compatibles q-tree.
- Regroupement : si plusieurs entreprises sont présentes, un nœud entreprise (
isEnterprise: true) est créé au premier niveau. Pour une seule entreprise, les dossiers racine sont affichés directement. - Hiérarchie : construction récursive depuis
parentUuid— chaque dossier enfant est attaché à son parent. - Recherche : filtre les nœuds dont le nom, l'entreprise ou le chemin correspond à la saisie. Les parents des nœuds correspondants sont conservés pour maintenir le chemin visible.
- Expansion automatique : sans recherche, seuls les nœuds entreprise sont développés. Lors d'une recherche, tous les nœuds contenant une correspondance sont développés automatiquement.
Composant WorkflowFolderTreeSelector
front/src/components/workflows/WorkflowFolderTreeSelector.vue
- Lit les options et l'état de chargement directement depuis
folderStore(workflowFolderOptions,workflowFolderOptionsLoading). - Affiche le dossier sélectionné avec un bouton de réinitialisation.
- Expose un champ de recherche avec filtrage temps réel (via
useFolderTree). - Utilise
q-tree(Quasar v2) avecv-model:expandedpour gérer l'expand/collapse. - Les nœuds entreprise ne sont pas sélectionnables.
Props : modelValue (uuid du dossier sélectionné), disabled
Émits : update:modelValue
Modification de WorkflowDepotFolderSourcePanel
front/src/components/workflows/WorkflowDepotFolderSourcePanel.vue
Changement minimal : remplacement du q-select par WorkflowFolderTreeSelector. Le chargement des données (fetchWorkflowFolderOptions), la gestion de l'en-tête, la prévisualisation et les bannières d'erreur restent inchangés.
Fichiers modifiés / créés
| Fichier | Type | Modification |
|---|---|---|
front/src/composables/useFolderTree.js | Nouveau | Composable de construction de l'arborescence |
front/src/components/workflows/WorkflowFolderTreeSelector.vue | Nouveau | Composant arborescence de sélection de dossier |
front/src/components/workflows/WorkflowDepotFolderSourcePanel.vue | Modifié | Remplacement du q-select par WorkflowFolderTreeSelector |
front/src/__tests__/composables/useFolderTree.spec.js | Nouveau | 11 tests unitaires Vitest du composable |
