From e4e2a52a38de7609d5e6e1cfa5c1d2b749909303 Mon Sep 17 00:00:00 2001 From: Joao Garin Date: Wed, 29 Apr 2026 14:03:40 +0100 Subject: [PATCH] fix(MenuLinkUrl): Handle translation of URls --- .../Menu/MenuLink/MenuLinkUrl.php | 87 ++++++++++++++----- 1 file changed, 66 insertions(+), 21 deletions(-) diff --git a/src/Plugin/GraphQL/DataProducer/Menu/MenuLink/MenuLinkUrl.php b/src/Plugin/GraphQL/DataProducer/Menu/MenuLink/MenuLinkUrl.php index 8526c03a6..720e71259 100644 --- a/src/Plugin/GraphQL/DataProducer/Menu/MenuLink/MenuLinkUrl.php +++ b/src/Plugin/GraphQL/DataProducer/Menu/MenuLink/MenuLinkUrl.php @@ -1,40 +1,85 @@ new ContextDefinition( + data_type: 'any', + label: new TranslatableMarkup('Menu link'), + ), + ], +)] +class MenuLinkUrl extends DataProducerPluginBase implements ContainerFactoryPluginInterface { + use DependencySerializationTrait; /** - * Resolver. - * - * @param \Drupal\Core\Menu\MenuLinkInterface $link + * The language manager service. + */ + protected LanguageManagerInterface $languageManager; + + /** + * {@inheritdoc} * - * @return \Drupal\Core\Url + * @codeCoverageIgnore + */ + public static function create(ContainerInterface $container, array $configuration, $pluginId, $pluginDefinition) { + return new static( + $configuration, + $pluginId, + $pluginDefinition, + $container->get('language_manager') + ); + } + + /** + * MenuLinkUrl constructor. */ - public function resolve(MenuLinkInterface $link) { - return $link->getUrlObject(); + public function __construct(array $configuration, string $pluginId, array $pluginDefinition, LanguageManagerInterface $languageManager) { + parent::__construct($configuration, $pluginId, $pluginDefinition); + $this->languageManager = $languageManager; + } + + /** + * Resolver. + */ + public function resolve(MenuLinkInterface $link, FieldContext $context): Url { + $url = $link->getUrlObject(); + + if ($langcode = $context->getContextLanguage()) { + if ($language = $this->languageManager->getLanguage($langcode)) { + $url->setOption('language', $language); + } + $context->addCacheContexts(['languages:language_url']); + } + + return $url; } }