executeQueries method

Future<List<SmartDateQueryResult>> executeQueries(
  1. Iterable<SmartDateQuerySource> queries, {
  2. bool isFlexiDate = false,
  3. Iterable<SmartDateQueryResult>? existingResults,
  4. required Location location,
})

Implementation

Future<List<SmartDateQueryResult>> executeQueries(
  Iterable<SmartDateQuerySource> queries, {
  bool isFlexiDate = false,
  Iterable<SmartDateQueryResult>? existingResults,
  required Location location,
}) async {
  final List<List<SmartDateQueryResult>> queryResults = (await Future.wait(
    queries.map((query) async {
      final flexiDate = FlexiDate.tryFrom(query.smartDateQuery);
      // Attempt to parse a flexiDate first.
      if (flexiDate != null && flexiDate.isValid && isFlexiDate == true) {
        return [SmartDateQueryResult.ofFlexiDate(flexiDate)];
      }
      final result = await api.parseSmartDate(
        IParseSmartDateRequest.of(
          input: query.smartDateQuery,
          timeZone: location,
        ),
      );

      final expanded = [
        ...result.results!.expand((r) {
          final qr = query.toQueryResult(r);
          return qr;
        }),
        if (result.results!.isEmpty == true && flexiDate != null)
          SmartDateQueryResult.ofFlexiDate(flexiDate),
      ];
      return expanded;
    }),
  ));

  final allResults = [
    ...queryResults.flatten(),
    ...?existingResults,
  ];
  return allResults;
}