@@ -26,48 +26,17 @@ import { apiService } from '../api/apiService';
2626import { PlanWithSteps } from '../models' ;
2727import HomeInput from '@/components/content/HomeInput' ;
2828import { NewTaskService } from '../services/NewTaskService' ;
29+ import PlanPanelLeft from '@/components/content/PlanPanelLeft' ;
2930
3031/**
3132 * HomePage component - displays task lists and provides navigation
3233 * Accessible via the route "/"
3334 */
3435const HomePage : React . FC = ( ) => {
35- const navigate = useNavigate ( ) ;
36- const { dispatchToast } = useToastController ( 'toast' ) ; // State for task lists
37- const [ inProgressTasks , setInProgressTasks ] = useState < Task [ ] > ( [ ] ) ;
38- const [ completedTasks , setCompletedTasks ] = useState < Task [ ] > ( [ ] ) ;
39-
40- // State for API calls
41- const [ plans , setPlans ] = useState < PlanWithSteps [ ] | null > ( null ) ;
42- const [ plansLoading , setPlansLoading ] = useState < boolean > ( false ) ;
43- const [ plansError , setPlansError ] = useState < Error | null > ( null ) ;
44-
4536 /**
46- * Load plans data and update task lists
47- */
48- const loadPlansData = useCallback ( async ( forceRefresh = false ) => {
49- try {
50- setPlansLoading ( true ) ;
51- setPlansError ( null ) ;
52-
53- // Call the apiService directly
54- const plansData = await apiService . getPlans ( undefined , ! forceRefresh ) ;
55- setPlans ( plansData ) ;
56- } catch ( error ) {
57- console . error ( 'Failed to load plans:' , error ) ;
58- setPlansError ( error instanceof Error ? error : new Error ( 'Failed to load plans' ) ) ;
59- } finally {
60- setPlansLoading ( false ) ;
61- }
62- } , [ ] ) ;
63-
64- // Load data on component mount
65- useEffect ( ( ) => {
66- loadPlansData ( ) ;
67- } , [ loadPlansData ] ) ; /**
68- * Handle new task creation from the "New task" button
69- * Resets textarea to empty state on HomePage
70- */
37+ * Handle new task creation from the "New task" button
38+ * Resets textarea to empty state on HomePage
39+ */
7140 const handleNewTaskButton = useCallback ( ( ) => {
7241 NewTaskService . handleNewTaskFromHome ( ) ;
7342 } , [ ] ) ;
@@ -79,73 +48,14 @@ const HomePage: React.FC = () => {
7948 console . log ( 'Creating new task:' , taskName ) ;
8049 } , [ ] ) ;
8150
82-
83- const handleTaskSelect = useCallback ( ( taskId : string ) => {
84- console . log ( 'Selected task ID:' , taskId ) ;
85-
86- // Find the plan by session_id to get the plan_id
87- const selectedPlan = plans ?. find ( ( plan : PlanWithSteps ) => plan . session_id === taskId ) ;
88- if ( selectedPlan ) {
89- navigate ( `/plan/${ selectedPlan . id } ` ) ;
90- }
91- } , [ plans , navigate ] ) ; // Transform plans data when it changes
92- useEffect ( ( ) => {
93- if ( plans ) {
94- const { inProgress, completed } = TaskService . transformPlansToTasks ( plans ) ;
95- setInProgressTasks ( inProgress ) ;
96- setCompletedTasks ( completed ) ;
97- }
98- } , [ plans ] ) ;
99-
100-
101- // Handle API errors
102- useEffect ( ( ) => {
103- if ( plansError ) {
104- dispatchToast (
105- < Toast >
106- < ToastTitle >
107- < ErrorCircle20Regular />
108- Failed to load tasks
109- </ ToastTitle >
110- < ToastBody >
111- { plansError . message }
112- </ ToastBody >
113- </ Toast > ,
114- { intent : 'error' }
115- ) ;
116- }
117- } , [ plansError , dispatchToast ] ) ;
118-
11951 return (
12052 < >
12153 < Toaster toasterId = "toast" />
12254 < CoralShellColumn >
12355 < CoralShellRow >
124- < div style = { { flexShrink : 0 , display : "flex" , overflow : "hidden" } } >
125- < PanelLeft
126- panelWidth = { 280 }
127- panelResize = { true } > < PanelLeftToolbar panelTitle = "Tasks" panelIcon = { null } >
128- < Button
129- icon = { < Add20Regular /> }
130- onClick = { handleNewTaskButton }
131- disabled = { plansLoading }
132- >
133- New task
134- </ Button >
135- </ PanelLeftToolbar >
136- { plansLoading && ( ! inProgressTasks . length && ! completedTasks . length ) ? (
137- < div style = { { padding : '20px' , textAlign : 'center' } } >
138- < Spinner size = "medium" label = "Loading tasks..." />
139- </ div >
140- ) : (
141- < TaskList
142- inProgressTasks = { inProgressTasks }
143- completedTasks = { completedTasks }
144- onTaskSelect = { handleTaskSelect }
145- />
146- ) }
147- </ PanelLeft >
148- </ div >
56+ < PlanPanelLeft
57+ onNewTaskButton = { handleNewTaskButton }
58+ />
14959 < Content >
15060 < HomeInput
15161 onInputSubmit = { handleNewTask }
0 commit comments