You are here

protected function LanguageSwitchLinks::resolveValues in GraphQL 8.3

Retrieve the list of field values.

Always returns a list of field values. Even for single value fields. Single/multi field handling is responsibility of the base class.

Parameters

mixed $value: The current object value.

array $args: Field arguments.

$context: The resolve context.

\GraphQL\Type\Definition\ResolveInfo $info: The resolve info object.

Return value

\Generator The value generator.

Overrides FieldPluginBase::resolveValues

File

modules/graphql_core/src/Plugin/GraphQL/Fields/LanguageSwitch/LanguageSwitchLinks.php, line 90

Class

LanguageSwitchLinks
Plugin annotation @GraphQLField( id = "url_language_switch_links", secure = true, name = "languageSwitchLinks", type = "[LanguageSwitchLink]", parents = {"InternalUrl"}, arguments = { "language" = "LanguageId" }, …

Namespace

Drupal\graphql_core\Plugin\GraphQL\Fields\LanguageSwitch

Code

protected function resolveValues($value, array $args, ResolveContext $context, ResolveInfo $info) {
  if ($value instanceof Url) {

    // Use the <front> route if the requested url is the frontpage.
    $frontpage = $this->configFactory
      ->get('system.site')
      ->get('page.front');
    if ('/' . $value
      ->getInternalPath() === $frontpage) {
      $value = Url::fromRoute('<front>');
    }
    $links = $this->languageManager
      ->getLanguageSwitchLinks(LanguageInterface::TYPE_URL, $value);
    $current = $this->languageManager
      ->getLanguage($args['language']);
    if (!$current) {
      $current = $this->languageManager
        ->getDefaultLanguage();
    }
    if (!empty($links->links)) {
      foreach ($links->links as $link) {

        // Yield the link array and the language object of the language
        // context resolved from the sub-request.
        (yield [
          'link' => $link,
          'context' => $current,
        ]);
      }
    }
  }
}