searchData method

List<DataItem> searchData(
  1. DataSearch parameter
)

Part Extension of List<DataItem> to search data

Implementation

List<DataItem> searchData(DataSearch parameter) {
  if (parameter.builder == null &&
      (parameter.keys == null && parameter.value == null)) {
    throw "Search exception: silahkan gunakan parameter key dan value atau gunakan builder";
  }
  if (parameter.builder != null &&
      (parameter.keys != null && parameter.value != null)) {
    throw "Search exception: silahkan gunakan salah satu parameter key dan value atau gunakan builder";
  }
  List<DataItem> result = [];
  if (parameter.keys != null && parameter.value != null) {
    for (DataItem data in this) {
      String validator = "";
      for (DataKey key in parameter.keys!) {
        validator += data.get(key) ?? "";
      }
      // final RegExp filterRegExp =
      //     RegExp(validator, caseSensitive: false, unicode: true);
      // if (filterRegExp.hasMatch(parameter.value ?? "")) {
      //   result.add(data);
      // }
      if (validator.toLowerCase().contains(parameter.value!.toLowerCase())) {
        result.add(data);
      }
    }
  }
  // if (parameter.builder != null) {
  //   for (DataItem data in this) {
  //     bool valid = parameter.builder!(data);
  //     if (valid) {
  //       result.add(data);
  //     }
  //   }
  // }
  Set<String> ids = result.map((e) => e.id).toSet();
  result.retainWhere((x) => ids.remove(x.id));
  return result;
}