From 281951ecd144ed396f3ea84933c791fb9ff1ecb3 Mon Sep 17 00:00:00 2001 From: akumatus Date: Fri, 21 Mar 2025 05:09:19 +0000 Subject: [PATCH] fix(core): outgoing links cannot be displayed if document refers to itself (#11046) Close [BS-2850](https://linear.app/affine-design/issue/BS-2850). ### What Changed? - After flattening the search results, filter the current document. - Remove duplicate results based on document id. --- .../docs-search/services/docs-search.ts | 31 +++++++------------ 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/packages/frontend/core/src/modules/docs-search/services/docs-search.ts b/packages/frontend/core/src/modules/docs-search/services/docs-search.ts index e97692354f..6abe9e6cf2 100644 --- a/packages/frontend/core/src/modules/docs-search/services/docs-search.ts +++ b/packages/frontend/core/src/modules/docs-search/services/docs-search.ts @@ -146,18 +146,6 @@ export class DocsSearchService extends Service { field: 'docId', match: docId, }, - // Ignore if it is a link to the current document. - { - type: 'boolean', - occur: 'must_not', - queries: [ - { - type: 'match', - field: 'refDocId', - match: docId, - }, - ], - }, { type: 'exists', field: 'refDocId', @@ -174,13 +162,18 @@ export class DocsSearchService extends Service { .pipe( switchMap(({ nodes }) => { return fromPromise(async () => { - const refs: ({ docId: string } & ReferenceParams)[] = nodes.flatMap( - node => { - const { ref } = node.fields; - return typeof ref === 'string' - ? [JSON.parse(ref)] - : ref.map(item => JSON.parse(item)); - } + const refs: ({ docId: string } & ReferenceParams)[] = Array.from( + new Map( + nodes + .flatMap(node => { + const { ref } = node.fields; + return typeof ref === 'string' + ? [JSON.parse(ref)] + : ref.map(item => JSON.parse(item)); + }) + .filter(ref => ref.docId !== docId) + .map(ref => [ref.docId, ref]) + ).values() ); const docData = await this.indexer.docIndex.getAll(