diff --git a/src/hooks/useQuickStarts.ts b/src/hooks/useQuickStarts.ts index 69e1e03e..b336a42a 100644 --- a/src/hooks/useQuickStarts.ts +++ b/src/hooks/useQuickStarts.ts @@ -17,8 +17,23 @@ export type FavoriteQuickStart = { quickstartName: string; }; -const sortFnc = (q1: QuickStart, q2: QuickStart) => - q1.spec.displayName.localeCompare(q2.spec.displayName); +const DEFAULT_PRIORITY = 1000; + +const makeSortFn = + (targetBundle?: string) => (q1: QuickStart, q2: QuickStart) => { + if (targetBundle !== undefined) { + const priority1 = + q1.metadata.bundle_priority?.[targetBundle] ?? DEFAULT_PRIORITY; + const priority2 = + q2.metadata.bundle_priority?.[targetBundle] ?? DEFAULT_PRIORITY; + + // A lower priority value makes the quickstart appear earlier in the list. + if (priority1 < priority2) return -1; + if (priority1 > priority2) return 1; + } + + return q1.spec.displayName.localeCompare(q2.spec.displayName); + }; function isFavorite(quickStart: QuickStart, favorites: FavoriteQuickStart[]) { return !!favorites.find((f) => f.quickstartName === quickStart.metadata.name); @@ -41,7 +56,7 @@ const useQuickStarts = (targetBundle?: string) => { filter?.keyword || '', filter?.status?.statusFilters, allQuickStartStates || {} - ).sort(sortFnc); + ).sort(makeSortFn(targetBundle)); return filteredQuickStarts.reduce<{ bookmarks: QuickStart[]; documentation: QuickStart[];