duplicate method

TreeNodeId? duplicate(
  1. TreeNodeId id
)

Duplicate id (with a fresh id subtree) as the next sibling.

Implementation

TreeNodeId? duplicate(TreeNodeId id) {
  final original = node(id);
  if (original == null) return null;
  final copy = _cloneFresh(original).copyWith(label: '${original.label} copy');
  final ancestors = TreeOps.ancestorsOf<T>(_roots, id);
  if (ancestors.isEmpty) {
    final out = <TreeNode<T>>[];
    for (final n in _roots) {
      out.add(n);
      if (n.id == id) out.add(copy);
    }
    _apply(out);
  } else {
    _apply(TreeOps.insertAfter<T>(_roots, id, copy));
  }
  _selected = copy.id;
  _focused = copy.id;
  return copy.id;
}