From 7c8fe4ba395ba4a59af56dfc8d5c973edeebf099 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Tue, 12 Jul 2022 10:24:29 -0700 Subject: [PATCH] Update UX of kbar, implement typeahead search --- .../networking/queries/typeaheadSearch.tsx | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 packages/web/lib/networking/queries/typeaheadSearch.tsx diff --git a/packages/web/lib/networking/queries/typeaheadSearch.tsx b/packages/web/lib/networking/queries/typeaheadSearch.tsx new file mode 100644 index 000000000..531839174 --- /dev/null +++ b/packages/web/lib/networking/queries/typeaheadSearch.tsx @@ -0,0 +1,57 @@ +import { gql } from 'graphql-request' +import { gqlFetcher } from '../networkHelpers' +import { LibraryItemsData } from './useGetLibraryItemsQuery' + +export type LibraryItemsQueryInput = { + limit?: number + searchQuery?: string +} + +export type TypeaheadSearchItemsData = { + typeaheadSearch: SearchItems +} + +export type SearchItems = { + items: SearchItem[] +} + +export type SearchItem = { + id: string + title: string + slug: string +} + +export async function typeaheadSearchQuery({ + limit = 10, + searchQuery, +}: LibraryItemsQueryInput): Promise { + const query = gql` + query TypeaheadSearch($query: String!, $size: Int) { + typeaheadSearch(query: $query, size: $size) { + ... on TypeaheadSearchSuccess { + items { + id + title + slug + } + } + ... on TypeaheadSearchError { + errorCodes + } + } + } + ` + + const variables = { + first: limit, + query: searchQuery, + } + + try { + const data = (await gqlFetcher(query, {...variables})) + return data as TypeaheadSearchItemsData || undefined; + } catch (error) { + console.log('search error', error) + return undefined + } +}