diff --git a/src/app/components/generator/GeneratorList.tsx b/src/app/components/generator/GeneratorList.tsx
index 2afd20cb..6c199f54 100644
--- a/src/app/components/generator/GeneratorList.tsx
+++ b/src/app/components/generator/GeneratorList.tsx
@@ -8,8 +8,9 @@ import { GeneratorCard, TextInput, VersionSwitcher } from '../index.js'
interface Props {
path?: string,
predicate?: (gen: ConfigGenerator) => boolean | undefined,
+ compare?: (first: ConfigGenerator, second: ConfigGenerator) => number,
}
-export function GeneratorList({ predicate }: Props) {
+export function GeneratorList({ predicate , compare }: Props) {
const { locale } = useLocale()
const { version, changeVersion } = useVersion()
@@ -28,7 +29,7 @@ export function GeneratorList({ predicate }: Props) {
const filteredGenerators = useMemo(() => {
const results = versionedGenerators
.map(g => ({ ...g, name: locale(`generator.${g.id}`).toLowerCase() }))
- return searchGenerators(results, search)
+ return searchGenerators(results, search, compare)
}, [versionedGenerators, search, locale])
return
@@ -46,7 +47,7 @@ export function GeneratorList({ predicate }: Props) {
}
-export function searchGenerators(generators: (ConfigGenerator & { name: string})[], search?: string) {
+export function searchGenerators(generators: (ConfigGenerator & { name: string})[], search?: string, compare?: (first: ConfigGenerator, second: ConfigGenerator) => number) {
if (search) {
const parts = search.split(' ').map(q => q.trim().toLowerCase()).filter(q => q.length > 0)
generators = generators.filter(g => parts.some(p => g.name.includes(p))
@@ -54,7 +55,10 @@ export function searchGenerators(generators: (ConfigGenerator & { name: string})
|| parts.some(p => g.tags?.some(t => t.includes(p)) ?? false)
|| parts.some(p => g.aliases?.some(a => a.includes(p)) ?? false))
}
- generators.sort((a, b) => a.name.localeCompare(b.name))
+ generators.sort((a, b) => {
+ const compared = compare ? compare(a, b) : 0
+ return compared == 0 ? a.name.localeCompare(b.name) : compared
+ })
if (search) {
generators.sort((a, b) => (b.name.startsWith(search) ? 1 : 0) - (a.name.startsWith(search) ? 1 : 0))
}
diff --git a/src/app/pages/Partners.tsx b/src/app/pages/Partners.tsx
index a2ba1b42..2061c5ee 100644
--- a/src/app/pages/Partners.tsx
+++ b/src/app/pages/Partners.tsx
@@ -10,7 +10,10 @@ export function Partners({}: Props) {
return
- gen.tags?.includes('partners')} />
+ gen.tags?.includes('partners')} compare={(f, s) => {
+ // Compares by dependency but missing dependency will be treated last
+ return (s.dependency ?? "").localeCompare(f.dependency ?? "") * -1
+ }}/>