Browse Source

Remember search

imwald
Nuša Pukšič 8 months ago
parent
commit
d8967a507d
  1. 52
      src/Twig/Components/SearchComponent.php
  2. 2
      templates/components/SearchComponent.html.twig

52
src/Twig/Components/SearchComponent.php

@ -6,6 +6,7 @@ use App\Credits\Service\CreditsManager; @@ -6,6 +6,7 @@ use App\Credits\Service\CreditsManager;
use FOS\ElasticaBundle\Finder\FinderInterface;
use Psr\Cache\InvalidArgumentException;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\UX\LiveComponent\Attribute\AsLiveComponent;
use Symfony\UX\LiveComponent\Attribute\LiveAction;
@ -40,12 +41,16 @@ final class SearchComponent @@ -40,12 +41,16 @@ final class SearchComponent
#[LiveProp]
public int $resultsPerPage = 12;
private const SESSION_KEY = 'last_search_results';
private const SESSION_QUERY_KEY = 'last_search_query';
public function __construct(
private readonly FinderInterface $finder,
private readonly CreditsManager $creditsManager,
private readonly TokenStorageInterface $tokenStorage,
private readonly LoggerInterface $logger,
private readonly CacheInterface $cache
private readonly CacheInterface $cache,
private readonly RequestStack $requestStack
)
{
$token = $this->tokenStorage->getToken();
@ -63,6 +68,16 @@ final class SearchComponent @@ -63,6 +68,16 @@ final class SearchComponent
$this->credits = $this->creditsManager->resetBalance($this->npub);
}
}
// Restore search results from session if available and no query provided
if (empty($this->query)) {
$session = $this->requestStack->getSession();
if ($session->has(self::SESSION_QUERY_KEY)) {
$this->query = $session->get(self::SESSION_QUERY_KEY);
$this->results = $session->get(self::SESSION_KEY, []);
$this->logger->info('Restored search results from session for query: ' . $this->query);
}
}
}
/**
@ -75,6 +90,7 @@ final class SearchComponent @@ -75,6 +90,7 @@ final class SearchComponent
if (empty($this->query)) {
$this->results = [];
$this->clearSearchCache();
return;
}
@ -84,6 +100,15 @@ final class SearchComponent @@ -84,6 +100,15 @@ final class SearchComponent
$this->credits = $this->creditsManager->resetBalance($this->npub);
}
// Check if the same query exists in session
$session = $this->requestStack->getSession();
if ($session->has(self::SESSION_QUERY_KEY) &&
$session->get(self::SESSION_QUERY_KEY) === $this->query) {
$this->results = $session->get(self::SESSION_KEY, []);
$this->logger->info('Using cached search results for query: ' . $this->query);
return;
}
if (!$this->creditsManager->canAfford($this->npub, 1)) {
$this->results = [];
return;
@ -152,6 +177,10 @@ final class SearchComponent @@ -152,6 +177,10 @@ final class SearchComponent
$this->logger->info('Search results: ', ['results' => $results]);
$this->results = $results;
// Cache the search results in session
$this->saveSearchToSession($this->query, $this->results);
} catch (\Exception $e) {
$this->logger->error('Search error: ' . $e->getMessage());
$this->results = [];
@ -164,4 +193,25 @@ final class SearchComponent @@ -164,4 +193,25 @@ final class SearchComponent
$this->credits += 5;
}
/**
* Save search results to session
*/
private function saveSearchToSession(string $query, array $results): void
{
$session = $this->requestStack->getSession();
$session->set(self::SESSION_QUERY_KEY, $query);
$session->set(self::SESSION_KEY, $results);
$this->logger->info('Saved search results to session for query: ' . $query);
}
/**
* Clear search cache from session
*/
private function clearSearchCache(): void
{
$session = $this->requestStack->getSession();
$session->remove(self::SESSION_QUERY_KEY);
$session->remove(self::SESSION_KEY);
$this->logger->info('Cleared search cache from session');
}
}

2
templates/components/SearchComponent.html.twig

@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
<input type="search"
placeholder="{{ 'text.search'|trans }}"
data-model="norender|query"
value="{{ this.query }}"
/>
<button type="submit"><twig:ux:icon name="iconoir:search" class="icon" /></button>
</label>
@ -37,3 +38,4 @@ @@ -37,3 +38,4 @@
{% endif %}
{% endblock %}
</div>

Loading…
Cancel
Save