diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 4567a39..4281502 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1086,6 +1086,7 @@ export const App: React.FC = () => { initialBlockId={selectedBlockId} onStatsChange={refreshAll} onOpenTask={handleOpenTask} + onOpenSearch={() => setShowCommandPalette(true)} /> )} diff --git a/frontend/src/features/workspace/WorkspaceView.tsx b/frontend/src/features/workspace/WorkspaceView.tsx index 9fbbec5..d6ccaf5 100644 --- a/frontend/src/features/workspace/WorkspaceView.tsx +++ b/frontend/src/features/workspace/WorkspaceView.tsx @@ -64,6 +64,8 @@ interface WorkspaceViewProps { initialBlockId?: string | null; onStatsChange: () => void; onOpenTask?: (taskId: string) => void; + // Opens the global search (command palette); the notes sidebar has no search of its own + onOpenSearch?: () => void; } type WorkspaceSubView = 'editor' | 'tag_detail' | 'todos' | 'tags' | 'trash'; @@ -282,6 +284,7 @@ export const WorkspaceView: React.FC = ({ initialBlockId, onStatsChange, onOpenTask, + onOpenSearch, }) => { const [docs, setDocs] = useState([]); const [folders, setFolders] = useState([]); @@ -325,7 +328,6 @@ export const WorkspaceView: React.FC = ({ const [tagSearchQuery, setTagSearchQuery] = useState(''); const [tagSortBy, setTagSortBy] = useState<'count' | 'name'>('count'); - const [searchQuery, setSearchQuery] = useState(''); const [expandedFolders, setExpandedFolders] = useState>(() => { try { const saved = localStorage.getItem('mindsift:workspace_expanded_folders'); @@ -868,17 +870,6 @@ export const WorkspaceView: React.FC = ({ return Array.from(set).sort(); }, [docs, folders, sharedFolders]); - const filteredDocs = useMemo(() => { - const q = searchQuery.trim().toLowerCase(); - if (!q) return docs; - return docs.filter( - (d) => - d.title.toLowerCase().includes(q) || - (d.content && d.content.toLowerCase().includes(q)) || - (d.tags && d.tags.some((t) => t.toLowerCase().includes(q))) - ); - }, [docs, searchQuery]); - const folderTree = useMemo(() => { const rootNodes: FolderTreeNode[] = []; const nodeMap = new Map(); @@ -906,7 +897,7 @@ export const WorkspaceView: React.FC = ({ const sharedFolderObj = sharedFolders.find( (sf) => sf.mountPath === p || sf.name === p ); - const folderDocs = filteredDocs.filter((d) => d.folderPath === p); + const folderDocs = docs.filter((d) => d.folderPath === p); const node: FolderTreeNode = { name: leafName, @@ -931,16 +922,16 @@ export const WorkspaceView: React.FC = ({ } return rootNodes; - }, [allFolderPaths, filteredDocs, sharedFolders]); + }, [allFolderPaths, docs, sharedFolders]); const pinnedDocs = useMemo( - () => filteredDocs.filter((d) => d.isPinned), - [filteredDocs] + () => docs.filter((d) => d.isPinned), + [docs] ); const rootDocs = useMemo( - () => filteredDocs.filter((d) => !d.folderPath), - [filteredDocs] + () => docs.filter((d) => !d.folderPath), + [docs] ); // Global To-Dos rollup collections @@ -1357,32 +1348,25 @@ export const WorkspaceView: React.FC = ({ - {/* Search Input */} -
- - setSearchQuery(e.target.value)} - placeholder="Notizen oder #Tags suchen…" - className="input-field w-full pl-8 pr-6 py-1 text-xs" - /> - {searchQuery && ( - - )} -
+ {/* Opens the global full-text search, which also finds the content of every bullet */} + {onOpenSearch && ( + + )} {/* Scrollable Navigation Tree */}
{/* Pinned Notes */} - {pinnedDocs.length > 0 && !searchQuery && ( + {pinnedDocs.length > 0 && (