Skip to content

Commit c3288da

Browse files
authored
Merge pull request #278 from DevanshuNEU/fix/repo-limit-per-tier
fix: repo limit per tier -- Enterprise users were blocked at free limit
2 parents 8cf0589 + 950ef1a commit c3288da

4 files changed

Lines changed: 22 additions & 9 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" />

frontend/src/components/dashboard/TopNav.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Link } from 'react-router-dom'
22
import { useAuth } from '../../contexts/AuthContext'
3-
import { TIER_FUNCTION_LIMITS, type TierName } from '../../config/api'
3+
import { useUserUsage } from '../../hooks/useCachedQuery'
44
import { Menu, Search, Github, Sun, Moon, LogOut, Settings, BookOpen, ExternalLink } from 'lucide-react'
55
import { useTheme } from 'next-themes'
66
import { Button } from '@/components/ui/button'
@@ -25,9 +25,10 @@ export function TopNav({ onToggleSidebar, sidebarCollapsed, onOpenCommandPalette
2525

2626
const userEmail = session?.user?.email || 'User'
2727
const userInitial = userEmail.charAt(0).toUpperCase()
28-
const rawTier = session?.user?.user_metadata?.tier as string
29-
const userTier: TierName = rawTier && rawTier in TIER_FUNCTION_LIMITS ? (rawTier as TierName) : 'free'
30-
const tierLabel = `${userTier.charAt(0).toUpperCase()}${userTier.slice(1)} Plan`
28+
const { data: usage } = useUserUsage(session?.access_token, session?.user?.id)
29+
const tierLabel = usage?.tier
30+
? `${usage.tier.charAt(0).toUpperCase()}${usage.tier.slice(1)} Plan`
31+
: ''
3132

3233
const toggleTheme = () => {
3334
setTheme(theme === 'dark' ? 'light' : 'dark')

frontend/src/hooks/useCachedQuery.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,11 +199,20 @@ export function useUserUsage(apiKey: string | undefined, userId?: string) {
199199
const data = await fetchWithAuth(`${API_URL}/users/usage`, apiKey!)
200200
return data as {
201201
tier: string
202+
repositories: {
203+
current: number
204+
limit: number
205+
display: string
206+
}
202207
limits: {
203208
max_files_per_repo: number
204209
max_functions_per_repo: number
205210
playground_searches_per_day: number | null
206211
}
212+
features: {
213+
priority_indexing: boolean
214+
mcp_access: boolean
215+
}
207216
}
208217
},
209218
enabled: !!apiKey,

0 commit comments

Comments
 (0)