Skip to content

Commit 3f597d2

Browse files
committed
fix(ui): make empty state + button clickable to open add repo form
- Add onAddClick prop to RepoList component - Support controlled mode in AddRepoForm (isOpen, onOpenChange) - Wire up DashboardHome to pass state between components - Empty state now opens the add repository modal when clicked
1 parent b6acf5d commit 3f597d2

3 files changed

Lines changed: 24 additions & 7 deletions

File tree

frontend/src/components/AddRepoForm.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,18 @@ import { Label } from '@/components/ui/label'
88
interface AddRepoFormProps {
99
onAdd: (gitUrl: string, branch: string) => Promise<void>
1010
loading: boolean
11+
isOpen?: boolean
12+
onOpenChange?: (open: boolean) => void
1113
}
1214

13-
export function AddRepoForm({ onAdd, loading }: AddRepoFormProps) {
15+
export function AddRepoForm({ onAdd, loading, isOpen, onOpenChange }: AddRepoFormProps) {
1416
const [gitUrl, setGitUrl] = useState('')
1517
const [branch, setBranch] = useState('main')
16-
const [showForm, setShowForm] = useState(false)
18+
const [internalOpen, setInternalOpen] = useState(false)
19+
20+
// Support both controlled and uncontrolled modes
21+
const showForm = isOpen !== undefined ? isOpen : internalOpen
22+
const setShowForm = onOpenChange || setInternalOpen
1723

1824
const handleSubmit = async (e: React.FormEvent) => {
1925
e.preventDefault()

frontend/src/components/RepoList.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ interface RepoListProps {
88
repos: Repository[]
99
selectedRepo: string | null
1010
onSelect: (repoId: string) => void
11+
onAddClick?: () => void
1112
loading?: boolean
1213
}
1314

@@ -94,15 +95,18 @@ const RepoCard = ({ repo, index, onSelect }: {
9495
)
9596
}
9697

97-
export function RepoList({ repos, selectedRepo, onSelect, loading }: RepoListProps) {
98+
export function RepoList({ repos, selectedRepo, onSelect, onAddClick, loading }: RepoListProps) {
9899
if (loading) return <RepoGridSkeleton count={3} />
99100

100101
if (repos.length === 0) {
101102
return (
102-
<motion.div
103+
<motion.button
104+
onClick={onAddClick}
103105
initial={{ opacity: 0 }}
104106
animate={{ opacity: 1 }}
105-
className="bg-card border border-border rounded-xl p-16 text-center"
107+
whileHover={{ scale: 1.01 }}
108+
whileTap={{ scale: 0.99 }}
109+
className="w-full bg-card border border-dashed border-border hover:border-primary/40 rounded-xl p-16 text-center transition-colors cursor-pointer focus:outline-none focus:ring-2 focus:ring-primary/50"
106110
>
107111
<div className="w-14 h-14 mx-auto mb-4 rounded-xl bg-primary/10 border border-primary/20 flex items-center justify-center">
108112
<Plus className="w-6 h-6 text-primary" />
@@ -111,7 +115,7 @@ export function RepoList({ repos, selectedRepo, onSelect, loading }: RepoListPro
111115
<p className="text-sm text-muted-foreground max-w-xs mx-auto">
112116
Add your first repository to start searching code with AI
113117
</p>
114-
</motion.div>
118+
</motion.button>
115119
)
116120
}
117121

frontend/src/components/dashboard/DashboardHome.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export function DashboardHome() {
3232
const [activeTab, setActiveTab] = useState<RepoTab>('overview')
3333
const [loading, setLoading] = useState(false)
3434
const [reposLoading, setReposLoading] = useState(true)
35+
const [showAddForm, setShowAddForm] = useState(false)
3536

3637
const fetchRepos = async () => {
3738
if (!session?.access_token) return
@@ -136,7 +137,12 @@ export function DashboardHome() {
136137
Semantic code search powered by AI
137138
</p>
138139
</div>
139-
<AddRepoForm onAdd={handleAddRepo} loading={loading} />
140+
<AddRepoForm
141+
onAdd={handleAddRepo}
142+
loading={loading}
143+
isOpen={showAddForm}
144+
onOpenChange={setShowAddForm}
145+
/>
140146
</div>
141147

142148
{/* Stats */}
@@ -151,6 +157,7 @@ export function DashboardHome() {
151157
setSelectedRepo(id)
152158
setActiveTab('overview')
153159
}}
160+
onAddClick={() => setShowAddForm(true)}
154161
/>
155162
</motion.div>
156163
)}

0 commit comments

Comments
 (0)