From 7baa9e43338fb0a0ccc22ebbfb791fe3a98ac014 Mon Sep 17 00:00:00 2001 From: Qjuh <76154676+Qjuh@users.noreply.github.com> Date: Sun, 14 Apr 2024 19:53:16 +0200 Subject: [PATCH] feat(website): add type field to search index to sort by (#10212) --- apps/website/src/components/ui/CmdK.tsx | 1 + .../actions/src/uploadSearchIndices/index.ts | 5 +++- packages/scripts/src/generateIndex.ts | 26 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/apps/website/src/components/ui/CmdK.tsx b/apps/website/src/components/ui/CmdK.tsx index 5b5eb48e46a0..bd9a334b96d0 100644 --- a/apps/website/src/components/ui/CmdK.tsx +++ b/apps/website/src/components/ui/CmdK.tsx @@ -95,6 +95,7 @@ export function CmdK({ dependencies }: { readonly dependencies: string[] }) { q: searchString, limit: 25, attributesToSearchOn: ['name'], + sort: ['type:asc'], })), }); setSearchResults(result.results.flatMap((res) => res.hits)); diff --git a/packages/actions/src/uploadSearchIndices/index.ts b/packages/actions/src/uploadSearchIndices/index.ts index bdf5d3b90421..ac06e5060e5e 100644 --- a/packages/actions/src/uploadSearchIndices/index.ts +++ b/packages/actions/src/uploadSearchIndices/index.ts @@ -66,7 +66,10 @@ try { await client.waitForTask(task.taskUid); } - await client.index(index.index).addDocuments(index.data); + const searchIndex = client.index(index.index); + await searchIndex.updateSettings({ sortableAttributes: ['type'] }); + + await searchIndex.addDocuments(index.data); }), ); } catch {} diff --git a/packages/scripts/src/generateIndex.ts b/packages/scripts/src/generateIndex.ts index 3fc71bc802d3..540880081e4b 100644 --- a/packages/scripts/src/generateIndex.ts +++ b/packages/scripts/src/generateIndex.ts @@ -19,6 +19,7 @@ export interface MemberJSON { name: string; path: string; summary: string | null; + type: number; } let idx = 0; @@ -89,6 +90,30 @@ export function tryResolveSummaryText(item: ApiDeclaredItem): string | null { return retVal; } +export enum SearchOrderType { + Class, + Interface, + TypeAlias, + Function, + Enum, + Variable, + Event, + Method, + Property, + MethodSignature, + PropertySignature, + EnumMember, + Package, + Namespace, + IndexSignature, + CallSignature, + Constructor, + ConstructSignature, + EntryPoint, + Model, + None, +} + export function visitNodes(item: ApiItem, tag: string) { const members: (MemberJSON & { id: number })[] = []; @@ -111,6 +136,7 @@ export function visitNodes(item: ApiItem, tag: string) { kind: member.kind, summary: tryResolveSummaryText(member) ?? '', path: generatePath(member.getHierarchy(), tag), + type: SearchOrderType[member.kind as keyof typeof SearchOrderType], }); }