Forms

useTreeSelection

Composable interno per selezione nodi in TreeSelect con modalita single/multiple/checkbox e propagazione cascade.

Composable interno — utilizzato dal componente TreeSelect della 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

ParametroTipoDescrizione
params.nodes() => TreeNode[]Getter reattivo dell'albero completo
params.selectionMode() => TreeSelectSelectionModeModalita di selezione corrente

Valore di Ritorno

ProprietàTipoDescrizione
normalizeSelectionfunzioneNormalizza modelValue a TreeSelectSelectionKeys (gestisce null, primitivi, oggetti)
isNodeSelectedfunzioneVerifica se un nodo e selezionato
isNodePartiallyCheckedfunzioneTrue se il nodo e parzialmente selezionato (checkbox mode)
getSelectedNodesfunzioneRestituisce l'array dei nodi selezionati ricercando nell'albero
toggleNodeSelectionfunzioneToggle selezione; ritorna risultato discriminato per tipo
removeFromSelectionfunzioneRimuove un nodo dalla selezione (per chip remove)
clearSelection() => nullRitorna 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: toggleNodeSelection ritorna { 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.
  • toggleNodeSelection ritorna null per nodi non selezionabili (node.selectable === false o node.key === undefined).