mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 06:51:08 -05:00
Enhance search functionality with loading indicators, dark mode support, and improved UI; implement event handling for search results and refine park filter tests for better coverage
This commit is contained in:
@@ -51,26 +51,43 @@ def get_park_areas(request: HttpRequest) -> HttpResponse:
|
||||
|
||||
|
||||
def search_parks(request: HttpRequest) -> HttpResponse:
|
||||
"""Search parks and return results for quick searches (dropdowns, etc)"""
|
||||
"""Search parks and return results for quick searches with auto-suggestions"""
|
||||
try:
|
||||
search_query = request.GET.get('search', '').strip()
|
||||
if not search_query:
|
||||
return HttpResponse('') # Return empty response for empty query
|
||||
|
||||
queryset = (
|
||||
Park.objects.prefetch_related('location', 'photos')
|
||||
Park.objects.select_related('owner')
|
||||
.prefetch_related('location', 'photos')
|
||||
.annotate(
|
||||
ride_count=Count('rides'),
|
||||
coaster_count=Count('rides', filter=Q(rides__category="RC"))
|
||||
)
|
||||
.order_by('name')
|
||||
)
|
||||
filter_params = {'search': request.GET.get('q', '').strip()}
|
||||
|
||||
park_filter = ParkFilter(filter_params, queryset=queryset)
|
||||
parks = park_filter.qs[:10] # Limit to 10 results
|
||||
# Use our existing filter but with search-specific configuration
|
||||
park_filter = ParkFilter({
|
||||
'search': search_query
|
||||
}, queryset=queryset)
|
||||
|
||||
return render(request, "parks/partials/park_search_results.html", {
|
||||
parks = park_filter.qs[:8] # Limit to 8 suggestions
|
||||
|
||||
response = render(request, "parks/partials/park_search_results.html", {
|
||||
"parks": parks,
|
||||
"is_quick_search": True
|
||||
})
|
||||
response['HX-Trigger'] = 'searchComplete'
|
||||
return response
|
||||
|
||||
except Exception as e:
|
||||
return render(request, "parks/partials/park_search_results.html", {
|
||||
response = render(request, "parks/partials/park_search_results.html", {
|
||||
"error": f"Error performing search: {str(e)}",
|
||||
"is_quick_search": True
|
||||
})
|
||||
response['HX-Trigger'] = 'searchError'
|
||||
return response
|
||||
|
||||
|
||||
def location_search(request: HttpRequest) -> JsonResponse:
|
||||
@@ -174,12 +191,14 @@ class ParkListView(HTMXFilterableMixin, ListView):
|
||||
"photos",
|
||||
"location",
|
||||
"rides",
|
||||
"rides__manufacturer"
|
||||
"rides__manufacturer",
|
||||
"areas"
|
||||
)
|
||||
.annotate(
|
||||
total_rides=Count("rides"),
|
||||
total_coasters=Count("rides", filter=Q(rides__category="RC")),
|
||||
)
|
||||
.order_by("name") # Ensure consistent ordering for pagination
|
||||
)
|
||||
except Exception as e:
|
||||
messages.error(self.request, f"Error loading parks: {str(e)}")
|
||||
|
||||
Reference in New Issue
Block a user