getApiFilters static method

String? getApiFilters(
  1. List<Column> columns,
  2. List<QueryFilter>? filters
)

Implementation

static String? getApiFilters(
    List<Column> columns, List<QueryFilter>? filters) {
  if (filters == null) {
    return null;
  }

  final whereParams = filters.map((filter) {
    final Column attributeColumn = columns
        .lastWhere((column) => column.attributeName == filter.attribute);

    switch (filter.condition) {
      case QueryCondition.In:
        final List<String> values =
            filter.value is List ? filter.value : [filter.value];
        return 'filter=${filter.attribute}${attributeColumn.relation?.referencedColumn != null ? '.${attributeColumn.relation?.referencedColumn}' : ''}:in:[${values.join(',')}]';

      case QueryCondition.Equal:
        return 'filter=${filter.attribute}:eq:${filter.value}';

      case QueryCondition.Like:
        final List<String> values =
            filter.value is List ? filter.value : [filter.value];
        final ilikeFilters = values
            .map((valueItem) => 'filter=${filter.attribute}:like:$valueItem')
            .toList();
        return ilikeFilters.join('&');

      case QueryCondition.Ilike:
        final List<String> values =
            filter.value is List ? filter.value : [filter.value];
        final ilikeFilters = values
            .map((valueItem) => 'filter=${filter.attribute}:ilike:$valueItem')
            .toList();
        return ilikeFilters.join('&');

      case QueryCondition.LessThan:
        return 'filter=${filter.attribute}:lt:${filter.value}';

      case QueryCondition.LessThanOrEqualTo:
        return 'filter=${filter.attribute}:lte:${filter.value}';
      case QueryCondition.GreaterThan:
        return 'filter=${filter.attribute}:gt:${filter.value}';

      case QueryCondition.GreaterThanOrEqualTo:
        return 'filter=${filter.attribute}:gte:${filter.value}';
      default:
        return null;
    }
  }).where((filter) => filter != null);

  return whereParams.length > 0 ? whereParams.join(' AND ') : null;
}