diff --git a/backend/server/adventures/urls.py b/backend/server/adventures/urls.py index 2eb2573..10cdb1a 100644 --- a/backend/server/adventures/urls.py +++ b/backend/server/adventures/urls.py @@ -1,12 +1,13 @@ from django.urls import include, path from rest_framework.routers import DefaultRouter -from .views import AdventureViewSet, CollectionViewSet, StatsViewSet, GenerateDescription +from .views import AdventureViewSet, CollectionViewSet, StatsViewSet, GenerateDescription, ActivityTypesView router = DefaultRouter() router.register(r'adventures', AdventureViewSet, basename='adventures') router.register(r'collections', CollectionViewSet, basename='collections') router.register(r'stats', StatsViewSet, basename='stats') router.register(r'generate', GenerateDescription, basename='generate') +router.register(r'activity-types', ActivityTypesView, basename='activity-types') urlpatterns = [ diff --git a/backend/server/adventures/views.py b/backend/server/adventures/views.py index 156138a..d0a1b0c 100644 --- a/backend/server/adventures/views.py +++ b/backend/server/adventures/views.py @@ -341,4 +341,31 @@ class GenerateDescription(viewsets.ViewSet): if extract.get('original') is None: return Response({"error": "No image found"}, status=400) return Response(extract["original"]) - \ No newline at end of file + + +class ActivityTypesView(viewsets.ViewSet): + permission_classes = [IsAuthenticated] + + @action(detail=False, methods=['get']) + def types(self, request): + """ + Retrieve a list of distinct activity types for adventures associated with the current user. + + Args: + request (HttpRequest): The HTTP request object. + + Returns: + Response: A response containing a list of distinct activity types. + """ + types = Adventure.objects.filter(user_id=request.user.id).values_list('activity_types', flat=True).distinct() + + allTypes = [] + + for i in types: + if not i: + continue + for x in i: + if x and x not in allTypes: + allTypes.append(x) + + return Response(allTypes) diff --git a/frontend/src/lib/components/Navbar.svelte b/frontend/src/lib/components/Navbar.svelte index 1d9da85..b54c292 100644 --- a/frontend/src/lib/components/Navbar.svelte +++ b/frontend/src/lib/components/Navbar.svelte @@ -12,6 +12,9 @@ import Water from '~icons/mdi/water'; import AboutModal from './AboutModal.svelte'; import Avatar from './Avatar.svelte'; + import { page } from '$app/stores'; + + let query: string = ''; let isAboutModalOpen: boolean = false; @@ -22,6 +25,22 @@ document.documentElement.setAttribute('data-theme', theme); } }; + + const searchGo = async (e: Event) => { + e.preventDefault(); + let reload: boolean = false; + + if ($page.url.pathname === '/search') { + reload = true; + } + + if (query) { + await goto(`/search?query=${query}`); + if (reload) { + window.location.reload(); + } + } + }; {#if isAboutModalOpen} @@ -96,6 +115,24 @@
  • + + {/if} {#if !data.user} diff --git a/frontend/src/routes/search/+page.svelte b/frontend/src/routes/search/+page.svelte index e3d3f24..73de6e3 100644 --- a/frontend/src/routes/search/+page.svelte +++ b/frontend/src/routes/search/+page.svelte @@ -16,7 +16,9 @@ {#if adventures.length === 0} {:else} - {#each adventures as adventure} - - {/each} +
    + {#each adventures as adventure} + + {/each} +
    {/if}