diff --git a/TODO b/TODO index d15e3d2..12e17f8 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,2 @@ -- Search - List profiles - Chat \ No newline at end of file diff --git a/app/website/consumers.py b/app/website/consumers.py index 1c3972e..623dd43 100644 --- a/app/website/consumers.py +++ b/app/website/consumers.py @@ -1,7 +1,7 @@ import json from channels.generic.websocket import AsyncWebsocketConsumer from asgiref.sync import sync_to_async -from .views import page_talks, page_about, page_single_talk +from .views import page_talks, page_about, page_single_talk, page_results class WebsiteConsumer(AsyncWebsocketConsumer): @@ -61,6 +61,15 @@ class WebsiteConsumer(AsyncWebsocketConsumer): self.room_group_name, {"type": "send_page_about"} ) + # Search + if data["value"] == "search-talks": + await self.channel_layer.group_send( + self.room_group_name, { + "type": "send_page_search", + "search": data["search"], + } + ) + # Pages def _get_talks(self, page): @@ -86,3 +95,15 @@ class WebsiteConsumer(AsyncWebsocketConsumer): """Send About page""" html = await sync_to_async(self._get_about)() await self.send(text_data=html) + + def _get_results(self, search): + return page_results(search) + + async def send_page_search(self, event): + """Send results talks""" + print(event) + if event["search"] != "": + html = await sync_to_async(self._get_results)(event["search"]) + else: + html = await sync_to_async(self._get_talks)(event["page"]) + await self.send(text_data=html) diff --git a/app/website/templates/pages/talks.html b/app/website/templates/pages/talks.html index 81ca212..cd8a25a 100644 --- a/app/website/templates/pages/talks.html +++ b/app/website/templates/pages/talks.html @@ -1,5 +1,25 @@ {% load slippers %}
+ + {# Search #} +
+ + + +
+ {# End search #} + + {# List talks #} {% for talk in talks %}
@@ -23,9 +43,15 @@
{% endfor %} - {# Pagination #} -
-

Page {{ page }}

- {% #link text="Next page" action="page" value="talks" page=next_page %}{% /link %} -
+ {# End List talks #} + + {# Paginator #} + {% if not search %} +
+

Page {{ page }}

+ {% #link text="Next page" action="page" value="talks" page=next_page %}{% /link %} +
+ {% endif %} + {# End Paginator #} +
diff --git a/app/website/views.py b/app/website/views.py index 6ec1bcc..fdb999d 100644 --- a/app/website/views.py +++ b/app/website/views.py @@ -41,3 +41,15 @@ def page_single_talk(id): def page_about(): return render_to_string("pages/about.html", {}) + + +def page_results(search): + return render_to_string( + "pages/talks.html", + { + "talks": Talk.objects.filter( + title__icontains=search.lower() + ).order_by("title"), + "search": search, + }, + )