<?php declare(strict_types=1);
namespace Mrpix\ShoppingCity\Subscriber;
use Mrpix\ShoppingCity\Services\Seller;
use Shopware\Storefront\Page\PageLoadedEvent;
use Shopware\Storefront\Page\Search\SearchPageLoadedEvent;
use Shopware\Storefront\Page\Suggest\SuggestPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class SearchSubscriber implements EventSubscriberInterface
{
private Seller $sellerService;
public function __construct(Seller $sellerService)
{
$this->sellerService = $sellerService;
}
public static function getSubscribedEvents(): array
{
return [
SuggestPageLoadedEvent::class => 'onSuggestPageLoaded',
SearchPageLoadedEvent::class => 'onSearchPageLoaded',
];
}
public function onSuggestPageLoaded(SuggestPageLoadedEvent $event): void
{
$this->addSellersExtension($event);
}
public function onSearchPageLoaded(SearchPageLoadedEvent $event): void
{
$this->addSellersExtension($event, false);
}
/**
* @param SuggestPageLoadedEvent|SearchPageLoadedEvent $event
*/
private function addSellersExtension(PageLoadedEvent $event, bool $isSuggest = true): void
{
$page = $event->getPage();
$searchTerm = $page->getSearchTerm();
$sellers = $this->sellerService->searchSellers($searchTerm, $event->getContext(), $isSuggest);
if (!empty($sellers)) {
$page->addArrayExtension('sellers', $sellers);
}
}
}