headless_cms-1.0.3/modules/headless_cms_preview_nats/src/EventSubscriber/HeadlessPreviewEventSubscriber.php
modules/headless_cms_preview_nats/src/EventSubscriber/HeadlessPreviewEventSubscriber.php
<?php
declare(strict_types=1);
namespace Drupal\headless_cms_preview_nats\EventSubscriber;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\headless_cms_preview\Event\HeadlessPreviewUpdatedEvent;
use Drupal\nats\NatsClientManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Event subscriber for headless preview events.
*/
class HeadlessPreviewEventSubscriber implements EventSubscriberInterface {
public function __construct(
protected readonly NatsClientManagerInterface $natsClientManager,
protected readonly ConfigFactoryInterface $configFactory,
) {}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
return [
HeadlessPreviewUpdatedEvent::EVENT_NAME => ['onHeadlessPreviewUpdated'],
];
}
/**
* Handles the HeadlessPreviewUpdatedEvent.
*/
public function onHeadlessPreviewUpdated(HeadlessPreviewUpdatedEvent $event) {
$config = $this->configFactory->get('headless_cms_preview_nats.settings');
if (!$config->get('enabled')) {
return;
}
$client = $this->natsClientManager->get($config->get('nats_client'));
$topic = vsprintf('%s.%s.%s--%s', [
$config->get('topic_prefix'),
$event->account->id(),
$event->entity->getEntityTypeId(),
$event->entity->bundle(),
]);
$client->publish($topic, [
'operation' => 'update',
]);
}
}
