From 68f5da2e55e1e722d474e7baae758270dfeccab2 Mon Sep 17 00:00:00 2001 From: Christopher Byrd Date: Wed, 30 Oct 2024 06:26:39 -0700 Subject: [PATCH] Implements basic search frontend (#79) --- arches_lingo/src/arches_lingo/App.vue | 1 + arches_lingo/src/arches_lingo/api.ts | 25 ++ .../components/basic-search/BasicSearch.vue | 313 ++++++++++++++++++ .../components/basic-search/SearchResult.vue | 72 ++++ .../basic-search/SortAndFilterControls.vue | 130 ++++++++ .../components/header/PageHeader.vue | 7 +- .../components/header/SearchDialog.vue | 68 ++++ .../components/sidenav/SideNav.vue | 5 - arches_lingo/src/arches_lingo/constants.ts | 3 + .../src/arches_lingo/pages/BasicSearch.vue | 1 - arches_lingo/src/arches_lingo/routes.ts | 9 - arches_lingo/src/arches_lingo/types.ts | 12 + arches_lingo/templates/arches_urls.htm | 12 + arches_lingo/urls.py | 1 - arches_lingo/utils/concept_builder.py | 3 + arches_lingo/views/api/concepts.py | 27 +- tests/tests.py | 2 +- tsconfig.json | 1 + 18 files changed, 661 insertions(+), 31 deletions(-) create mode 100644 arches_lingo/src/arches_lingo/components/basic-search/BasicSearch.vue create mode 100644 arches_lingo/src/arches_lingo/components/basic-search/SearchResult.vue create mode 100644 arches_lingo/src/arches_lingo/components/basic-search/SortAndFilterControls.vue create mode 100644 arches_lingo/src/arches_lingo/components/header/SearchDialog.vue delete mode 100644 arches_lingo/src/arches_lingo/pages/BasicSearch.vue create mode 100644 arches_lingo/templates/arches_urls.htm diff --git a/arches_lingo/src/arches_lingo/App.vue b/arches_lingo/src/arches_lingo/App.vue index 262bc710..4c8ad376 100644 --- a/arches_lingo/src/arches_lingo/App.vue +++ b/arches_lingo/src/arches_lingo/App.vue @@ -77,6 +77,7 @@ main { font-family: sans-serif; height: 100vh; width: 100vw; + overflow-x: hidden; display: flex; flex-direction: column; } diff --git a/arches_lingo/src/arches_lingo/api.ts b/arches_lingo/src/arches_lingo/api.ts index f6b9f3d2..657efbe4 100644 --- a/arches_lingo/src/arches_lingo/api.ts +++ b/arches_lingo/src/arches_lingo/api.ts @@ -54,3 +54,28 @@ export const fetchUser = async () => { throw new Error((error as Error).message || response.statusText); } }; + +export const fetchSearchResults = async ( + searchTerm: string, + items: number, + page: number, +) => { + const params = new URLSearchParams({ + term: searchTerm, + items: items.toString(), + page: page.toString(), + }); + + const url = `${arches.urls.api_search}?${params.toString()}`; + + const response = await fetch(url); + try { + const responseJson = await response.json(); + if (response.ok) { + return responseJson; + } + throw new Error(responseJson.message); + } catch (error) { + throw new Error((error as Error).message || response.statusText); + } +}; diff --git a/arches_lingo/src/arches_lingo/components/basic-search/BasicSearch.vue b/arches_lingo/src/arches_lingo/components/basic-search/BasicSearch.vue new file mode 100644 index 00000000..5a8f46da --- /dev/null +++ b/arches_lingo/src/arches_lingo/components/basic-search/BasicSearch.vue @@ -0,0 +1,313 @@ + + + + + diff --git a/arches_lingo/src/arches_lingo/components/basic-search/SearchResult.vue b/arches_lingo/src/arches_lingo/components/basic-search/SearchResult.vue new file mode 100644 index 00000000..166a0892 --- /dev/null +++ b/arches_lingo/src/arches_lingo/components/basic-search/SearchResult.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/arches_lingo/src/arches_lingo/components/basic-search/SortAndFilterControls.vue b/arches_lingo/src/arches_lingo/components/basic-search/SortAndFilterControls.vue new file mode 100644 index 00000000..fcad02fb --- /dev/null +++ b/arches_lingo/src/arches_lingo/components/basic-search/SortAndFilterControls.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/arches_lingo/src/arches_lingo/components/header/PageHeader.vue b/arches_lingo/src/arches_lingo/components/header/PageHeader.vue index c653ff50..c5d4a0cd 100644 --- a/arches_lingo/src/arches_lingo/components/header/PageHeader.vue +++ b/arches_lingo/src/arches_lingo/components/header/PageHeader.vue @@ -6,15 +6,11 @@ import Menubar from "primevue/menubar"; import { routeNames } from "@/arches_lingo/routes.ts"; import UserInteraction from "@/arches_lingo/components/user/UserInteraction.vue"; +import SearchDialog from "@/arches_lingo/components/header/SearchDialog.vue"; const { $gettext } = useGettext(); const items = ref([ - { - label: $gettext("Search"), - icon: "fa fa-search", - name: routeNames.search, - }, { label: $gettext("Advanced Search"), icon: "fa fa-file", @@ -35,6 +31,7 @@ const items = ref([ >

{{ $gettext("Arches Lingo") }}

+