applyFilter static method

void applyFilter({
  1. required FilteredList<PlutoRow> rows,
  2. required FilteredListFilter<PlutoRow>? filter,
})

Apply filter condition to all groups in rows.

Implementation

static void applyFilter({
  required FilteredList<PlutoRow> rows,
  required FilteredListFilter<PlutoRow>? filter,
}) {
  if (rows.originalList.isEmpty) return;

  isGroup(PlutoRow row) => row.type.isGroup;

  if (filter == null) {
    rows.setFilter(null);

    final children = PlutoRowGroupHelper.iterateWithFilter(
      rows.originalList,
      filter: isGroup,
    );

    for (final child in children) {
      child.type.group.children.setFilter(null);
    }
  } else {
    isNotEmptyGroup(PlutoRow row) =>
        row.type.isGroup &&
        row.type.group.children.filterOrOriginalList.isNotEmpty;

    filterOrHasChildren(PlutoRow row) => filter(row) || isNotEmptyGroup(row);

    final children = PlutoRowGroupHelper.iterateWithFilter(
      rows.originalList,
      filter: isGroup,
    );

    for (final child in children.toList().reversed) {
      child.type.group.children.setFilter(filterOrHasChildren);
    }

    rows.setFilter(filterOrHasChildren);
  }
}