@@ -44,7 +44,9 @@ export function main() {
4444
4545function Dashboard ( ) {
4646 const [ data , setData ] = useState < DashboardData | null > ( null ) ;
47- const [ loading , setLoading ] = useState ( true ) ;
47+ const [ issuesLoading , setIssuesLoading ] = useState ( true ) ;
48+ const [ sessionsLoading , setSessionsLoading ] = useState ( true ) ;
49+ const [ refreshing , setRefreshing ] = useState ( false ) ;
4850 const [ chatInput , setChatInput ] = useState ( '' ) ;
4951
5052 useEffect ( ( ) => {
@@ -54,12 +56,12 @@ function Dashboard() {
5456 switch ( message . command ) {
5557 case 'update-dashboard' :
5658 setData ( message . data ) ;
57- setLoading ( false ) ;
59+ setIssuesLoading ( false ) ;
60+ setSessionsLoading ( false ) ;
61+ setRefreshing ( false ) ;
5862 break ;
5963 }
60- } ;
61-
62- window . addEventListener ( 'message' , messageListener ) ;
64+ } ; window . addEventListener ( 'message' , messageListener ) ;
6365
6466 // Request initial data
6567 vscode . postMessage ( { command : 'ready' } ) ;
@@ -72,7 +74,9 @@ function Dashboard() {
7274 } , [ ] ) ;
7375
7476 const handleRefresh = ( ) => {
75- setLoading ( true ) ;
77+ setRefreshing ( true ) ;
78+ setIssuesLoading ( true ) ;
79+ setSessionsLoading ( true ) ;
7680 vscode . postMessage ( { command : 'refresh-dashboard' } ) ;
7781 } ;
7882
@@ -145,20 +149,17 @@ function Dashboard() {
145149 }
146150 } ;
147151
148- if ( loading ) {
149- return (
150- < div className = "dashboard-container" >
151- < div className = "loading-indicator" > Loading dashboard...</ div >
152- </ div >
153- ) ;
154- }
155-
156152 return (
157153 < div className = "dashboard-container" >
158154 < div className = "dashboard-header" >
159155 < h1 className = "dashboard-title" > My Tasks</ h1 >
160- < button className = "refresh-button" onClick = { handleRefresh } >
161- Refresh
156+ < button className = "refresh-button" onClick = { handleRefresh } disabled = { refreshing } >
157+ { refreshing ? < >
158+ { /* allow-any-unicode-next-line */ }
159+ < span className = "refresh-spinner" > ⟳</ span >
160+ </ > : (
161+ 'Refresh'
162+ ) }
162163 </ button >
163164 </ div >
164165
@@ -169,7 +170,7 @@ function Dashboard() {
169170
170171 { /* Chat Input Section */ }
171172 < div className = "chat-section" >
172- < div className = "chat-input-container " >
173+ < div className = "chat-input-wrapper " >
173174 < textarea
174175 className = "chat-input"
175176 placeholder = "Start working on a new task..."
@@ -182,11 +183,13 @@ function Dashboard() {
182183 } }
183184 />
184185 < button
185- className = "send-button"
186+ className = "send-button-inline "
186187 onClick = { handleSendChat }
187188 disabled = { ! chatInput . trim ( ) }
189+ title = "Send message (Ctrl+Enter)"
188190 >
189- Send
191+ { /* allow-any-unicode-next-line */ }
192+ < span className = "send-icon" > ➤</ span >
190193 </ button >
191194 </ div >
192195 < p style = { { fontSize : '12px' , color : 'var(--vscode-descriptionForeground)' , marginTop : '4px' } } >
@@ -195,8 +198,19 @@ function Dashboard() {
195198 </ div >
196199
197200 < h3 className = "column-header" style = { { marginTop : '24px' } } > September 2025 Issues</ h3 >
201+ { ! issuesLoading && (
202+ < div className = "section-count" >
203+ { data ?. milestoneIssues ?. length || 0 } issue{ ( data ?. milestoneIssues ?. length || 0 ) !== 1 ? 's' : '' }
204+ </ div >
205+ ) }
198206 < div className = "column-content" >
199- { ! data ?. milestoneIssues ?. length ? (
207+ { issuesLoading ? (
208+ < div className = "section-loading" >
209+ { /* allow-any-unicode-next-line */ }
210+ < span className = "section-spinner" > ⟳</ span >
211+ < span > Loading issues...</ span >
212+ </ div >
213+ ) : ! data ?. milestoneIssues ?. length ? (
200214 < div className = "empty-state" >
201215 No issues found for September 2025 milestone
202216 </ div >
@@ -237,8 +251,19 @@ function Dashboard() {
237251 { /* Right Column: Active tasks */ }
238252 < div className = "dashboard-column" >
239253 < h2 className = "column-header" > Active tasks</ h2 >
254+ { ! sessionsLoading && (
255+ < div className = "section-count" >
256+ { data ?. activeSessions ?. length || 0 } task{ ( data ?. activeSessions ?. length || 0 ) !== 1 ? 's' : '' }
257+ </ div >
258+ ) }
240259 < div className = "column-content" >
241- { ! data ?. activeSessions ?. length ? (
260+ { sessionsLoading ? (
261+ < div className = "section-loading" >
262+ { /* allow-any-unicode-next-line */ }
263+ < span className = "section-spinner" > ⟳</ span >
264+ < span > Loading sessions...</ span >
265+ </ div >
266+ ) : ! data ?. activeSessions ?. length ? (
242267 < div className = "empty-state" >
243268 No active sessions found
244269 </ div >
@@ -281,6 +306,6 @@ function Dashboard() {
281306 </ div >
282307 </ div >
283308 </ div >
284- </ div >
309+ </ div >
285310 ) ;
286311}
0 commit comments