@edugouvfr/ngx-dsfr-ext
Version:
NgxDsfrExt est une extension au package @edugouvfr/ngx-dsfr (portage Angular des éléments DSFR)
133 lines (131 loc) • 5.72 kB
TypeScript
import { DsfrSelectionMode } from '../../models/selection-mode.type';
import { DsfrNode, DsfrViewNode } from './tree.model';
/**
* Interface utilisée par TreeSelectManager
*/
export interface TreeSelectable {
/** Indique si toutes les options sont sélectionnées ou non. */
isAllSelected: boolean;
/** Retourne la structure arborescente du composant. */
get nodes(): DsfrNode[];
/** Sélectionne / désélectionne tous les nœuds en mode multiple ou checkbox. */
selectAll(select: boolean): void;
/** Notifie le composant que node a changé d'état. */
notifySelectEvent(node: DsfrNode): void;
/** Mise à jour, graphique, du statut indeterminate. */
updateIndeterminate(node: DsfrNode): void;
}
/**
* TreeSelectManager implémente les fonctionnalités de sélection des nœuds d'une arborescence.
* - Gère le mode de sélection
* - Gère les checkbox
* - Ne gère pas l'apparence des libellés sélectionnés
*/
export declare class TreeSelectManager {
/**
* Mode de sélection géré par le manager. Accessible par les composants utilisant ce manager.
*/
selectionMode: DsfrSelectionMode;
/** Stratégie de sélection : pouvoir sélectionner tous les noeuds ou uniquement les feuilles */
selectionStrategy: 'leaf' | 'all';
/** Liste des nœuds sélectionnés. Si le mode de sélection est 'checkbox', seul les noeuds feuilles sont sélectionnables. */
selectedNodes: DsfrNode[];
/** Les noeuds feuilles doivent posséder un id défini à l'initialisation si compareWith n'est pas renseigné */
noGenericId: boolean;
/** Nombre total de feuilles de l'arbre */
countLeaves: number;
/** Composant géré par le manager. */
private treeSelectable;
/**
* Attribut permettant de notifier qu'un noeud sélectionné à déjà été rencontré en mode single, permettant d'ignorer
* l'état sélectionné de tous les noeuds subséquents.
*/
private singleModeSelectedSkip;
constructor(treeSelectable: TreeSelectable);
/**
* À appeler à chaque modification de l'arborescence.
*
* @param nodes Nœuds à initialiser
*/
init(nodes: DsfrNode[]): DsfrViewNode[];
/**
* Sélection / désélection du nœud suite à un clic.
* - Le nœud devient le nœud courant en mettant tabIndex=0
* - Gestion des différents modes de sélection
* - Envoie d'une notification sur le changement d'état de node.selected
* Dans le cas du mode checkbox, il n'y a pas de modification suite aux changements d'états des enfants
*/
doSelectNode(node: DsfrNode, nodeElt: HTMLElement): void;
isSelectable(): boolean;
isCheckboxMode(): boolean;
isSingleMode(): boolean;
isMultipleMode(): boolean;
/**
* Initialisation par défaut des propriétés d'un nœud : 'selected', 'id'.
*
* @param nodes Les noeuds à initialiser
* @param level Le niveau du noeud dans la hiérarchie
*/
initNodes(nodes: DsfrNode[], level: number): DsfrViewNode[];
/**
* Mise à jour des propriétés des nœuds (label, data, id) sans modifier l'état (select, expand) et ajouts éventuels.
* @param nodes Nœuds d'entrée à mettre à jour.
* @param viewNodes Nœuds clonés représentant l'état actuel de l'arbre.
*/
updateNodesContent(nodes: DsfrNode[], viewNodes: DsfrViewNode[], level: number): DsfrNode[];
selectAllNodes(nodes: DsfrNode[], select?: boolean): void;
/**
* Mise à jour liste des feuilles sélectionnées
* (suppression des nœuds non sélectionnés)
*/
updateSelectedNodes(): DsfrNode[];
/**
* Détermine l'état de l'attribut selected d'un noeud en fonction du mode courant et du model fournit.
*
* @param node Nœud du model fournit.
* @param viewNode Nœud cloné représentant l'état actuel de l'arbre.
*/
private handleNodeSelectedInitialization;
private toggleNodeSelectedState;
private handleSingleModeSelection;
private handleMultipleModeSelection;
private handleCheckboxModeSelection;
/**
* Met à jour, récursivement, l'état de chaque nœud en parcourant l'arborescence de haut en bas.
*/
private updateChildren;
/**
* Met à jour l'état `selected` d'une branche en fonction de ses nœuds enfants ('true', 'false' ou 'undefined').
* Émet un événement si l'état du nœud change.
* Met à jour la propriété indeterminate de la checkbox
* @param node Nœud de l'arbre
*/
private updateBranchState;
/**
* Lance la mise à jour de l'état de sélection de chaque banche en parcourant l'arborescence de bas en haut de manière recursive.
*
* ex: Pour un model tel que le suivant:
* B1
* / \
* B2 B3
* | |
* F1 F2
*
* La méthode updateBranches(B1) tentera de mettre à jour le noeud B2 qui recursivement mettra à jour la
* feuille F1 avant de se mettre elle même (B2) à jour. Ensuite, la méthode mettra à jour les noeuds suivants de
* la même façon, d'abord F2, puis B3. Enfin, une fois tous ses descendants à jour, B1 se mettra lui même à jour.
*/
private updateBranches;
/**
* Retourne le 1er nœud sélectionné dans l'arborescence.
* @param nodes arborescence
* @return 1er nœud sélectionné ou undefined
*/
private findFirstNodeSelected;
/**
* Sélectionne / déselectionne récursivement tous les nœuds nodes et leurs descendants
* @param nodes Liste de nœuds à sélectionner
* @param select true : selection des noeuds, false : fermeture
*/
private toggleNodesState;
}