separateLinkedGroup static method

List<PlutoColumnGroupPair> separateLinkedGroup({
  1. required List<PlutoColumnGroup> columnGroupList,
  2. required List<PlutoColumn> columns,
})

Separate groups according to the order of columns.

There are columns A, B, C, D, E If A and B are the same group, they are included as the same group.

If C and E are in the same group, but there is D included in another group in the middle, C and E are in the same group but separated.

Implementation

static List<PlutoColumnGroupPair> separateLinkedGroup({
  required List<PlutoColumnGroup> columnGroupList,
  required List<PlutoColumn> columns,
}) {
  if (columnGroupList.isEmpty || columns.isEmpty) {
    return [];
  }

  List<PlutoColumnGroupPair> separatedColumns = [];

  PlutoColumnGroup? previousGroup;

  List<PlutoColumn> linkedColumns = <PlutoColumn>[];

  for (int i = 0; i < columns.length; i += 1) {
    final column = columns[i];

    final field = column.field;

    final foundGroup = getGroupIfExistsFromList(
          field: field,
          columnGroupList: columnGroupList,
        ) ??
        PlutoColumnGroup(
          key: ValueKey(field),
          title: field,
          fields: [field],
          expandedColumn: true,
        );

    previousGroup ??= foundGroup;

    if (previousGroup.key != foundGroup.key) {
      separatedColumns.add(PlutoColumnGroupPair(
        group: previousGroup,
        columns: linkedColumns,
      ));

      linkedColumns = [];

      previousGroup = foundGroup;
    }

    linkedColumns.add(column);

    if (i == columns.length - 1) {
      separatedColumns.add(PlutoColumnGroupPair(
        group: foundGroup,
        columns: linkedColumns,
      ));
    }
  }

  return separatedColumns;
}