sort static method

List<MatchedProductV2> sort(
  1. List<Product> products,
  2. ProductPreferencesManager productPreferencesManager
)

Implementation

static List<MatchedProductV2> sort(
  final List<Product> products,
  final ProductPreferencesManager productPreferencesManager,
) {
  final List<MatchedProductV2> result = <MatchedProductV2>[];
  int i = 0;
  for (final Product product in products) {
    final MatchedProductV2 matchedProduct =
        MatchedProductV2(product, productPreferencesManager);
    matchedProduct._initialOrder = i++;
    result.add(matchedProduct);
  }
  result.sort(
    (MatchedProductV2 a, MatchedProductV2 b) {
      late int compare;
      // Highest score first
      compare = b.score.compareTo(a.score);
      if (compare != 0) {
        return compare;
      }
      // Matching products second
      compare = (b.status == MatchedProductStatusV2.DOES_NOT_MATCH ? 0 : 1) -
          (a.status == MatchedProductStatusV2.DOES_NOT_MATCH ? 0 : 1);
      if (compare != 0) {
        return compare;
      }
      // Initial order third
      return a._initialOrder.compareTo(b._initialOrder);
    },
  );
  return result;
}