Forms
useTreeSelection
Composable interno per selezione nodi in TreeSelect con modalita single/multiple/checkbox e propagazione cascade.
Composable interno — utilizzato dal componente
TreeSelectdella libreria.
Firma TypeScript
export function useTreeSelection(params: UseTreeSelectionParams): UseTreeSelectionResult
export interface UseTreeSelectionParams {
nodes: () => TreeNode[];
selectionMode: () => TreeSelectSelectionMode; // 'single' | 'multiple' | 'checkbox'
}
export interface UseTreeSelectionResult {
normalizeSelection: (modelValue: TreeSelectSelectionKeys | string | number | null | undefined) => TreeSelectSelectionKeys;
isNodeSelected: (node: TreeNode, selection: TreeSelectSelectionKeys) => boolean;
isNodePartiallyChecked: (node: TreeNode, selection: TreeSelectSelectionKeys) => boolean;
getSelectedNodes: (nodes: TreeNode[], selection: TreeSelectSelectionKeys) => TreeNode[];
toggleNodeSelection: (node: TreeNode, currentSelection: TreeSelectSelectionKeys) => ToggleSelectionResult;
removeFromSelection: (node: TreeNode, currentSelection: TreeSelectSelectionKeys) => TreeSelectSelectionKeys;
clearSelection: () => null;
}
export type ToggleSelectionResult =
| { mode: 'single'; newValue: string | number; node: TreeNode }
| { mode: 'multiple'; newValue: TreeSelectSelectionKeys; node: TreeNode; wasSelected: boolean }
| { mode: 'checkbox'; newValue: TreeSelectSelectionKeys; node: TreeNode; wasSelected: boolean }
| null
Parametri
| Parametro | Tipo | Descrizione |
|---|---|---|
params.nodes | () => TreeNode[] | Getter reattivo dell'albero completo |
params.selectionMode | () => TreeSelectSelectionMode | Modalita di selezione corrente |
Valore di Ritorno
| Proprietà | Tipo | Descrizione |
|---|---|---|
normalizeSelection | funzione | Normalizza modelValue a TreeSelectSelectionKeys (gestisce null, primitivi, oggetti) |
isNodeSelected | funzione | Verifica se un nodo e selezionato |
isNodePartiallyChecked | funzione | True se il nodo e parzialmente selezionato (checkbox mode) |
getSelectedNodes | funzione | Restituisce l'array dei nodi selezionati ricercando nell'albero |
toggleNodeSelection | funzione | Toggle selezione; ritorna risultato discriminato per tipo |
removeFromSelection | funzione | Rimuove un nodo dalla selezione (per chip remove) |
clearSelection | () => null | Ritorna null per resettare la selezione |
Esempio
const { isNodeSelected, isNodePartiallyChecked, toggleNodeSelection } = useTreeSelection({
nodes: () => props.nodes,
selectionMode: () => props.selectionMode
})
const onNodeClick = (node: TreeNode) => {
const currentSelection = normalizeSelection(props.modelValue)
const result = toggleNodeSelection(node, currentSelection)
if (!result) return
if (result.mode === 'single') {
emit('update:modelValue', result.newValue)
} else {
emit('update:modelValue', result.newValue)
emit(result.wasSelected ? 'nodeUnselect' : 'nodeSelect', { node: result.node })
}
}
Note
- Modalita single:
toggleNodeSelectionritorna{ mode: 'single', newValue: nodeKey }. - Modalita multiple: toggle nell'oggetto chiavi, senza cascade.
- Modalita checkbox: propaga la selezione a tutti i figli discendenti; aggiorna i parent con stato
true(tutti selezionati),{ checked: false, partialChecked: true }(parziale), o rimossi (nessuno selezionato). - I metodi ritornano il nuovo stato senza emettere eventi — il componente e responsabile degli emit.
toggleNodeSelectionritornanullper nodi non selezionabili (node.selectable === falseonode.key === undefined).