Fetch markdown content if specified in search API
This commit is contained in:
@ -388,6 +388,7 @@ export const searchPages = async (
|
||||
termFilters,
|
||||
matchFilters,
|
||||
ids,
|
||||
includeContent,
|
||||
} = args
|
||||
// default order is descending
|
||||
const sortOrder = sort?.order || SortOrder.DESCENDING
|
||||
@ -424,7 +425,7 @@ export const searchPages = async (
|
||||
from,
|
||||
size,
|
||||
_source: {
|
||||
excludes: ['originalHtml', 'content'],
|
||||
excludes: includeContent ? [] : ['originalHtml', 'content'],
|
||||
},
|
||||
}
|
||||
|
||||
@ -497,7 +498,7 @@ export const searchPages = async (
|
||||
return [
|
||||
response.body.hits.hits.map((hit: { _source: Page; _id: string }) => ({
|
||||
...hit._source,
|
||||
content: '',
|
||||
content: includeContent ? hit._source.content : '',
|
||||
id: hit._id,
|
||||
})),
|
||||
response.body.hits.total.value,
|
||||
|
||||
@ -286,6 +286,7 @@ export interface SearchItem {
|
||||
siteName?: string
|
||||
siteIcon?: string
|
||||
recommendations?: Recommendation[]
|
||||
content?: string
|
||||
}
|
||||
|
||||
const keys = ['_id', 'url', 'slug', 'userId', 'uploadFileId', 'state'] as const
|
||||
@ -315,4 +316,5 @@ export interface PageSearchArgs {
|
||||
includeDeleted?: boolean
|
||||
ids?: string[]
|
||||
recommendedBy?: string
|
||||
includeContent?: boolean
|
||||
}
|
||||
|
||||
@ -1737,6 +1737,8 @@ export type QueryRulesArgs = {
|
||||
export type QuerySearchArgs = {
|
||||
after?: InputMaybe<Scalars['String']>;
|
||||
first?: InputMaybe<Scalars['Int']>;
|
||||
format?: InputMaybe<Scalars['String']>;
|
||||
includeContent?: InputMaybe<Scalars['Boolean']>;
|
||||
query?: InputMaybe<Scalars['String']>;
|
||||
};
|
||||
|
||||
@ -2128,6 +2130,7 @@ export type SearchItem = {
|
||||
__typename?: 'SearchItem';
|
||||
annotation?: Maybe<Scalars['String']>;
|
||||
author?: Maybe<Scalars['String']>;
|
||||
content?: Maybe<Scalars['String']>;
|
||||
contentReader: ContentReader;
|
||||
createdAt: Scalars['Date'];
|
||||
description?: Maybe<Scalars['String']>;
|
||||
@ -5174,6 +5177,7 @@ export type SearchErrorResolvers<ContextType = ResolverContext, ParentType exten
|
||||
export type SearchItemResolvers<ContextType = ResolverContext, ParentType extends ResolversParentTypes['SearchItem'] = ResolversParentTypes['SearchItem']> = {
|
||||
annotation?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
||||
author?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
||||
content?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
||||
contentReader?: Resolver<ResolversTypes['ContentReader'], ParentType, ContextType>;
|
||||
createdAt?: Resolver<ResolversTypes['Date'], ParentType, ContextType>;
|
||||
description?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
||||
|
||||
@ -1219,7 +1219,7 @@ type Query {
|
||||
recentSearches: RecentSearchesResult!
|
||||
reminder(linkId: ID!): ReminderResult!
|
||||
rules(enabled: Boolean): RulesResult!
|
||||
search(after: String, first: Int, query: String): SearchResult!
|
||||
search(after: String, first: Int, format: String, includeContent: Boolean, query: String): SearchResult!
|
||||
sendInstallInstructions: SendInstallInstructionsResult!
|
||||
sharedArticle(selectedHighlightId: String, slug: String!, username: String!): SharedArticleResult!
|
||||
subscriptions(sort: SortParams): SubscriptionsResult!
|
||||
@ -1548,6 +1548,7 @@ enum SearchErrorCode {
|
||||
type SearchItem {
|
||||
annotation: String
|
||||
author: String
|
||||
content: String
|
||||
contentReader: ContentReader!
|
||||
createdAt: Date!
|
||||
description: String
|
||||
|
||||
@ -874,6 +874,7 @@ export const searchResolver = authorized<
|
||||
size: first + 1, // fetch one more item to get next cursor
|
||||
sort: searchQuery.sortParams,
|
||||
includePending: true,
|
||||
includeContent: params.includeContent ?? false,
|
||||
...searchQuery,
|
||||
},
|
||||
claims.uid
|
||||
@ -895,6 +896,11 @@ export const searchResolver = authorized<
|
||||
if (siteIcon && !isBase64Image(siteIcon)) {
|
||||
siteIcon = createImageProxyUrl(siteIcon, 128, 128)
|
||||
}
|
||||
|
||||
if (params.includeContent && params.format === 'markdown' && r.content) {
|
||||
r.content = htmlToMarkdown(r.content)
|
||||
}
|
||||
|
||||
return {
|
||||
node: {
|
||||
...r,
|
||||
|
||||
@ -1550,6 +1550,7 @@ const schema = gql`
|
||||
siteIcon: String
|
||||
recommendations: [Recommendation!]
|
||||
wordsCount: Int
|
||||
content: String
|
||||
}
|
||||
|
||||
type SearchItemEdge {
|
||||
@ -2453,7 +2454,13 @@ const schema = gql`
|
||||
newsletterEmails: NewsletterEmailsResult!
|
||||
reminder(linkId: ID!): ReminderResult!
|
||||
labels: LabelsResult!
|
||||
search(after: String, first: Int, query: String): SearchResult!
|
||||
search(
|
||||
after: String
|
||||
first: Int
|
||||
query: String
|
||||
includeContent: Boolean
|
||||
format: String
|
||||
): SearchResult!
|
||||
subscriptions(sort: SortParams): SubscriptionsResult!
|
||||
sendInstallInstructions: SendInstallInstructionsResult!
|
||||
webhooks: WebhooksResult!
|
||||
|
||||
Reference in New Issue
Block a user