convertRowsToFilter static method

FilteredListFilter<PlutoRow?>? convertRowsToFilter(
  1. List<PlutoRow?> rows,
  2. List<PlutoColumn>? enabledFilterColumns
)

Converts rows containing filter information into comparison functions.

Implementation

static FilteredListFilter<PlutoRow?>? convertRowsToFilter(
  List<PlutoRow?> rows,
  List<PlutoColumn>? enabledFilterColumns,
) {
  if (rows.isEmpty) {
    return null;
  }

  return (PlutoRow? row) {
    bool? flag;

    for (var e in rows) {
      final filterType = e!.cells[filterFieldType]!.value as PlutoFilterType?;

      if (e.cells[filterFieldColumn]!.value == filterFieldAllColumns) {
        bool? flagAllColumns;

        row!.cells.forEach((key, value) {
          var foundColumn = enabledFilterColumns!.firstWhereOrNull(
            (element) => element.field == key,
          );

          if (foundColumn != null) {
            flagAllColumns = compareOr(
              flagAllColumns,
              compareByFilterType(
                filterType: filterType!,
                base: value.value.toString(),
                search: e.cells[filterFieldValue]!.value.toString(),
                column: foundColumn,
              ),
            );
          }
        });

        flag = compareAnd(flag, flagAllColumns);
      } else {
        var foundColumn = enabledFilterColumns!.firstWhereOrNull(
          (element) => element.field == e.cells[filterFieldColumn]!.value,
        );

        if (foundColumn != null) {
          flag = compareAnd(
            flag,
            compareByFilterType(
              filterType: filterType!,
              base: row!.cells[e.cells[filterFieldColumn]!.value]!.value
                  .toString(),
              search: e.cells[filterFieldValue]!.value.toString(),
              column: foundColumn,
            ),
          );
        }
      }
    }

    return flag == true;
  };
}