buildTreeFromFlat<T> function

List<NiceTreeGridNode<T>> buildTreeFromFlat<T>({
  1. required List<T> data,
  2. required String keyOf(
    1. T
    ),
  3. required String? parentKeyOf(
    1. T
    ),
})

Builds a tree from flat data with parent references.

Implementation

List<NiceTreeGridNode<T>> buildTreeFromFlat<T>({
  required List<T> data,
  required String Function(T) keyOf,
  required String? Function(T) parentKeyOf,
}) {
  final map = <String, NiceTreeGridNode<T>>{};
  final roots = <NiceTreeGridNode<T>>[];

  for (final item in data) {
    map[keyOf(item)] = NiceTreeGridNode(key: keyOf(item), data: item);
  }

  for (final item in data) {
    final node = map[keyOf(item)]!;
    final parentKey = parentKeyOf(item);
    if (parentKey != null && map.containsKey(parentKey)) {
      map[parentKey]!.children.add(node);
    } else {
      roots.add(node);
    }
  }
  return roots;
}