diff --git a/apps/main/src/components/TopBar.tsx b/apps/main/src/components/TopBar.tsx index 0596e3c..d7fa8a5 100644 --- a/apps/main/src/components/TopBar.tsx +++ b/apps/main/src/components/TopBar.tsx @@ -321,7 +321,7 @@ function ProfileDropdown() { ); } -const SEARCH_ROUTES = ["/tablos", "/"]; +const SEARCH_ROUTES = ["/tablos", "/", "/tasks", "/files"]; export function TopBar() { const location = useLocation(); diff --git a/apps/main/src/pages/files.tsx b/apps/main/src/pages/files.tsx index 14289b6..1d93f5b 100644 --- a/apps/main/src/pages/files.tsx +++ b/apps/main/src/pages/files.tsx @@ -24,7 +24,7 @@ import { } from "lucide-react"; import { useRef, useState } from "react"; import { useTranslation } from "react-i18next"; -import { Link } from "react-router-dom"; +import { Link, useSearchParams } from "react-router-dom"; import { extractFolderIdFromFileName, getFileNameWithoutFolder, @@ -428,6 +428,8 @@ function FileTable({ export function FilesPage() { const { t } = useTranslation("navigation"); + const [searchParams] = useSearchParams(); + const searchQuery = searchParams.get("q")?.toLowerCase() ?? ""; const { data: tablos, isLoading: tablosLoading } = useTablosList(); const { data: allFiles, isLoading: filesLoading } = useAllTablosFileNames(); const [uploadOpen, setUploadOpen] = useState(false); @@ -440,7 +442,13 @@ export function FilesPage() { const tablosWithFiles = (tablos ?? []).filter((tablo) => { const files = filesByTabloId.get(tablo.id) ?? []; - return files.some((f) => !f.startsWith(".")); + const visibleFiles = files.filter((f) => !f.startsWith(".")); + if (searchQuery) { + return visibleFiles.some((f) => + f.toLowerCase().includes(searchQuery) || tablo.name.toLowerCase().includes(searchQuery) + ); + } + return visibleFiles.length > 0; }); return ( diff --git a/apps/main/src/pages/tasks.tsx b/apps/main/src/pages/tasks.tsx index 12a3563..ae703ac 100644 --- a/apps/main/src/pages/tasks.tsx +++ b/apps/main/src/pages/tasks.tsx @@ -22,7 +22,6 @@ import { MapIcon, PaperclipIcon, PlusIcon, - SearchIcon, Settings2Icon, UserIcon, } from "lucide-react"; @@ -65,7 +64,7 @@ export function TasksPage() { const [statusFilter, setStatusFilter] = useState("all"); const [assigneeFilter, setAssigneeFilter] = useState("all"); const [isTaskModalOpen, setIsTaskModalOpen] = useState(false); - const [searchQuery, setSearchQuery] = useState(""); + const searchQuery = searchParams.get("q") ?? ""; // Get view mode from URL params, default to "kanban" const viewMode = @@ -123,14 +122,7 @@ export function TasksPage() { } return filtered; - }, [ - allTasks, - selectedTabloId, - statusFilter, - assigneeFilter, - user.id, - searchQuery, - ]); + }, [allTasks, selectedTabloId, statusFilter, assigneeFilter, user.id, searchQuery]); // Initialize Kanban columns from filtered tasks const columns = useMemo((): KanbanColumn[] => { @@ -289,19 +281,8 @@ export function TasksPage() { })} - {/* Search + filter row */} -
-
- - setSearchQuery(e.target.value)} - className="w-full pl-10 pr-4 py-2 border border-gray-200 dark:border-gray-700 rounded-lg text-sm placeholder-gray-500 bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-purple-500" - /> -
- + {/* Filter row */} +