Skip to content

Commit f1d973f

Browse files
committed
feat(console): integrate sorting into spaces list
1 parent f83b7eb commit f1d973f

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

packages/console/src/app/page.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import { SpacesList } from '@/components/SpacesList'
1010
import { UpgradePrompt } from '@/components/UpgradePrompt'
1111
import { usePrivateSpacesAccess } from '@/hooks/usePrivateSpacesAccess'
1212
import { useFilteredSpaces } from '@/hooks/useFilteredSpaces'
13+
import { useSpaceSort } from '@/hooks/useSpaceSort'
14+
import { SpaceSortDropdown } from '@/components/SpaceSortDropdown'
1315
import { NoticeBanner } from '@/components/NoticeBanner'
1416
import { noticeConfig } from '@/config/notice'
1517

@@ -25,7 +27,8 @@ export function SpacePage() {
2527
const [activeTab, setActiveTab] = useState<'public' | 'private'>('public')
2628
const [{ spaces }] = useW3()
2729
const { canAccessPrivateSpaces, planLoading, shouldShowPrivateSpacesTab } = usePrivateSpacesAccess()
28-
const { publicSpaces, privateSpaces, hasHiddenPrivateSpaces } = useFilteredSpaces()
30+
const { sortOption, setSortOption } = useSpaceSort()
31+
const { publicSpaces, privateSpaces, hasHiddenPrivateSpaces } = useFilteredSpaces(sortOption)
2932

3033
if (spaces.length === 0) {
3134
return <div></div>
@@ -58,6 +61,9 @@ export function SpacePage() {
5861
showPrivateTab={shouldShowPrivateSpacesTab}
5962
privateTabLocked={!canAccessPrivateSpaces}
6063
/>
64+
<div className="mb-4">
65+
<SpaceSortDropdown sortOption={sortOption} onSortChange={setSortOption} />
66+
</div>
6167
{activeTab === 'public' && (
6268
<SpacesList spaces={publicSpaces} type="public" />
6369
)}

packages/console/src/components/SpacesTabNavigation.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export function SpacesTabNavigation({
2626
}
2727

2828
return (
29-
<div className="flex border-b border-gray-200 mb-6">
29+
<div className="flex border-b border-gray-200">
3030
<button
3131
onClick={() => onTabChange('public')}
3232
className={`flex items-center gap-2 px-4 py-2 border-b-2 transition-colors ${

packages/console/src/hooks/useFilteredSpaces.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { useW3 } from '@storacha/ui-react'
22
import { usePrivateSpacesAccess } from './usePrivateSpacesAccess'
3+
import { sortSpaces, type SortOption } from './useSpaceSort'
34

4-
export const useFilteredSpaces = () => {
5+
export const useFilteredSpaces = (sortOption: SortOption = 'newest') => {
56
const [{ spaces }] = useW3()
67
const { canAccessPrivateSpaces } = usePrivateSpacesAccess()
78
const allPublicSpaces = spaces.filter(s => s.access.type === 'public')
@@ -10,9 +11,14 @@ export const useFilteredSpaces = () => {
1011
// but they're still in the backend and will reappear if user upgrades to paid plan
1112
const visiblePrivateSpaces = canAccessPrivateSpaces ? allPrivateSpaces : []
1213
const hiddenPrivateSpaces = canAccessPrivateSpaces ? [] : allPrivateSpaces
14+
15+
// Apply sorting to filtered spaces
16+
const sortedPublicSpaces = sortSpaces(allPublicSpaces, sortOption)
17+
const sortedPrivateSpaces = sortSpaces(visiblePrivateSpaces, sortOption)
18+
1319
return {
14-
publicSpaces: allPublicSpaces,
15-
privateSpaces: visiblePrivateSpaces,
20+
publicSpaces: sortedPublicSpaces,
21+
privateSpaces: sortedPrivateSpaces,
1622
hiddenPrivateSpaces, // For debugging/admin purposes
1723
hasHiddenPrivateSpaces: hiddenPrivateSpaces.length > 0
1824
}

0 commit comments

Comments
 (0)