<?php declare(strict_types=1);
namespace Crehler\MojeBambinoEngine\Storefront\Controller;
use Crehler\MojeBambinoEngine\Storefront\Page\Product\ModalProductPageLoader;
use Shopware\Core\Framework\Routing\Annotation\RouteScope;
use Shopware\Core\Framework\Validation\DataBag\RequestDataBag;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Shopware\Storefront\Controller\StorefrontController;
use Shopware\Storefront\Framework\Cache\Annotation\HttpCache;
use Shopware\Storefront\Page\Product\Configurator\ProductCombinationFinder;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @RouteScope(scopes={"storefront"})
*/
class ProductController extends StorefrontController
{
/**
* @var ModalProductPageLoader
*/
private $modalProductPageLoader;
/**
* @var ProductCombinationFinder
*/
private $combinationFinder;
public function __construct(
ModalProductPageLoader $modalProductPageLoader,
ProductCombinationFinder $combinationFinder
) {
$this->modalProductPageLoader = $modalProductPageLoader;
$this->combinationFinder = $combinationFinder;
}
/**
* @HttpCache()
* @Route("/quickview/full/{productId}", name="widgets.quickview.full", methods={"GET"}, defaults={"XmlHttpRequest": true})
*/
public function quickviewFull(Request $request, SalesChannelContext $salesChannelContext): Response
{
$page = $this->modalProductPageLoader->load($request, $request->attributes->get('productId'), null, $salesChannelContext);
return $this->renderStorefront('@Storefront/storefront/component/product/quickview/full.html.twig', ['page' => $page]);
}
/**
* @HttpCache()
* @Route("/quickview/{productId}/switch", name="widgets.quickview.switch", methods={"GET"}, defaults={"XmlHttpRequest": true})
*/
public function quickviewVariantFull(string $productId, Request $request, SalesChannelContext $salesChannelContext): Response
{
$switchedOption = $request->query->get('switched');
$newOptions = json_decode($request->query->get('options'), true);
$redirect = $this->combinationFinder->find($productId, $switchedOption, $newOptions, $salesChannelContext);
$page = $this->modalProductPageLoader->load($request, $productId, $redirect->getVariantId(), $salesChannelContext);
return $this->renderStorefront('@Storefront/storefront/component/product/quickview/full.html.twig', ['page' => $page]);
}
}