add typeahead api implementation

This commit is contained in:
Hongbo Wu
2022-07-12 22:57:20 +08:00
committed by Jackson Harper
parent dc9523e522
commit 3a1f38a6f7
5 changed files with 33 additions and 2 deletions

View File

@ -1354,6 +1354,7 @@ export type QuerySubscriptionsArgs = {
export type QueryTypeaheadArgs = {
query: Scalars['String'];
size?: InputMaybe<Scalars['Int']>;
};

View File

@ -924,7 +924,7 @@ type Query {
sendInstallInstructions: SendInstallInstructionsResult!
sharedArticle(selectedHighlightId: String, slug: String!, username: String!): SharedArticleResult!
subscriptions(sort: SortParams): SubscriptionsResult!
typeahead(query: String!): TypeaheadResult!
typeahead(query: String!, size: Int): TypeaheadResult!
user(userId: ID, username: String): UserResult!
users: UsersResult!
validateUsername(username: String!): Boolean!

View File

@ -22,6 +22,7 @@ import {
QueryArticleArgs,
QueryArticlesArgs,
QuerySearchArgs,
QueryTypeaheadArgs,
ResolverFn,
SaveArticleReadingProgressError,
SaveArticleReadingProgressErrorCode,
@ -35,6 +36,9 @@ import {
SetShareArticleError,
SetShareArticleErrorCode,
SetShareArticleSuccess,
TypeaheadError,
TypeaheadErrorCode,
TypeaheadSuccess,
} from '../../generated/graphql'
/* eslint-disable @typescript-eslint/no-explicit-any */
import { Merge } from '../../util'
@ -82,6 +86,7 @@ import {
deletePage,
getPageById,
getPageByParam,
searchAsYouType,
searchPages,
updatePage,
} from '../../elastic/pages'
@ -889,3 +894,25 @@ export const searchResolver = authorized<
},
}
})
export const typeaheadResolver = authorized<
TypeaheadSuccess,
TypeaheadError,
QueryTypeaheadArgs
>(async (_obj, { query, size }, { claims }) => {
if (!claims?.uid) {
return { errorCodes: [TypeaheadErrorCode.Unauthorized] }
}
analytics.track({
userId: claims.uid,
event: 'typeahead',
properties: {
env: env.server.apiEnv,
query,
size,
},
})
return { items: await searchAsYouType(claims.uid, query, size || undefined) }
})

View File

@ -76,6 +76,7 @@ import {
signupResolver,
subscribeResolver,
subscriptionsResolver,
typeaheadResolver,
unsubscribeResolver,
updateHighlightResolver,
updateLabelResolver,
@ -188,6 +189,7 @@ export const functionResolvers = {
webhooks: webhooksResolver,
webhook: webhookResolver,
apiKeys: apiKeysResolver,
typeahead: typeaheadResolver,
},
User: {
async sharedArticles(
@ -589,4 +591,5 @@ export const functionResolvers = {
...resultResolveTypeResolver('ApiKeys'),
...resultResolveTypeResolver('RevokeApiKey'),
...resultResolveTypeResolver('DeleteAccount'),
...resultResolveTypeResolver('Typeahead'),
}

View File

@ -1896,7 +1896,7 @@ const schema = gql`
webhooks: WebhooksResult!
webhook(id: ID!): WebhookResult!
apiKeys: ApiKeysResult!
typeahead(query: String!): TypeaheadResult!
typeahead(query: String!, size: Int): TypeaheadResult!
}
`