diff --git a/src/Controller/Action/SearchAction.php b/src/Controller/Action/SearchAction.php index 693d52c..9c8d5a8 100644 --- a/src/Controller/Action/SearchAction.php +++ b/src/Controller/Action/SearchAction.php @@ -13,7 +13,9 @@ use Setono\SyliusMeilisearchPlugin\Event\Search\SearchResponseParametersCreated; use Setono\SyliusMeilisearchPlugin\Event\Search\SearchResultReceived; use Setono\SyliusMeilisearchPlugin\Form\Builder\SearchFormBuilderInterface; +use Setono\SyliusMeilisearchPlugin\Form\Type\SearchResultType; use Setono\SyliusMeilisearchPlugin\Model\IndexableInterface; +use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Twig\Environment; @@ -24,6 +26,7 @@ final class SearchAction public function __construct( ManagerRegistry $managerRegistry, + private readonly FormFactoryInterface $formFactory, private readonly Environment $twig, private readonly SearchFormBuilderInterface $searchFormBuilder, private readonly SearchEngineInterface $searchEngine, @@ -40,7 +43,7 @@ public function __invoke(Request $request): Response $searchResult = $this->searchEngine->execute($searchRequestCreatedEvent->searchRequest); $this->eventDispatcher->dispatch(new SearchResultReceived($searchResult)); - $searchForm = $this->searchFormBuilder->build($searchResult); + $searchForm = $this->formFactory->create(SearchResultType::class, $searchResult); $searchForm->handleRequest($request); if ($searchForm->isSubmitted() && !$searchForm->isValid()) { diff --git a/src/Engine/SearchResult.php b/src/Engine/SearchResult.php index 4c62e20..7cbccc0 100644 --- a/src/Engine/SearchResult.php +++ b/src/Engine/SearchResult.php @@ -13,7 +13,7 @@ final class SearchResult public function __construct( /** The index that was queried */ public readonly Index $index, - + public readonly string $query, /** @var array $hits */ public readonly array $hits, public readonly int $totalHits, @@ -21,6 +21,7 @@ public function __construct( public readonly int $pageSize, public readonly int $totalPages, public readonly FacetDistribution $facetDistribution, + public readonly ?string $sort = null, ) { } @@ -44,6 +45,7 @@ public static function fromMeilisearchSearchResult(Index $index, MeilisearchSear return new self( $index, + $meilisearchSearchResult->getQuery(), $meilisearchSearchResult->getHits(), $totalHits, $page, diff --git a/src/Form/Builder/SearchFormBuilder.php b/src/Form/Builder/SearchFormBuilder.php index a63b9c3..193f8f0 100644 --- a/src/Form/Builder/SearchFormBuilder.php +++ b/src/Form/Builder/SearchFormBuilder.php @@ -35,7 +35,7 @@ public function build(SearchResult $searchResult): FormInterface 'csrf_protection' => false, 'allow_extra_fields' => true, ]) - ->add('q', HiddenType::class) + ->add(SearchRequest::QUERY_PARAMETER_FILTER, HiddenType::class) ->setMethod('GET') ; @@ -79,7 +79,7 @@ private function buildPagination(SearchResult $searchResult, FormBuilderInterfac $choices['setono_sylius_meilisearch.form.search.pagination.next'] = $searchResult->page + 1; } - $builder->add('p', ChoiceType::class, [ + $builder->add(SearchRequest::QUERY_PARAMETER_PAGE, ChoiceType::class, [ 'choices' => $choices, 'choice_attr' => fn (string $page) => ['style' => 'display: none'], // we only want to display the labels 'required' => false, diff --git a/src/Form/Type/SearchFilterType.php b/src/Form/Type/SearchFilterType.php new file mode 100644 index 0000000..a48c45f --- /dev/null +++ b/src/Form/Type/SearchFilterType.php @@ -0,0 +1,20 @@ +addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event): void { + dump($event->getData()); + }); + } +} diff --git a/src/Form/Type/SearchResultType.php b/src/Form/Type/SearchResultType.php new file mode 100644 index 0000000..ab33386 --- /dev/null +++ b/src/Form/Type/SearchResultType.php @@ -0,0 +1,29 @@ +add(SearchRequest::QUERY_PARAMETER_SEARCH, HiddenType::class, [ + 'property_path' => 'query', + ]) +// ->add(SearchRequest::QUERY_PARAMETER_FILTER, SearchFilterType::class) + ->add(SearchRequest::QUERY_PARAMETER_SORT, SearchResultSortType::class, [ + 'property_path' => 'sort', + ]) + ->setMethod('GET') + ; + } +} diff --git a/src/Resources/config/services/conditional/search.xml b/src/Resources/config/services/conditional/search.xml index 3ca9e5a..e0915e8 100644 --- a/src/Resources/config/services/conditional/search.xml +++ b/src/Resources/config/services/conditional/search.xml @@ -9,6 +9,7 @@ + diff --git a/src/Resources/views/search/_filters.html.twig b/src/Resources/views/search/_filters.html.twig index 18665b2..e5f180d 100644 --- a/src/Resources/views/search/_filters.html.twig +++ b/src/Resources/views/search/_filters.html.twig @@ -1 +1 @@ -{{ form_widget(searchForm.f, { 'attr': { 'class': 'ssm-filters' } }) }} +{#{{ form_widget(searchForm.f, { 'attr': { 'class': 'ssm-filters' } }) }}#}