src/Component/Elasticsearch/Form/Extension/ShopProductsFilterTypeExtension.php line 24

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace BitBag\OpenMarketplace\Component\Elasticsearch\Form\Extension;
  4. use BitBag\OpenMarketplace\Component\Elasticsearch\DependencyInjection\RegisterProductAttributesFacetsInterface;
  5. use BitBag\SyliusElasticsearchPlugin\Form\Type\SearchFacetsType;
  6. use BitBag\SyliusElasticsearchPlugin\Form\Type\ShopProductsFilterType;
  7. use Symfony\Component\Form\AbstractTypeExtension;
  8. use Symfony\Component\Form\FormBuilderInterface;
  9. use Symfony\Component\Form\FormEvent;
  10. use Symfony\Component\Form\FormEvents;
  11. final class ShopProductsFilterTypeExtension extends AbstractTypeExtension
  12. {
  13.     public function __construct(
  14.         private RegisterProductAttributesFacetsInterface $facetRegistry,
  15.     ) {
  16.     }
  17.     public function buildForm(FormBuilderInterface $builder, array $options): void
  18.     {
  19.         $builder->get('attributes')->addEventListener(FormEvents::POST_SET_DATA, [$this'registerFacets']);
  20.         $builder->addEventListener(FormEvents::PRE_SUBMIT, [$this'renameFacets'], -255);
  21.     }
  22.     public function registerFacets(): void
  23.     {
  24.         $this->facetRegistry->registerFacetsForWideSearch();
  25.         $this->facetRegistry->registerFacetsForTaxonSearch();
  26.     }
  27.     public function renameFacets(FormEvent $event): void
  28.     {
  29.         $form $event->getForm();
  30.         $facetsForm $form->get('facets');
  31.         $facets $facetsForm->getConfig()->getOption('facets');
  32.         $form->remove('facets');
  33.         $form->add('filters'SearchFacetsType::class, [
  34.             'facets' => $facets,
  35.             'label' => false,
  36.             'property_path' => '[facets]',
  37.         ]);
  38.     }
  39.     public static function getExtendedTypes(): iterable
  40.     {
  41.         return [
  42.             ShopProductsFilterType::class,
  43.         ];
  44.     }
  45. }