Skip to content

Commit cb61792

Browse files
committed
fix: repo limit now reads from user tier, not hardcoded free constant
Bug: Add Repository button used MAX_FREE_REPOS (hardcoded to 1) for ALL users. Enterprise users with 3 repos hit 3 >= 1 and got blocked. Fix: RepoListView now takes maxRepos prop from useUserUsage hook. DashboardHome derives maxRepos from usage?.repositories?.limit. Free gets 1, Pro gets 5, Enterprise gets 10 -- from the backend. Also fixed GitHubRepoSelector maxSelectable to use same dynamic limit. Removed MAX_FREE_REPOS import from both DashboardHome and RepoListView.
1 parent 8cf0589 commit cb61792

2 files changed

Lines changed: 8 additions & 5 deletions

File tree

frontend/src/components/dashboard/DashboardHome.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { AnimatePresence } from 'framer-motion'
77
import { toast } from 'sonner'
88
import { useAuth } from '../../contexts/AuthContext'
99
import { useRepos, useUserUsage } from '../../hooks/useCachedQuery'
10-
import { API_URL, MAX_FREE_REPOS } from '../../config/api'
10+
import { API_URL } from '../../config/api'
1111
import { extractErrorMessage, isUpgradeError } from '../../lib/api-errors'
1212
import { RepoListView } from './RepoListView'
1313
import { RepoDetailView } from './RepoDetailView'
@@ -24,6 +24,7 @@ export function DashboardHome() {
2424
const [searchParams, setSearchParams] = useSearchParams()
2525
const { data: repos = [], isLoading: reposLoading, invalidate: refreshRepos } = useRepos(session?.access_token)
2626
const { data: usage } = useUserUsage(session?.access_token, session?.user?.id)
27+
const maxRepos = usage?.repositories?.limit ?? 1
2728

2829
const [selectedRepo, setSelectedRepo] = useState<string | null>(null)
2930
const [activeTab, setActiveTab] = useState<RepoTab>('overview')
@@ -223,6 +224,7 @@ export function DashboardHome() {
223224
loading={loading}
224225
reposLoading={reposLoading}
225226
selectedRepo={selectedRepo}
227+
maxRepos={maxRepos}
226228
onSelectRepo={(id) => { setSelectedRepo(id); setActiveTab('overview') }}
227229
onAddClick={() => setShowAddForm(true)}
228230
onGitHubClick={() => setShowGitHubSelector(true)}
@@ -280,7 +282,7 @@ export function DashboardHome() {
280282
isOpen={showGitHubSelector}
281283
onClose={() => setShowGitHubSelector(false)}
282284
onImport={handleGitHubImport}
283-
maxSelectable={MAX_FREE_REPOS}
285+
maxSelectable={maxRepos}
284286
currentRepoCount={repos.length}
285287
/>
286288

frontend/src/components/dashboard/RepoListView.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ import { Plus, Github } from 'lucide-react'
66
import { Button } from '../ui/button'
77
import { RepoList } from '../RepoList'
88
import { DashboardStats } from './DashboardStats'
9-
import { MAX_FREE_REPOS } from '../../config/api'
109
import type { Repository } from '../../types'
1110

1211
interface RepoListViewProps {
1312
repos: Repository[]
1413
loading: boolean
1514
reposLoading: boolean
1615
selectedRepo: string | null
16+
maxRepos: number
1717
onSelectRepo: (id: string) => void
1818
onAddClick: () => void
1919
onGitHubClick: () => void
@@ -24,6 +24,7 @@ export function RepoListView({
2424
loading,
2525
reposLoading,
2626
selectedRepo,
27+
maxRepos,
2728
onSelectRepo,
2829
onAddClick,
2930
onGitHubClick,
@@ -47,15 +48,15 @@ export function RepoListView({
4748
<Button
4849
onClick={onGitHubClick}
4950
variant="outline"
50-
disabled={loading || repos.length >= MAX_FREE_REPOS}
51+
disabled={loading || repos.length >= maxRepos}
5152
className="gap-2"
5253
>
5354
<Github className="w-4 h-4" />
5455
Import from GitHub
5556
</Button>
5657
<Button
5758
onClick={onAddClick}
58-
disabled={loading || repos.length >= MAX_FREE_REPOS}
59+
disabled={loading || repos.length >= maxRepos}
5960
className="bg-primary hover:bg-primary/90 text-primary-foreground gap-2"
6061
>
6162
<Plus className="w-4 h-4" />

0 commit comments

Comments
 (0)