1+ 'use client'
2+
3+ import { useState , useEffect } from 'react'
4+ import { Task } from '@/lib/tasks'
5+
6+ export function useTasks ( ) {
7+ const [ tasks , setTasks ] = useState < Task [ ] > ( [ ] )
8+ const [ isLoading , setIsLoading ] = useState ( true )
9+ const [ error , setError ] = useState < string | null > ( null )
10+
11+ const fetchTasks = async ( ) => {
12+ try {
13+ const response = await fetch ( '/api/tasks' )
14+ if ( response . ok ) {
15+ const data = await response . json ( )
16+ setTasks ( data . tasks || [ ] )
17+ setError ( null )
18+ } else {
19+ setError ( 'Failed to fetch tasks' )
20+ }
21+ } catch ( err ) {
22+ console . error ( 'Error fetching tasks:' , err )
23+ setError ( 'Failed to fetch tasks' )
24+ } finally {
25+ setIsLoading ( false )
26+ }
27+ }
28+
29+ // Create a new task
30+ const createTask = async ( taskData : {
31+ prompt : string
32+ repoUrl ?: string
33+ selectedAgent ?: string
34+ selectedModel ?: string
35+ } ) => {
36+ try {
37+ setError ( null )
38+ const response = await fetch ( '/api/tasks' , {
39+ method : 'POST' ,
40+ headers : {
41+ 'Content-Type' : 'application/json' ,
42+ } ,
43+ body : JSON . stringify ( taskData ) ,
44+ } )
45+
46+ if ( response . ok ) {
47+ const data = await response . json ( )
48+ setTasks ( prev => [ data . task , ...prev ] )
49+ return data . task
50+ } else {
51+ const errorData = await response . json ( )
52+ setError ( errorData . error || 'Failed to create task' )
53+ return null
54+ }
55+ } catch ( err ) {
56+ console . error ( 'Error creating task:' , err )
57+ setError ( 'Failed to create task' )
58+ return null
59+ }
60+ }
61+
62+ // Delete tasks by status
63+ const deleteTasks = async ( actions : string [ ] ) => {
64+ try {
65+ setError ( null )
66+ const response = await fetch ( `/api/tasks?action=${ actions . join ( ',' ) } ` , {
67+ method : 'DELETE' ,
68+ } )
69+
70+ if ( response . ok ) {
71+ // Refresh the tasks list
72+ await fetchTasks ( )
73+ const data = await response . json ( )
74+ return data
75+ } else {
76+ const errorData = await response . json ( )
77+ setError ( errorData . error || 'Failed to delete tasks' )
78+ return null
79+ }
80+ } catch ( err ) {
81+ console . error ( 'Error deleting tasks:' , err )
82+ setError ( 'Failed to delete tasks' )
83+ return null
84+ }
85+ }
86+
87+ // Initial fetch
88+ useEffect ( ( ) => {
89+ fetchTasks ( )
90+ } , [ ] )
91+
92+ return {
93+ tasks,
94+ isLoading,
95+ error,
96+ refetch : fetchTasks ,
97+ createTask,
98+ deleteTasks
99+ }
100+ }
0 commit comments