From d65176fb84a9b848734a182aadcd70a4a8423efe Mon Sep 17 00:00:00 2001 From: Andrey Sobolev Date: Sun, 20 Oct 2024 00:47:07 +0700 Subject: [PATCH] UBERF-8516: Stable mentions popup (#6993) Signed-off-by: Andrey Sobolev --- models/contact/src/index.ts | 9 ++++++--- models/controlled-documents/src/index.ts | 3 ++- models/document/src/index.ts | 3 ++- models/drive/src/index.ts | 6 ++++-- models/recruit/src/index.ts | 6 ++++-- models/tracker/src/index.ts | 3 ++- packages/presentation/src/search.ts | 13 ++++++++++--- packages/presentation/src/types.ts | 2 ++ services/github/model-github/src/index.ts | 3 ++- 9 files changed, 34 insertions(+), 14 deletions(-) diff --git a/models/contact/src/index.ts b/models/contact/src/index.ts index e7772d1147..08e06f05d8 100644 --- a/models/contact/src/index.ts +++ b/models/contact/src/index.ts @@ -860,7 +860,8 @@ export function createModel (builder: Builder): void { title: contact.string.Employees, query: contact.completion.EmployeeQuery, context: ['search', 'mention'], - classToSearch: contact.mixin.Employee + classToSearch: contact.mixin.Employee, + priority: 1000 }, contact.completion.EmployeeCategory ) @@ -874,7 +875,8 @@ export function createModel (builder: Builder): void { title: contact.string.People, query: contact.completion.PersonQuery, context: ['search', 'spotlight'], - classToSearch: contact.class.Person + classToSearch: contact.class.Person, + priority: 900 }, contact.completion.PersonCategory ) @@ -888,7 +890,8 @@ export function createModel (builder: Builder): void { title: contact.string.Organizations, query: contact.completion.OrganizationQuery, context: ['search', 'mention', 'spotlight'], - classToSearch: contact.class.Organization + classToSearch: contact.class.Organization, + priority: 800 }, contact.completion.OrganizationCategory ) diff --git a/models/controlled-documents/src/index.ts b/models/controlled-documents/src/index.ts index 528dfa2fcd..14f81efa24 100644 --- a/models/controlled-documents/src/index.ts +++ b/models/controlled-documents/src/index.ts @@ -908,7 +908,8 @@ export function defineSearch (builder: Builder): void { label: documents.string.SearchDocument, query: documents.completion.DocumentMetaQuery, context: ['search', 'mention', 'spotlight'], - classToSearch: documents.class.DocumentMeta + classToSearch: documents.class.DocumentMeta, + priority: 800 }, documents.completion.DocumentMetaCategory ) diff --git a/models/document/src/index.ts b/models/document/src/index.ts index 6fe9c9db38..6a51aaca3c 100644 --- a/models/document/src/index.ts +++ b/models/document/src/index.ts @@ -492,7 +492,8 @@ function defineDocument (builder: Builder): void { label: document.string.SearchDocument, query: document.completion.DocumentQuery, context: ['search', 'mention', 'spotlight'], - classToSearch: document.class.Document + classToSearch: document.class.Document, + priority: 800 }, document.completion.DocumentQueryCategory ) diff --git a/models/drive/src/index.ts b/models/drive/src/index.ts index c262462c2e..c4d35d18b8 100644 --- a/models/drive/src/index.ts +++ b/models/drive/src/index.ts @@ -444,7 +444,8 @@ function defineFolder (builder: Builder): void { label: presentation.string.Search, query: drive.completion.FolderQuery, context: ['search', 'mention', 'spotlight'], - classToSearch: drive.class.Folder + classToSearch: drive.class.Folder, + priority: 700 }, drive.completion.FolderCategory ) @@ -594,7 +595,8 @@ function defineFile (builder: Builder): void { label: presentation.string.Search, query: drive.completion.FileQuery, context: ['search', 'mention', 'spotlight'], - classToSearch: drive.class.File + classToSearch: drive.class.File, + priority: 600 }, drive.completion.FileCategory ) diff --git a/models/recruit/src/index.ts b/models/recruit/src/index.ts index d0ec049ac2..8d0a97046f 100644 --- a/models/recruit/src/index.ts +++ b/models/recruit/src/index.ts @@ -1048,7 +1048,8 @@ export function createModel (builder: Builder): void { title: recruit.string.Applications, query: recruit.completion.ApplicationQuery, context: ['search', 'mention', 'spotlight'], - classToSearch: recruit.class.Applicant + classToSearch: recruit.class.Applicant, + priority: 500 }, recruit.completion.ApplicationCategory ) @@ -1062,7 +1063,8 @@ export function createModel (builder: Builder): void { title: recruit.string.Vacancies, query: recruit.completion.VacancyQuery, context: ['search', 'mention', 'spotlight'], - classToSearch: recruit.class.Vacancy + classToSearch: recruit.class.Vacancy, + priority: 550 }, recruit.completion.VacancyCategory ) diff --git a/models/tracker/src/index.ts b/models/tracker/src/index.ts index cf5e11bc30..227d794db4 100644 --- a/models/tracker/src/index.ts +++ b/models/tracker/src/index.ts @@ -602,7 +602,8 @@ export function createModel (builder: Builder): void { title: tracker.string.Issues, query: tracker.completion.IssueQuery, context: ['search', 'mention', 'spotlight'], - classToSearch: tracker.class.Issue + classToSearch: tracker.class.Issue, + priority: 300 }, tracker.completion.IssueCategory ) diff --git a/packages/presentation/src/search.ts b/packages/presentation/src/search.ts index 113882b907..0b49f5009e 100644 --- a/packages/presentation/src/search.ts +++ b/packages/presentation/src/search.ts @@ -98,9 +98,14 @@ async function doFulltextSearch ( } return sections.sort((a, b) => { - const maxScoreA = Math.max(...(a?.items ?? []).map((obj) => obj?.score ?? 0)) - const maxScoreB = Math.max(...(b?.items ?? []).map((obj) => obj?.score ?? 0)) - return maxScoreB - maxScoreA + const ac = categories.indexOf(a.category) + const bc = categories.indexOf(b.category) + if (ac === bc) { + const maxScoreA = Math.max(...(a?.items ?? []).map((obj) => obj?.score ?? 0)) + const maxScoreB = Math.max(...(b?.items ?? []).map((obj) => obj?.score ?? 0)) + return maxScoreB - maxScoreA + } + return ac - bc }) } @@ -114,6 +119,8 @@ export async function searchFor ( let categories = categoriesByContext.get(context) if (categories === undefined) { categories = await client.findAll(plugin.class.ObjectSearchCategory, { context }) + + categories.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0)) categoriesByContext.set(context, categories) } diff --git a/packages/presentation/src/types.ts b/packages/presentation/src/types.ts index fad908bd4b..9e9a09b5f2 100644 --- a/packages/presentation/src/types.ts +++ b/packages/presentation/src/types.ts @@ -72,6 +72,8 @@ export interface ObjectSearchCategory extends Doc { // Query for documents with pattern query: Resource classToSearch?: Ref> + + priority?: number } export interface ComponentExt { diff --git a/services/github/model-github/src/index.ts b/services/github/model-github/src/index.ts index 203469cc1f..11441f7dba 100644 --- a/services/github/model-github/src/index.ts +++ b/services/github/model-github/src/index.ts @@ -988,7 +988,8 @@ export function createModel (builder: Builder): void { label: github.string.PullRequests, query: tracker.completion.IssueQuery, context: ['search', 'mention', 'spotlight'], - classToSearch: github.class.GithubPullRequest + classToSearch: github.class.GithubPullRequest, + priority: 280 }, github.completion.PullRequestCategory )