diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/_components/command-items.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/_components/command-items.tsx
index 173fe888e50..7cdffe5bd57 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/_components/command-items.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/_components/command-items.tsx
@@ -163,3 +163,27 @@ export const MemoizedPageItem = memo(
prev.name === next.name &&
prev.shortcut === next.shortcut
)
+
+export const MemoizedIconItem = memo(
+ function IconItem({
+ value,
+ onSelect,
+ name,
+ icon: Icon,
+ }: {
+ value: string
+ onSelect: () => void
+ name: string
+ icon: ComponentType<{ className?: string }>
+ }) {
+ return (
+
+
+
+
+ {name}
+
+ )
+ },
+ (prev, next) => prev.value === next.value && prev.name === next.name && prev.icon === next.icon
+)
diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/_components/search-groups.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/_components/search-groups.tsx
index 23b04b2a11c..d8bebbbcb9a 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/_components/search-groups.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/_components/search-groups.tsx
@@ -1,7 +1,9 @@
'use client'
+import type { ComponentType } from 'react'
import { memo } from 'react'
import { Command } from 'cmdk'
+import { Database, File, Table } from '@/components/emcn/icons'
import type {
SearchBlockItem,
SearchDocItem,
@@ -11,6 +13,7 @@ import type { PageItem, TaskItem, WorkflowItem, WorkspaceItem } from '../utils'
import { GROUP_HEADING_CLASSNAME } from '../utils'
import {
MemoizedCommandItem,
+ MemoizedIconItem,
MemoizedPageItem,
MemoizedTaskItem,
MemoizedWorkflowItem,
@@ -239,3 +242,36 @@ export const PagesGroup = memo(function PagesGroup({
)
})
+
+export const TablesGroup = createIconGroup('Tables', 'table', Table)
+export const FilesGroup = createIconGroup('Files', 'file', File)
+export const KnowledgeBasesGroup = createIconGroup('Knowledge Bases', 'knowledge-base', Database)
+
+function createIconGroup(
+ heading: string,
+ prefix: string,
+ icon: ComponentType<{ className?: string }>
+) {
+ return memo(function IconGroup({
+ items,
+ onSelect,
+ }: {
+ items: TaskItem[]
+ onSelect: (item: TaskItem) => void
+ }) {
+ if (items.length === 0) return null
+ return (
+
+ {items.map((item) => (
+ onSelect(item)}
+ name={item.name}
+ icon={icon}
+ />
+ ))}
+
+ )
+ })
+}
diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/search-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/search-modal.tsx
index 95c4ee1e221..838083bec01 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/search-modal.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/search-modal.tsx
@@ -21,7 +21,10 @@ import type {
import {
BlocksGroup,
DocsGroup,
+ FilesGroup,
+ KnowledgeBasesGroup,
PagesGroup,
+ TablesGroup,
TasksGroup,
ToolOpsGroup,
ToolsGroup,
@@ -40,6 +43,9 @@ export function SearchModal({
workflows = [],
workspaces = [],
tasks = [],
+ tables = [],
+ files = [],
+ knowledgeBases = [],
isOnWorkflowPage = false,
}: SearchModalProps) {
const params = useParams()
@@ -284,6 +290,20 @@ export function SearchModal({
return filterAndSort(docs, (d) => `${d.name} docs documentation doc-${d.id}`, deferredSearch)
}, [isOnWorkflowPage, docs, deferredSearch])
+ const filteredTables = useMemo(
+ () => filterAndSort(tables, (t) => `${t.name} table-${t.id}`, deferredSearch),
+ [tables, deferredSearch]
+ )
+ const filteredFiles = useMemo(
+ () => filterAndSort(files, (f) => `${f.name} file-${f.id}`, deferredSearch),
+ [files, deferredSearch]
+ )
+ const filteredKnowledgeBases = useMemo(
+ () =>
+ filterAndSort(knowledgeBases, (kb) => `${kb.name} knowledge-base-${kb.id}`, deferredSearch),
+ [knowledgeBases, deferredSearch]
+ )
+
const filteredWorkflows = useMemo(
() => filterAndSort(workflows, (w) => `${w.name} workflow-${w.id}`, deferredSearch),
[workflows, deferredSearch]
@@ -346,6 +366,9 @@ export function SearchModal({
+
+
+
diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/utils.ts b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/utils.ts
index 52ba1488d28..ec646f1d033 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/utils.ts
+++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/search-modal/utils.ts
@@ -37,6 +37,9 @@ export interface SearchModalProps {
workflows?: WorkflowItem[]
workspaces?: WorkspaceItem[]
tasks?: TaskItem[]
+ tables?: TaskItem[]
+ files?: TaskItem[]
+ knowledgeBases?: TaskItem[]
isOnWorkflowPage?: boolean
}
diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx
index 407e47f034c..c54b9256783 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx
@@ -77,6 +77,8 @@ import {
} from '@/app/workspace/[workspaceId]/w/hooks'
import { getBrandConfig } from '@/ee/whitelabeling'
import { useFolders } from '@/hooks/queries/folders'
+import { useKnowledgeBasesQuery } from '@/hooks/queries/kb/knowledge'
+import { useTablesList } from '@/hooks/queries/tables'
import {
useDeleteTask,
useDeleteTasks,
@@ -85,6 +87,7 @@ import {
useRenameTask,
useTasks,
} from '@/hooks/queries/tasks'
+import { useWorkspaceFiles } from '@/hooks/queries/workspace-files'
import { usePermissionConfig } from '@/hooks/use-permission-config'
import { useSettingsNavigation } from '@/hooks/use-settings-navigation'
import { useTaskEvents } from '@/hooks/use-task-events'
@@ -745,6 +748,46 @@ export const Sidebar = memo(function Sidebar() {
[fetchedTasks, workspaceId]
)
+ const { data: fetchedTables = [] } = useTablesList(workspaceId)
+ const { data: fetchedFiles = [] } = useWorkspaceFiles(workspaceId)
+ const { data: fetchedKnowledgeBases = [] } = useKnowledgeBasesQuery(workspaceId)
+
+ const searchModalTables = useMemo(
+ () =>
+ permissionConfig.hideTablesTab
+ ? []
+ : fetchedTables.map((t) => ({
+ id: t.id,
+ name: t.name,
+ href: `/workspace/${workspaceId}/tables/${t.id}`,
+ })),
+ [fetchedTables, workspaceId, permissionConfig.hideTablesTab]
+ )
+
+ const searchModalFiles = useMemo(
+ () =>
+ permissionConfig.hideFilesTab
+ ? []
+ : fetchedFiles.map((f) => ({
+ id: f.id,
+ name: f.name,
+ href: `/workspace/${workspaceId}/files/${f.id}`,
+ })),
+ [fetchedFiles, workspaceId, permissionConfig.hideFilesTab]
+ )
+
+ const searchModalKnowledgeBases = useMemo(
+ () =>
+ permissionConfig.hideKnowledgeBaseTab
+ ? []
+ : fetchedKnowledgeBases.map((kb) => ({
+ id: kb.id,
+ name: kb.name,
+ href: `/workspace/${workspaceId}/knowledge/${kb.id}`,
+ })),
+ [fetchedKnowledgeBases, workspaceId, permissionConfig.hideKnowledgeBaseTab]
+ )
+
const taskIds = useMemo(() => tasks.map((t) => t.id).filter((id) => id !== 'new'), [tasks])
const { selectedTasks, handleTaskClick } = useTaskSelection({ taskIds })
@@ -1671,6 +1714,9 @@ export const Sidebar = memo(function Sidebar() {
workflows={searchModalWorkflows}
workspaces={searchModalWorkspaces}
tasks={tasks}
+ tables={searchModalTables}
+ files={searchModalFiles}
+ knowledgeBases={searchModalKnowledgeBases}
isOnWorkflowPage={!!workflowId}
/>