From f063d95e596b9d578b3586441550af98c9f25c38 Mon Sep 17 00:00:00 2001 From: Stefan Nitz Date: Tue, 10 Dec 2024 14:56:53 +0100 Subject: [PATCH 01/10] add first search dropdown prototype --- components/custom-ui/SearchBar.vue | 68 ++++++++++++++++++++ components/custom-ui/dashboard/Dashboard.vue | 8 +-- 2 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 components/custom-ui/SearchBar.vue diff --git a/components/custom-ui/SearchBar.vue b/components/custom-ui/SearchBar.vue new file mode 100644 index 0000000..aea7fa3 --- /dev/null +++ b/components/custom-ui/SearchBar.vue @@ -0,0 +1,68 @@ + + + \ No newline at end of file diff --git a/components/custom-ui/dashboard/Dashboard.vue b/components/custom-ui/dashboard/Dashboard.vue index ba014f7..80affc9 100644 --- a/components/custom-ui/dashboard/Dashboard.vue +++ b/components/custom-ui/dashboard/Dashboard.vue @@ -38,6 +38,7 @@ import Notifications from "~/components/custom-ui/dashboard/Notifications.vue"; import Profile from "~/components/custom-ui/user/Profile.vue"; import Tokens from "~/components/custom-ui/user/Tokens.vue"; import Proxies from "~/components/custom-ui/user/Proxies.vue"; +import SearchBar from "~/components/custom-ui/SearchBar.vue"; import {notifis, v3_events} from './data-notifications' import type {User} from '~/composables/api_wrapper' @@ -314,12 +315,7 @@ EventBus.on('spinStop', () => spinBaby.value = false) -
- - -
+ From ee245cbd595d787409fc79da35a0c5f996b4d7ff Mon Sep 17 00:00:00 2001 From: Stefan Nitz Date: Tue, 4 Feb 2025 15:10:02 +0100 Subject: [PATCH 02/10] added a first Searchpage --- components/custom-ui/SearchBar.vue | 68 --------- components/custom-ui/SearchDialog.vue | 152 +++++++++++++++++++ components/custom-ui/dashboard/Dashboard.vue | 4 +- components/custom-ui/dashboard/EventList.vue | 1 - composables/api_wrapper.ts | 2 +- 5 files changed, 155 insertions(+), 72 deletions(-) delete mode 100644 components/custom-ui/SearchBar.vue create mode 100644 components/custom-ui/SearchDialog.vue diff --git a/components/custom-ui/SearchBar.vue b/components/custom-ui/SearchBar.vue deleted file mode 100644 index aea7fa3..0000000 --- a/components/custom-ui/SearchBar.vue +++ /dev/null @@ -1,68 +0,0 @@ - - - \ No newline at end of file diff --git a/components/custom-ui/SearchDialog.vue b/components/custom-ui/SearchDialog.vue new file mode 100644 index 0000000..a6137c4 --- /dev/null +++ b/components/custom-ui/SearchDialog.vue @@ -0,0 +1,152 @@ + + + \ No newline at end of file diff --git a/components/custom-ui/dashboard/Dashboard.vue b/components/custom-ui/dashboard/Dashboard.vue index 970cc42..9ec7503 100644 --- a/components/custom-ui/dashboard/Dashboard.vue +++ b/components/custom-ui/dashboard/Dashboard.vue @@ -38,7 +38,7 @@ import Events from "~/components/custom-ui/dashboard/Events.vue"; import Profile from "~/components/custom-ui/user/Profile.vue"; import Tokens from "~/components/custom-ui/user/Tokens.vue"; import Proxies from "~/components/custom-ui/user/Proxies.vue"; -import SearchBar from "~/components/custom-ui/SearchBar.vue"; +import SearchDialog from "~/components/custom-ui/SearchDialog.vue"; import Licences from "~/components/custom-ui/dashboard/licenses/Licenses.vue"; import type {User} from '~/composables/api_wrapper' @@ -349,7 +349,7 @@ EventBus.on('spinStop', () => spinBaby.value = false) - + diff --git a/components/custom-ui/dashboard/EventList.vue b/components/custom-ui/dashboard/EventList.vue index ba7a939..8f69a68 100644 --- a/components/custom-ui/dashboard/EventList.vue +++ b/components/custom-ui/dashboard/EventList.vue @@ -2,7 +2,6 @@ import {ScrollArea} from '@/components/ui/scroll-area' import {cn} from '@/utils/shadcn' import {Badge} from '@/components/ui/badge' -import {decodeTime} from 'ulid' import {formatDate} from '~/composables/utils' import {formatDistanceToNow} from "date-fns"; diff --git a/composables/api_wrapper.ts b/composables/api_wrapper.ts index 22e6bd1..dd782fb 100644 --- a/composables/api_wrapper.ts +++ b/composables/api_wrapper.ts @@ -60,7 +60,7 @@ export type CreateGroupResponse = paths["/api/v3/groups"]["post"]["responses"][2 // Info export type GetEventsResponse = paths["/api/v3/info/events"]["get"]["responses"][200]["content"]["application/json"]; export type GetStatsResponse = paths["/api/v3/info/stats"]["get"]["responses"][200]["content"]["application/json"]; -export type SearchResponse = paths["/api/v3/info/search"]["get"]["responses"][200]["content"]["application/json"]; +export type SearchResponse = paths["/api/v3/info/search"]["get"]["responses"][200]["content"]["applicatiown/json"]; // Realms export type CreateRealmResponse = paths["/api/v3/realms"]["post"]["responses"][200]["content"]["application/json"]; From 3001deae421674ea6dd9300d0e9924c5a71c5d7b Mon Sep 17 00:00:00 2001 From: Stefan Nitz Date: Tue, 4 Feb 2025 15:13:24 +0100 Subject: [PATCH 03/10] feat: add show more results button --- components/custom-ui/SearchDialog.vue | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/components/custom-ui/SearchDialog.vue b/components/custom-ui/SearchDialog.vue index a6137c4..1bdf379 100644 --- a/components/custom-ui/SearchDialog.vue +++ b/components/custom-ui/SearchDialog.vue @@ -141,11 +141,12 @@ function splitResources(resources: (Resource & { [type: string]: GenericNodeType + From 17a3ecd591f5560aeb0043741ec97a17d329f76a Mon Sep 17 00:00:00 2001 From: Stefan Nitz Date: Tue, 4 Feb 2025 15:33:53 +0100 Subject: [PATCH 04/10] fix: catch undefined results --- components/custom-ui/SearchDialog.vue | 44 ++++++++++++++------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/components/custom-ui/SearchDialog.vue b/components/custom-ui/SearchDialog.vue index 1bdf379..c4849a4 100644 --- a/components/custom-ui/SearchDialog.vue +++ b/components/custom-ui/SearchDialog.vue @@ -11,6 +11,7 @@ const queryInput = ref('') const fetching = ref(false) const response: Ref = ref(undefined) const dialogOpen = ref(false) +// mit computed berechnen const resources: Ref = ref(undefined) function handleDialogOpenChange() { @@ -32,6 +33,11 @@ watch(queryInput, () => { const debouncedInput = debounce(async () => await searchResources(queryInput.value), 250) +function openDialog(): void { + queryInput.value = ''; + dialogOpen.value = true; +} + async function searchResources(query: string): Promise { // No need to search with empty input if (!query) { @@ -70,33 +76,32 @@ function splitResources(resources: (Resource & { [type: string]: GenericNodeType objects: [], other: [] } - console.log(resources); - console.log(response.value?.expected_hits); - for (const resource of resources) { - if (resource.type === GenericNodeType.Resource) { - switch (resource.variant) { - case ResourceVariant.Project: - result.projects.push(resource) - break; - case ResourceVariant.Folder: - result.folders.push(resource) - break; - case ResourceVariant.Object: - result.objects.push(resource) - break; + if (resources) { + for (const resource of resources) { + if (resource.type === GenericNodeType.Resource) { + switch (resource.variant) { + case ResourceVariant.Project: + result.projects.push(resource) + break; + case ResourceVariant.Folder: + result.folders.push(resource) + break; + case ResourceVariant.Object: + result.objects.push(resource) + break; + } + } else { + result.other.push(resource) } - } else { - result.other.push(resource) } } return result } -