parseSearchSuggestions function

List parseSearchSuggestions(
  1. JsonMap results,
  2. bool detailedRuns
)

Parses search suggestions.

Implementation

List parseSearchSuggestions(JsonMap results, bool detailedRuns) {
  final contents =
      (((results['contents'] as List?)?[0]
                  as JsonMap?)?['searchSuggestionsSectionRenderer']
              as JsonMap?)?['contents']
          as List?;
  if (contents == null || contents.isEmpty) return [];

  final suggestions = <dynamic>[];

  for (final rawSuggestion in List<JsonMap>.from(contents)) {
    JsonMap suggestionContent;
    String? feedbackToken;
    if (rawSuggestion.containsKey('historySuggestionRenderer')) {
      suggestionContent = rawSuggestion['historySuggestionRenderer'] as JsonMap;
      feedbackToken =
          nav(suggestionContent, [
                'serviceEndpoint',
                'feedbackEndpoint',
                'feedbackToken',
              ], nullIfAbsent: true)
              as String?;
    } else {
      suggestionContent = rawSuggestion['searchSuggestionRenderer'] as JsonMap;
    }

    final text =
        ((suggestionContent['navigationEndpoint'] as JsonMap)['searchEndpoint']
            as JsonMap)['query'];
    final runs = (suggestionContent['suggestion'] as JsonMap)['runs'];

    if (detailedRuns) {
      suggestions.add({
        'text': text,
        'runs': runs,
        'fromHistory': feedbackToken != null,
        'feedbackToken': feedbackToken,
      });
    } else {
      suggestions.add(text);
    }
  }

  return suggestions;
}