vendor/bitbag/elasticsearch-plugin/src/Form/Type/ShopProductsFilterType.php line 53

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file has been created by developers from BitBag.
  4.  * Feel free to contact us once you face any issues or want to start
  5.  * another great project.
  6.  * You can find more information about us on https://bitbag.io and write us
  7.  * an email on hello@bitbag.io.
  8.  */
  9. declare(strict_types=1);
  10. namespace BitBag\SyliusElasticsearchPlugin\Form\Type;
  11. use BitBag\SyliusElasticsearchPlugin\Form\Resolver\ProductsFilterFacetResolverInterface;
  12. use FOS\ElasticaBundle\Paginator\FantaPaginatorAdapter;
  13. use Pagerfanta\Adapter\AdapterInterface;
  14. use Symfony\Component\Form\FormBuilderInterface;
  15. use Symfony\Component\Form\FormEvent;
  16. use Symfony\Component\Form\FormEvents;
  17. use Symfony\Component\Form\FormInterface;
  18. final class ShopProductsFilterType extends AbstractFilterType
  19. {
  20.     private string $namePropertyPrefix;
  21.     private ProductsFilterFacetResolverInterface $facetResolver;
  22.     public function __construct(
  23.         string $namePropertyPrefix,
  24.         ProductsFilterFacetResolverInterface $facetResolver
  25.     ) {
  26.         $this->namePropertyPrefix $namePropertyPrefix;
  27.         $this->facetResolver $facetResolver;
  28.     }
  29.     public function buildForm(FormBuilderInterface $builder, array $options): void
  30.     {
  31.         $builder
  32.             ->add($this->namePropertyPrefixNameFilterType::class)
  33.             ->add('options'ProductOptionsFilterType::class, ['required' => false'label' => false])
  34.             ->add('attributes'ProductAttributesFilterType::class, ['required' => false'label' => false])
  35.             ->add('price'PriceFilterType::class, ['required' => false'label' => false])
  36.             ->setMethod('GET');
  37.         $builder->addEventListener(FormEvents::PRE_SUBMIT, [$this'addFacets']);
  38.     }
  39.     public function addFacets(FormEvent $event): void
  40.     {
  41.         $facets $this->facetResolver->resolveFacets($event$this->namePropertyPrefix);
  42.         if ($facets->getAdapter()) {
  43.             $this->modifyForm($event->getForm(), $facets->getAdapter());
  44.         }
  45.     }
  46.     private function modifyForm(FormInterface $formAdapterInterface $adapter): void
  47.     {
  48.         if (!$adapter instanceof FantaPaginatorAdapter) {
  49.             return;
  50.         }
  51.         $form->add(
  52.             'facets',
  53.             SearchFacetsType::class,
  54.             [
  55.                 'facets' => $adapter->getAggregations(),
  56.                 'label' => false,
  57.             ]
  58.         );
  59.     }
  60. }