<?php declare(strict_types=1);
namespace Maxia\MaxiaVariantsTable6\Storefront\Subscriber;
use Maxia\MaxiaVariantsTable6\Core\Content\Product\SalesChannel\Detail\CachedVariantsTableRoute;
use Maxia\MaxiaVariantsTable6\Service\ConfigService;
use Shopware\Storefront\Event\StorefrontRenderEvent;
use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
* @package Maxia\MaxiaVariantsTable6\Subscriber
*/
class ProductDetailSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
StorefrontRenderEvent::class => 'addContextExtension',
ProductPageLoadedEvent::class => 'onProductPageLoaded'
];
}
private ConfigService $configService;
private CachedVariantsTableRoute $variantsTableRoute;
public function __construct(ConfigService $configService, CachedVariantsTableRoute $variantsTableRoute)
{
$this->configService = $configService;
$this->variantsTableRoute = $variantsTableRoute;
}
/**
* @param StorefrontRenderEvent $event
*/
public function addContextExtension(StorefrontRenderEvent $event)
{
$context = $event->getSalesChannelContext();
$context->addExtension('maxiaVariantsTable', $this->configService->getPluginConfig($context));
}
/**
* @param ProductPageLoadedEvent $event
*/
public function onProductPageLoaded(ProductPageLoadedEvent $event)
{
$config = $this->configService->getPluginConfig($event->getSalesChannelContext());
if (!$config->isPluginEnabled()) return;
$product = $event->getPage()->getProduct();
if (!$product->getParentId()) return;
try {
$variantsTableResponse = $this->variantsTableRoute
->load($product->getParentId(), $event->getRequest(), $event->getSalesChannelContext());
if ($variantsTableResponse && $variantsTableResponse->getPagelet()) {
$config = $variantsTableResponse->getPagelet()->getBootstrapTableConfig();
unset($config['data']);
$variantsTableResponse->getPagelet()->setBootstrapTableConfig($config);
$event->getPage()->addExtension('maxiaVariantsTable', $variantsTableResponse->getPagelet());
}
} catch (NotFoundHttpException $e) {}
}
}