@@ -40,11 +40,13 @@ import {
4040 CommandLineIcon ,
4141 Copy01Icon ,
4242 VisualStudioCodeIcon ,
43+ Task01Icon ,
4344} from '@hugeicons/core-free-icons'
4445import { FilesystemBrowser } from '@/components/ui/filesystem-browser'
4546import { useDefaultGitReposDir , useHostname , useSshPort } from '@/hooks/use-config'
4647import { buildVSCodeUrl } from '@/lib/vscode-url'
4748import type { Repository } from '@/types'
49+ import { CreateTaskModal } from '@/components/kanban/create-task-modal'
4850
4951export const Route = createFileRoute ( '/repositories/' ) ( {
5052 component : RepositoriesView ,
@@ -53,9 +55,11 @@ export const Route = createFileRoute('/repositories/')({
5355function RepositoryCard ( {
5456 repository,
5557 onDelete,
58+ onStartTask,
5659} : {
5760 repository : Repository
5861 onDelete : ( ) => Promise < void >
62+ onStartTask : ( ) => void
5963} ) {
6064 const [ dialogOpen , setDialogOpen ] = useState ( false )
6165 const [ isDeleting , setIsDeleting ] = useState ( false )
@@ -69,6 +73,12 @@ function RepositoryCard({
6973 window . open ( url , '_blank' )
7074 }
7175
76+ const handleStartTask = ( e : React . MouseEvent ) => {
77+ e . preventDefault ( )
78+ e . stopPropagation ( )
79+ onStartTask ( )
80+ }
81+
7282 const handleDelete = async ( e : React . MouseEvent ) => {
7383 e . preventDefault ( )
7484 e . stopPropagation ( )
@@ -93,6 +103,7 @@ function RepositoryCard({
93103 < div className = "flex shrink-0 gap-1" >
94104 < div className = "size-6" />
95105 < div className = "size-6" />
106+ < div className = "size-6" />
96107 </ div >
97108 </ div >
98109
@@ -126,6 +137,16 @@ function RepositoryCard({
126137 </ Link >
127138
128139 < div className = "absolute right-3 top-3 flex gap-1" >
140+ < Button
141+ variant = "ghost"
142+ size = "icon-sm"
143+ onClick = { handleStartTask }
144+ className = "shrink-0 text-muted-foreground hover:text-foreground"
145+ title = "Start Task"
146+ >
147+ < HugeiconsIcon icon = { Task01Icon } size = { 14 } strokeWidth = { 2 } />
148+ </ Button >
149+
129150 < Button
130151 variant = "ghost"
131152 size = "icon-sm"
@@ -326,6 +347,7 @@ function CreateRepositoryDialog() {
326347function RepositoriesView ( ) {
327348 const { data : repositories , isLoading, error } = useRepositories ( )
328349 const deleteRepository = useDeleteRepository ( )
350+ const [ taskModalRepo , setTaskModalRepo ] = useState < Repository | null > ( null )
329351
330352 const handleDelete = async ( id : string ) => {
331353 await deleteRepository . mutateAsync ( id )
@@ -377,10 +399,17 @@ function RepositoriesView() {
377399 key = { repo . id }
378400 repository = { repo }
379401 onDelete = { ( ) => handleDelete ( repo . id ) }
402+ onStartTask = { ( ) => setTaskModalRepo ( repo ) }
380403 />
381404 ) ) }
382405 </ div >
383406 </ div >
407+
408+ < CreateTaskModal
409+ open = { taskModalRepo !== null }
410+ onOpenChange = { ( open ) => ! open && setTaskModalRepo ( null ) }
411+ defaultRepository = { taskModalRepo ?? undefined }
412+ />
384413 </ div >
385414 )
386415}
0 commit comments