Skip to content

Commit 0dee553

Browse files
committed
Add generator aliases for search
1 parent c446788 commit 0dee553

File tree

4 files changed

+22
-19
lines changed

4 files changed

+22
-19
lines changed

src/app/Config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export interface ConfigGenerator {
2222
path?: string,
2323
noPath?: boolean,
2424
tags?: string[],
25+
aliases?: string[],
2526
dependency?: string,
2627
minVersion?: string,
2728
maxVersion?: string,

src/app/components/Header.tsx

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import config from '../Config.js'
55
import { useLocale, useTheme, useTitle, useVersion } from '../contexts/index.js'
66
import { cleanUrl, getGenerator, SOURCE_REPO_URL } from '../Utils.js'
77
import { FancyMenu } from './FancyMenu.jsx'
8+
import { searchGenerators } from './generator/GeneratorList.jsx'
89
import { Btn, BtnMenu, Icons, Octicon } from './index.js'
910

1011
const Themes: Record<string, keyof typeof Octicon> = {
@@ -69,15 +70,7 @@ function GeneratorTitle({ title, gen }: GeneratorTitleProps) {
6970
let results = config.generators
7071
.filter(g => !g.dependency)
7172
.map(g => ({ ...g, name: locale(`generator.${g.id}`).toLowerCase() }))
72-
if (search) {
73-
const parts = search.split(' ')
74-
results = results.filter(g => parts.some(p => g.name.includes(p))
75-
|| parts.some(p => g.tags?.some(t => t.includes(p)) ?? false))
76-
}
77-
results.sort((a, b) => a.name.localeCompare(b.name))
78-
if (search) {
79-
results.sort((a, b) => (b.name.startsWith(search) ? 1 : 0) - (a.name.startsWith(search) ? 1 : 0))
80-
}
73+
results = searchGenerators(results, search)
8174
if (results.length === 0) {
8275
return [<span class="note">{locale('generators.no_results')}</span>]
8376
}

src/app/components/generator/GeneratorList.tsx

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,9 @@ export function GeneratorList({ predicate }: Props) {
2626
}, [version, versionFilter])
2727

2828
const filteredGenerators = useMemo(() => {
29-
const query = search.split(' ').map(q => q.trim().toLowerCase()).filter(q => q.length > 0)
30-
return versionedGenerators.filter(gen => {
31-
const content = `${gen.id} ${gen.tags?.join(' ') ?? ''} ${gen.path ?? ''} ${locale(`generator.${gen.id}`).toLowerCase()}`
32-
return query.every(q => {
33-
if (q.startsWith('!')) {
34-
return q.length === 1 || !content.includes(q.slice(1))
35-
}
36-
return content.includes(q)
37-
})
38-
})
29+
const results = versionedGenerators
30+
.map(g => ({ ...g, name: locale(`generator.${g.id}`).toLowerCase() }))
31+
return searchGenerators(results, search)
3932
}, [versionedGenerators, search, locale])
4033

4134
return <div class="generator-list">
@@ -52,3 +45,18 @@ export function GeneratorList({ predicate }: Props) {
5245
</div>}
5346
</div>
5447
}
48+
49+
export function searchGenerators(generators: (ConfigGenerator & { name: string})[], search?: string) {
50+
if (search) {
51+
const parts = search.split(' ').map(q => q.trim().toLowerCase()).filter(q => q.length > 0)
52+
generators = generators.filter(g => parts.some(p => g.name.includes(p))
53+
|| parts.some(p => g.path?.includes(p) ?? false)
54+
|| parts.some(p => g.tags?.some(t => t.includes(p)) ?? false)
55+
|| parts.some(p => g.aliases?.some(a => a.includes(p)) ?? false))
56+
}
57+
generators.sort((a, b) => a.name.localeCompare(b.name))
58+
if (search) {
59+
generators.sort((a, b) => (b.name.startsWith(search) ? 1 : 0) - (a.name.startsWith(search) ? 1 : 0))
60+
}
61+
return generators
62+
}

src/config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,7 @@
587587
"url": "assets/item",
588588
"path": "items",
589589
"tags": ["assets"],
590+
"aliases": ["item model"],
590591
"minVersion": "1.21.4",
591592
"wiki": "https://minecraft.wiki/w/Items_model_definition"
592593
},

0 commit comments

Comments
 (0)