Skip to content

Commit 7b0a911

Browse files
committed
update docs image, update search modal performance
1 parent d57fa9f commit 7b0a911

File tree

2 files changed

+28
-39
lines changed

2 files changed

+28
-39
lines changed
-90.8 KB
Loading

apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/search-modal.tsx

Lines changed: 28 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,23 @@ import type {
1818
} from '@/stores/modals/search/types'
1919
import { 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+
2138
interface 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

459451
interface 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

469460
function 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

Comments
 (0)