@@ -18,6 +18,23 @@ import type {
1818} from '@/stores/modals/search/types'
1919import { useSettingsModalStore } from '@/stores/modals/settings/store'
2020
21+ function customFilter ( value : string , search : string ) : number {
22+ const searchLower = search . toLowerCase ( )
23+ const valueLower = value . toLowerCase ( )
24+
25+ if ( valueLower === searchLower ) return 1
26+ if ( valueLower . startsWith ( searchLower ) ) return 0.9
27+ if ( valueLower . includes ( searchLower ) ) return 0.7
28+
29+ const searchWords = searchLower . split ( / \s + / ) . filter ( Boolean )
30+ if ( searchWords . length > 1 ) {
31+ const allWordsMatch = searchWords . every ( ( word ) => valueLower . includes ( word ) )
32+ if ( allWordsMatch ) return 0.5
33+ }
34+
35+ return 0
36+ }
37+
2138interface SearchModalProps {
2239 open : boolean
2340 onOpenChange : ( open : boolean ) => void
@@ -62,7 +79,6 @@ export function SearchModal({
6279 const workspaceId = params . workspaceId as string
6380 const brand = useBrandConfig ( )
6481 const inputRef = useRef < HTMLInputElement > ( null )
65- const [ search , setSearch ] = useState ( '' )
6682 const [ mounted , setMounted ] = useState ( false )
6783 const openSettingsModal = useSettingsModalStore ( ( state ) => state . openModal )
6884
@@ -110,23 +126,26 @@ export function SearchModal({
110126 name : 'Settings' ,
111127 icon : Settings ,
112128 onClick : openSettingsModal ,
113- shortcut : '⌘,' ,
114129 } ,
115130 ] ,
116131 [ workspaceId , openHelpModal , openSettingsModal ]
117132 )
118133
119134 useEffect ( ( ) => {
120- if ( open ) {
121- setSearch ( '' )
122- requestAnimationFrame ( ( ) => {
123- inputRef . current ?. focus ( )
124- } )
135+ if ( open && inputRef . current ) {
136+ const nativeInputValueSetter = Object . getOwnPropertyDescriptor (
137+ window . HTMLInputElement . prototype ,
138+ 'value'
139+ ) ?. set
140+ if ( nativeInputValueSetter ) {
141+ nativeInputValueSetter . call ( inputRef . current , '' )
142+ inputRef . current . dispatchEvent ( new Event ( 'input' , { bubbles : true } ) )
143+ }
144+ inputRef . current . focus ( )
125145 }
126146 } , [ open ] )
127147
128- const handleSearchChange = useCallback ( ( value : string ) => {
129- setSearch ( value )
148+ const handleSearchChange = useCallback ( ( ) => {
130149 requestAnimationFrame ( ( ) => {
131150 const list = document . querySelector ( '[cmdk-list]' )
132151 if ( list ) {
@@ -228,28 +247,6 @@ export function SearchModal({
228247 const showToolOperations = isOnWorkflowPage && toolOperations . length > 0
229248 const showDocs = isOnWorkflowPage && docs . length > 0
230249
231- const customFilter = useCallback ( ( value : string , search : string , keywords ?: string [ ] ) => {
232- const searchLower = search . toLowerCase ( )
233- const valueLower = value . toLowerCase ( )
234-
235- if ( valueLower === searchLower ) return 1
236- if ( valueLower . startsWith ( searchLower ) ) return 0.8
237- if ( valueLower . includes ( searchLower ) ) return 0.6
238-
239- const searchWords = searchLower . split ( / \s + / ) . filter ( Boolean )
240- const allWordsMatch = searchWords . every ( ( word ) => valueLower . includes ( word ) )
241- if ( allWordsMatch && searchWords . length > 0 ) return 0.4
242-
243- if ( keywords ?. length ) {
244- const keywordsLower = keywords . join ( ' ' ) . toLowerCase ( )
245- if ( keywordsLower . includes ( searchLower ) ) return 0.3
246- const keywordWordsMatch = searchWords . every ( ( word ) => keywordsLower . includes ( word ) )
247- if ( keywordWordsMatch && searchWords . length > 0 ) return 0.2
248- }
249-
250- return 0
251- } , [ ] )
252-
253250 if ( ! mounted ) return null
254251
255252 return createPortal (
@@ -278,7 +275,6 @@ export function SearchModal({
278275 < Command label = 'Search' filter = { customFilter } >
279276 < Command . Input
280277 ref = { inputRef }
281- value = { search }
282278 autoFocus
283279 onValueChange = { handleSearchChange }
284280 placeholder = 'Search anything...'
@@ -295,7 +291,6 @@ export function SearchModal({
295291 < CommandItem
296292 key = { block . id }
297293 value = { `${ block . name } block-${ block . id } ` }
298- keywords = { [ block . description ] }
299294 onSelect = { ( ) => handleBlockSelect ( block , 'block' ) }
300295 icon = { block . icon }
301296 bgColor = { block . bgColor }
@@ -313,7 +308,6 @@ export function SearchModal({
313308 < CommandItem
314309 key = { tool . id }
315310 value = { `${ tool . name } tool-${ tool . id } ` }
316- keywords = { [ tool . description ] }
317311 onSelect = { ( ) => handleBlockSelect ( tool , 'tool' ) }
318312 icon = { tool . icon }
319313 bgColor = { tool . bgColor }
@@ -331,7 +325,6 @@ export function SearchModal({
331325 < CommandItem
332326 key = { trigger . id }
333327 value = { `${ trigger . name } trigger-${ trigger . id } ` }
334- keywords = { [ trigger . description ] }
335328 onSelect = { ( ) => handleBlockSelect ( trigger , 'trigger' ) }
336329 icon = { trigger . icon }
337330 bgColor = { trigger . bgColor }
@@ -371,7 +364,6 @@ export function SearchModal({
371364 < CommandItem
372365 key = { op . id }
373366 value = { `${ op . searchValue } operation-${ op . id } ` }
374- keywords = { op . keywords }
375367 onSelect = { ( ) => handleToolOperationSelect ( op ) }
376368 icon = { op . icon }
377369 bgColor = { op . bgColor }
@@ -458,7 +450,6 @@ const groupHeadingClassName =
458450
459451interface CommandItemProps {
460452 value : string
461- keywords ?: string [ ]
462453 onSelect : ( ) => void
463454 icon : React . ComponentType < { className ?: string } >
464455 bgColor : string
@@ -468,7 +459,6 @@ interface CommandItemProps {
468459
469460function CommandItem ( {
470461 value,
471- keywords,
472462 onSelect,
473463 icon : Icon ,
474464 bgColor,
@@ -478,7 +468,6 @@ function CommandItem({
478468 return (
479469 < Command . Item
480470 value = { value }
481- keywords = { keywords }
482471 onSelect = { onSelect }
483472 className = 'group flex h-[28px] w-full cursor-pointer items-center gap-[8px] rounded-[6px] px-[10px] text-left text-[15px] aria-selected:bg-[var(--border)] aria-selected:shadow-sm data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50'
484473 >
0 commit comments