Skip to content
Snippets Groups Projects

Issue #3471795 by jurgenhaas: ECA Render: missing main content for ajax requests

Merged Jürgen Haas requested to merge issue/eca-3471795:3471795-eca-render-missing into 2.1.x
@@ -9,7 +9,9 @@ use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\MessageCommand;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\DependencyInjection\ClassResolverInterface;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\EventSubscriber\MainContentViewSubscriber;
use Drupal\Core\Logger\LoggerChannelInterface;
use Drupal\Core\Logger\RfcLogLevel;
use Drupal\Core\Messenger\MessengerInterface;
@@ -92,6 +94,20 @@ final class EndpointController implements ContainerInjectionInterface {
*/
protected MessengerInterface $messenger;
/**
* The class resolver.
*
* @var \Drupal\Core\DependencyInjection\ClassResolverInterface
*/
protected ClassResolverInterface $classResolver;
/**
* The main content renderers.
*
* @var array
*/
protected array $mainContentRenderers;
/**
* {@inheritdoc}
*/
@@ -104,7 +120,9 @@ final class EndpointController implements ContainerInjectionInterface {
$container->get('current_user'),
$container->get('config.factory'),
$container->get('logger.channel.eca'),
$container->get('messenger')
$container->get('messenger'),
$container->get('class_resolver'),
$container->getParameter('main_content_renderers')
);
}
@@ -127,8 +145,12 @@ final class EndpointController implements ContainerInjectionInterface {
* The logger.
* @param \Drupal\Core\Messenger\MessengerInterface $messenger
* The messenger.
* @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver
* The class resolver.
* @param array $main_content_renderers
* The main content renderers.
*/
public function __construct(TriggerEvent $trigger_event, RendererInterface $renderer, HtmlRenderer $html_renderer, RouteMatchInterface $route_match, AccountInterface $current_user, ConfigFactoryInterface $config_factory, LoggerChannelInterface $logger, MessengerInterface $messenger) {
public function __construct(TriggerEvent $trigger_event, RendererInterface $renderer, HtmlRenderer $html_renderer, RouteMatchInterface $route_match, AccountInterface $current_user, ConfigFactoryInterface $config_factory, LoggerChannelInterface $logger, MessengerInterface $messenger, ClassResolverInterface $class_resolver, array $main_content_renderers) {
$this->triggerEvent = $trigger_event;
$this->renderer = $renderer;
$this->mainContentHtmlRenderer = $html_renderer;
@@ -137,6 +159,8 @@ final class EndpointController implements ContainerInjectionInterface {
$this->configFactory = $config_factory;
$this->logger = $logger;
$this->messenger = $messenger;
$this->classResolver = $class_resolver;
$this->mainContentRenderers = $main_content_renderers;
}
/**
@@ -202,6 +226,11 @@ final class EndpointController implements ContainerInjectionInterface {
$event = $this->triggerEvent->dispatchFromPlugin('eca_endpoint:response', $path_arguments, $request, $response, $account, $build);
if ($response instanceof AjaxResponse) {
if (Element::children($build)) {
$wrapper = $request->query->get(MainContentViewSubscriber::WRAPPER_FORMAT, 'drupal_modal');
$renderer = $this->classResolver->getInstanceFromDefinition($this->mainContentRenderers[$wrapper]);
$response = $renderer->renderResponse($build, $request, $this->routeMatch);
}
foreach ($this->messenger->deleteAll() as $type => $type_messages) {
/** @var string[]|\Drupal\Component\Render\MarkupInterface[] $type_messages */
foreach ($type_messages as $message) {
Loading