<?php
declare(strict_types=1);
namespace BitBag\OpenMarketplace\Component\Elasticsearch\Form\Extension;
use BitBag\OpenMarketplace\Component\Elasticsearch\DependencyInjection\RegisterProductAttributesFacetsInterface;
use BitBag\SyliusElasticsearchPlugin\Form\Type\SearchFacetsType;
use BitBag\SyliusElasticsearchPlugin\Form\Type\ShopProductsFilterType;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
final class ShopProductsFilterTypeExtension extends AbstractTypeExtension
{
public function __construct(
private RegisterProductAttributesFacetsInterface $facetRegistry,
) {
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->get('attributes')->addEventListener(FormEvents::POST_SET_DATA, [$this, 'registerFacets']);
$builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'renameFacets'], -255);
}
public function registerFacets(): void
{
$this->facetRegistry->registerFacetsForWideSearch();
$this->facetRegistry->registerFacetsForTaxonSearch();
}
public function renameFacets(FormEvent $event): void
{
$form = $event->getForm();
$facetsForm = $form->get('facets');
$facets = $facetsForm->getConfig()->getOption('facets');
$form->remove('facets');
$form->add('filters', SearchFacetsType::class, [
'facets' => $facets,
'label' => false,
'property_path' => '[facets]',
]);
}
public static function getExtendedTypes(): iterable
{
return [
ShopProductsFilterType::class,
];
}
}