File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11import { AlertCircle , X } from "lucide-react" ;
2- import { useState } from "react" ;
2+
33
44interface ApiErrorProps {
5- message : string ;
5+ message : string | null ;
6+ onDismiss : ( ) => void ;
67}
78
8- export function ApiError ( { message } : ApiErrorProps ) {
9- const [ visible , setVisible ] = useState ( true ) ;
10-
11- if ( ! visible ) return null ;
9+ export function ApiError ( { message, onDismiss } : ApiErrorProps ) {
10+ if ( ! message ) return null ;
1211
1312 return (
14- < div className = "w-full border border-red-500/40 bg-red-900/20 text-red-200 px-4 py-3 rounded-lg flex items-start justify-between gap-3" >
13+ < div role = "alert" aria-live = "assertive" className = "w-full border border-red-500/40 bg-red-900/20 text-red-200 px-4 py-3 rounded-lg flex items-start justify-between gap-3" >
1514 < div className = "flex items-start gap-2" >
1615 < AlertCircle className = "w-5 h-5 mt-0.5" />
17- < p className = "text-sm" > { message } </ p >
16+
17+ < p className = "text-sm break-words" > { message } </ p >
1818 </ div >
1919
20- < button onClick = { ( ) => setVisible ( false ) } >
21- < X className = "w-4 h-4 hover:text-red-400" />
20+ < button
21+ onClick = { onDismiss }
22+ aria-label = "Dismiss error"
23+ className = "cursor-pointer hover:text-red-400 transition-colors"
24+ >
25+ < X className = "w-4 h-4" />
2226 </ button >
2327 </ div >
2428 ) ;
Original file line number Diff line number Diff line change @@ -64,7 +64,7 @@ export default function NewAnalysis() {
6464 return
6565 }
6666
67- setBusy ( true )
67+
6868 setResultRun ( null )
6969 setResultPayload ( null )
7070
@@ -100,7 +100,7 @@ export default function NewAnalysis() {
100100
101101 return (
102102 < div className = "max-w-4xl mx-auto px-6 py-8 space-y-8" >
103- { error && ( < div className = "mb-4" > < ApiError message = { error } /> </ div > ) }
103+ < ApiError message = { error } onDismiss = { ( ) => setError ( null ) } />
104104
105105 { /* Step 1 — Analysis Type */ }
106106 < section >
Original file line number Diff line number Diff line change @@ -59,6 +59,7 @@ export default function Upload() {
5959 const handleUpload = async ( ) => {
6060 if ( ! file ) return
6161 setBusy ( true )
62+ setError ( null ) ;
6263 setUploadProgress ( 0 )
6364
6465 try {
@@ -88,7 +89,7 @@ export default function Upload() {
8889
8990 return (
9091 < div className = "max-w-3xl mx-auto px-6 py-8 space-y-6" >
91- { error && ( < ApiError message = { error } /> ) }
92+ < ApiError message = { error } onDismiss = { ( ) => setError ( null ) } />
9293 { /* Drop Zone */ }
9394 < div
9495 onDragOver = { ( e ) => { e . preventDefault ( ) ; setDragging ( true ) } }
You can’t perform that action at this time.
0 commit comments