diff --git a/web/src/app/(app)/workspaces/page.tsx b/web/src/app/(app)/workspaces/page.tsx index 2f574fb..9a75850 100644 --- a/web/src/app/(app)/workspaces/page.tsx +++ b/web/src/app/(app)/workspaces/page.tsx @@ -9,6 +9,7 @@ import type { NoteSummary, WorkspaceSummary } from "@/lib/types"; export default function WorkspacesPage() { const [notes, setNotes] = useState([]); const [workspaces, setWorkspaces] = useState([]); + const [query, setQuery] = useState(""); const [error, setError] = useState(null); useEffect(() => { @@ -52,6 +53,31 @@ export default function WorkspacesPage() { }, ]; + const filteredWorkspaces = useMemo(() => { + const normalized = query.trim().toLowerCase(); + if (!normalized) { + return workspaces; + } + + return workspaces.filter((workspace) => { + const workspaceNotes = notesByWorkspace.get(workspace.id) ?? []; + + return ( + workspace.name.toLowerCase().includes(normalized) || + workspace.description.toLowerCase().includes(normalized) || + workspace.owner.toLowerCase().includes(normalized) || + workspace.visibility.toLowerCase().includes(normalized) || + workspace.tags.some((tag) => tag.toLowerCase().includes(normalized)) || + workspaceNotes.some( + (note) => + note.title.toLowerCase().includes(normalized) || + note.excerpt.toLowerCase().includes(normalized) || + note.tags.some((tag) => tag.toLowerCase().includes(normalized)), + ) + ); + }); + }, [notesByWorkspace, query, workspaces]); + return ( setQuery(event.target.value)} />
owner:any @@ -94,7 +122,7 @@ export default function WorkspacesPage() { ) : null}
- {workspaces.map((workspace) => { + {filteredWorkspaces.map((workspace) => { const workspaceNotes = notesByWorkspace.get(workspace.id) ?? []; return (