diff options
| author | Maze Winther <mazewinther@gmail.com> | 2025-07-17 13:45:12 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2025-07-17 13:45:12 +0200 |
| commit | b18a48b58675c0b9b7542ee045215b235517bed2 (patch) | |
| tree | 5306a1368bd4f7430c270b0da2d12ae5debe6d3e /apps/web/src/app | |
| parent | 9d5707d5fdd0e6a47622df6d9dda6db2e88f266f (diff) | |
| download | opencut-b18a48b58675c0b9b7542ee045215b235517bed2.tar.gz | |
refactor: move sorting logic to project store
Diffstat (limited to 'apps/web/src/app')
| -rw-r--r-- | apps/web/src/app/projects/page.tsx | 34 |
1 files changed, 4 insertions, 30 deletions
diff --git a/apps/web/src/app/projects/page.tsx b/apps/web/src/app/projects/page.tsx index e68c70c4..04270aee 100644 --- a/apps/web/src/app/projects/page.tsx +++ b/apps/web/src/app/projects/page.tsx @@ -45,6 +45,7 @@ export default function ProjectsPage() { isLoading, isInitialized, deleteProject, + getFilteredAndSortedProjects, } = useProjectStore(); const router = useRouter(); const [isSelectionMode, setIsSelectionMode] = useState(false); @@ -73,7 +74,7 @@ export default function ProjectsPage() { const handleSelectAll = (checked: boolean) => { if (checked) { - setSelectedProjects(new Set(filteredProjects.map((p) => p.id))); + setSelectedProjects(new Set(sortedProjects.map((p) => p.id))); } else { setSelectedProjects(new Set()); } @@ -93,40 +94,13 @@ export default function ProjectsPage() { setIsBulkDeleteDialogOpen(false); }; - const filteredProjects = savedProjects.filter((project) => - project.name.toLowerCase().includes(searchQuery.toLowerCase()) - ); - - const sortedProjects = [...filteredProjects].sort((a, b) => { - const [key, order] = sortOption.split("-"); - - if (key !== "createdAt" && key !== "name") { - console.warn(`Invalid sort key: ${key}`); - return 0; - } - - const aValue = a[key]; - const bValue = b[key]; - - if (aValue === undefined || bValue === undefined) return 0; - - if (order === "asc") { - if (aValue < bValue) return -1; - if (aValue > bValue) return 1; - return 0; - } else { - if (aValue > bValue) return -1; - if (aValue < bValue) return 1; - return 0; - } - }); + const sortedProjects = getFilteredAndSortedProjects(searchQuery, sortOption); const allSelected = sortedProjects.length > 0 && selectedProjects.size === sortedProjects.length; const someSelected = - selectedProjects.size > 0 && - selectedProjects.size < sortedProjects.length; + selectedProjects.size > 0 && selectedProjects.size < sortedProjects.length; return ( <div className="min-h-screen bg-background"> |
