@@ -13,7 +13,8 @@ import { checkVersion, fetchDependencyMcdoc, fetchPreset, fetchRegistries, getSn
1313import { DEPENDENCY_URI } from '../../services/Spyglass.js'
1414import { Store } from '../../Store.js'
1515import { cleanUrl , genPath } from '../../Utils.js'
16- import { Ad , Btn , BtnMenu , ErrorPanel , FileCreation , FileView , Footer , HasPreview , Octicon , PreviewPanel , ProjectPanel , SearchList , SourcePanel , TextInput , VersionSwitcher } from '../index.js'
16+ import { FancyMenu } from '../FancyMenu.jsx'
17+ import { Ad , Btn , BtnMenu , ErrorPanel , FileCreation , FileView , Footer , HasPreview , Octicon , PreviewPanel , ProjectPanel , SourcePanel , TextInput , VersionSwitcher } from '../index.js'
1718import { getRootDefault } from './McdocHelpers.js'
1819
1920export const SHARE_KEY = 'share'
@@ -199,6 +200,23 @@ export function SchemaGenerator({ gen, allowedVersions }: Props) {
199200 return entries . map ( e => e . startsWith ( 'minecraft:' ) ? e . slice ( 10 ) : e )
200201 } , [ version , gen . id ] )
201202
203+ const getPresets = useCallback ( ( search : string , close : ( ) => void ) => {
204+ if ( presets === undefined ) {
205+ return < span class = "w-80 note" > { locale ( 'loading' ) } </ span >
206+ }
207+ if ( ! presets || presets . length === 0 ) {
208+ return < span class = "w-80 note" > { locale ( 'presets.no_results' ) } </ span >
209+ }
210+ const terms = search . trim ( ) . split ( ' ' )
211+ const results = presets ?. filter ( v => terms . every ( t => v . includes ( t ) ) ) . slice ( 0 , 100 ) ?? [ ]
212+ if ( results . length === 0 ) {
213+ return < span class = "w-80 note" > { locale ( 'presets.no_results_for_query' ) } </ span >
214+ }
215+ return results . map ( r => < button class = "w-80 flex items-center cursor-pointer no-underline rounded p-1" onClick = { ( ) => { selectPreset ( r ) ; close ( ) } } >
216+ { r }
217+ </ button > )
218+ } , [ presets ] )
219+
202220 const selectPreset = ( id : string ) => {
203221 Analytics . loadPreset ( gen . id , id )
204222 setSharedSnippetId ( undefined , true )
@@ -372,9 +390,9 @@ export function SchemaGenerator({ gen, allowedVersions }: Props) {
372390 { Octicon . mortar_board }
373391 < span > { locale ( 'wiki' ) } </ span >
374392 </ a > }
375- < BtnMenu icon = "archive" label = { locale ( 'presets ' ) } relative = { false } >
376- < SearchList searchPlaceholder = { locale ( 'search' ) } noResults = { locale ( 'no_presets ' ) } values = { presets } onSelect = { selectPreset } />
377- </ BtnMenu >
393+ < FancyMenu placeholder = { locale ( 'search ' ) } getResults = { getPresets } relative = { false } class = "right-0 mt-2" >
394+ < Btn icon = "archive" label = { locale ( 'presets ' ) } />
395+ </ FancyMenu >
378396 < VersionSwitcher value = { version } onChange = { selectVersion } allowed = { allowedVersions } />
379397 < BtnMenu icon = "kebab_horizontal" tooltip = { locale ( 'more' ) } >
380398 < Btn icon = "history" label = { locale ( 'reset_default' ) } onClick = { reset } />
0 commit comments