<?php
declare(strict_types=1);
namespace App\Module\Address\Subscriber;
use App\Module\Address\Renderer\AddressFormRenderer;
use App\Module\ShortSimpleCheckout\Event\View\ShippingPaymentDispatchEvent;
use App\Module\ShortSimpleCheckout\Events;
use App\Module\ShortSimpleCheckout\Exception\VariableAlreadyDefinedException;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Twig\Error\Error;
/**
* AddressFormSubscriber
*
* @package App\Module\Address\Subscriber
*/
final class AddressFormSubscriber implements EventSubscriberInterface
{
private AddressFormRenderer $renderer;
/**
* AddressFormSubscriber constructor
*
* @param AddressFormRenderer $renderer
*/
public function __construct(AddressFormRenderer $renderer)
{
$this->renderer = $renderer;
}
/**
* Get subscribed events
*
* @return array
*/
public static function getSubscribedEvents(): array
{
return [
Events::SHIPPING_PAYMENT_INDEX_DISPATCH => 'addCreateAddressFormToView'
];
}
/**
* Add rendered createAddressForms to the event
*
* @param ShippingPaymentDispatchEvent $event
*
* @throws VariableAlreadyDefinedException on duplicate event variable
* @throws Error on twig render errors
*
* @return ShippingPaymentDispatchEvent
*/
public function addCreateAddressFormToView(ShippingPaymentDispatchEvent $event): ShippingPaymentDispatchEvent
{
$event->addVariable('createBillingAddressForm', $this->renderer->renderCreateBillingAddressForm());
$event->addVariable('createPrivateCustomerAddressForm', $this->renderer->renderCreatePrivateCustomerAddressForm());
$event->addVariable('createShippingAddressForm', $this->renderer->renderCreateShippingAddressForm());
$event->addVariable('createPrivateShippingAddressForm', $this->renderer->renderCreatePrivateShippingAddressForm());
return $event;
}
}