searchFor function

bool searchFor(
  1. String? searchQuery,
  2. $AFld i,
  3. dynamic inst,
  4. ArtifactAccessor accessor,
)

Implementation

bool searchFor(
  String? searchQuery,
  $AFld i,
  dynamic inst,
  ArtifactAccessor accessor,
) {
  if (searchQuery != null && searchQuery.trim().isNotEmpty) {
    Property? property = resolvePropertyAnnotationForField(i);
    ListTypeInfo? listType = parseCollectionTypeDescriptor(i.typeDescriptor);
    $AClass? listElementClass = listType == null
        ? null
        : resolveArtifactTypeFromDescriptor(listType.elementTypeDescriptor);
    $AClass? nestedClass = resolveArtifactTypeFromDescriptor(i.typeDescriptor);
    List<String?> addins = [];

    try {
      addins.add((i.getValue(inst) as dynamic).toString());
    } catch (e) {
      print("Error getting value for search: $e (${i.name}");
    }

    if (nestedClass != null) {
      try {
        addins.add(
          ArtifactModelExporter(
            () => accessor.artifactToMap(i.getValue(inst)),
          ).yaml,
        );
      } catch (_) {}
    }

    if (listElementClass != null) {
      try {
        addins.addAll(
          (i.getValue(inst) as Iterable).where((x) => x != null).map((i) {
            try {
              return ArtifactModelExporter(
                () => accessor.artifactToMap(i),
              ).yaml;
            } catch (_) {}
            return null;
          }),
        );
      } catch (_) {}
    }

    Iterable<String> ls = <String?>[
      ...addins,
      i.name,
      i.name.lowerCamelCaseToUpperSpacedCase,
      property?.label,
      property?.description,
      property?.hint,
    ].whereType<String>();

    return ls.any(
      (x) => x.toLowerCase().contains(searchQuery.toLowerCase().trim()),
    );
  }

  return true;
}