@@ -27,9 +27,11 @@ export const IntegrationPanel: React.FC<IIntegrationPanelProps> = ({ baseTheme,
2727 ConfigurableDatabaseIntegrationType | undefined
2828 > ( undefined ) ;
2929 const [ message , setMessage ] = React . useState < { type : 'success' | 'error' ; text : string } | null > ( null ) ;
30+ const [ confirmReset , setConfirmReset ] = React . useState < string | null > ( null ) ;
3031 const [ confirmDelete , setConfirmDelete ] = React . useState < string | null > ( null ) ;
3132
3233 const messageTimerRef = React . useRef < NodeJS . Timeout | null > ( null ) ;
34+ const confirmResetTimerRef = React . useRef < NodeJS . Timeout | null > ( null ) ;
3335 const confirmDeleteTimerRef = React . useRef < NodeJS . Timeout | null > ( null ) ;
3436
3537 // Cleanup timers on unmount
@@ -39,6 +41,10 @@ export const IntegrationPanel: React.FC<IIntegrationPanelProps> = ({ baseTheme,
3941 clearTimeout ( messageTimerRef . current ) ;
4042 messageTimerRef . current = null ;
4143 }
44+ if ( confirmResetTimerRef . current ) {
45+ clearTimeout ( confirmResetTimerRef . current ) ;
46+ confirmResetTimerRef . current = null ;
47+ }
4248 if ( confirmDeleteTimerRef . current ) {
4349 clearTimeout ( confirmDeleteTimerRef . current ) ;
4450 confirmDeleteTimerRef . current = null ;
@@ -96,6 +102,41 @@ export const IntegrationPanel: React.FC<IIntegrationPanelProps> = ({ baseTheme,
96102 } ) ;
97103 } ;
98104
105+ const handleReset = ( integrationId : string ) => {
106+ // Clear any existing confirmReset timer before creating a new one
107+ if ( confirmResetTimerRef . current ) {
108+ clearTimeout ( confirmResetTimerRef . current ) ;
109+ }
110+
111+ setConfirmReset ( integrationId ) ;
112+ } ;
113+
114+ const handleConfirmReset = ( ) => {
115+ if ( confirmReset ) {
116+ // Clear the timer when user confirms
117+ if ( confirmResetTimerRef . current ) {
118+ clearTimeout ( confirmResetTimerRef . current ) ;
119+ confirmResetTimerRef . current = null ;
120+ }
121+
122+ vscodeApi . postMessage ( {
123+ type : 'delete' ,
124+ integrationId : confirmReset
125+ } ) ;
126+ setConfirmReset ( null ) ;
127+ }
128+ } ;
129+
130+ const handleCancelReset = ( ) => {
131+ // Clear the timer when user cancels
132+ if ( confirmResetTimerRef . current ) {
133+ clearTimeout ( confirmResetTimerRef . current ) ;
134+ confirmResetTimerRef . current = null ;
135+ }
136+
137+ setConfirmReset ( null ) ;
138+ } ;
139+
99140 const handleDelete = ( integrationId : string ) => {
100141 // Clear any existing confirmDelete timer before creating a new one
101142 if ( confirmDeleteTimerRef . current ) {
@@ -165,7 +206,12 @@ export const IntegrationPanel: React.FC<IIntegrationPanelProps> = ({ baseTheme,
165206
166207 { message && < div className = { `message message-${ message . type } ` } > { message . text } </ div > }
167208
168- < IntegrationList integrations = { integrations } onConfigure = { handleConfigure } onDelete = { handleDelete } />
209+ < IntegrationList
210+ integrations = { integrations }
211+ onConfigure = { handleConfigure }
212+ onReset = { handleReset }
213+ onDelete = { handleDelete }
214+ />
169215
170216 < IntegrationTypeSelector onSelectType = { handleSelectIntegrationType } />
171217
@@ -180,7 +226,7 @@ export const IntegrationPanel: React.FC<IIntegrationPanelProps> = ({ baseTheme,
180226 />
181227 ) }
182228
183- { confirmDelete && (
229+ { confirmReset && (
184230 < div className = "configuration-form-overlay" >
185231 < div className = "configuration-form-container" style = { { maxWidth : '400px' } } >
186232 < div className = "configuration-form-header" >
@@ -201,9 +247,41 @@ export const IntegrationPanel: React.FC<IIntegrationPanelProps> = ({ baseTheme,
201247 </ p >
202248 </ div >
203249 < div className = "form-actions" >
204- < button type = "button" className = "primary" onClick = { handleConfirmDelete } >
250+ < button type = "button" className = "primary" onClick = { handleConfirmReset } >
205251 { getLocString ( 'integrationsReset' , 'Reset' ) }
206252 </ button >
253+ < button type = "button" className = "secondary" onClick = { handleCancelReset } >
254+ { getLocString ( 'integrationsCancel' , 'Cancel' ) }
255+ </ button >
256+ </ div >
257+ </ div >
258+ </ div >
259+ ) }
260+
261+ { confirmDelete && (
262+ < div className = "configuration-form-overlay" >
263+ < div className = "configuration-form-container" style = { { maxWidth : '400px' } } >
264+ < div className = "configuration-form-header" >
265+ < h2 > { getLocString ( 'integrationsConfirmDeleteTitle' , 'Confirm Delete' ) } </ h2 >
266+ </ div >
267+ < div className = "configuration-form-body" >
268+ < p >
269+ { getLocString (
270+ 'integrationsConfirmDeleteMessage' ,
271+ 'Are you sure you want to permanently delete this integration?'
272+ ) }
273+ </ p >
274+ < p style = { { marginTop : '10px' , fontSize : '0.9em' , opacity : 0.8 } } >
275+ { getLocString (
276+ 'integrationsConfirmDeleteDetails' ,
277+ 'This will permanently remove the integration from your project. This action cannot be undone.'
278+ ) }
279+ </ p >
280+ </ div >
281+ < div className = "form-actions" >
282+ < button type = "button" className = "primary" onClick = { handleConfirmDelete } >
283+ { getLocString ( 'integrationsDelete' , 'Delete' ) }
284+ </ button >
207285 < button type = "button" className = "secondary" onClick = { handleCancelDelete } >
208286 { getLocString ( 'integrationsCancel' , 'Cancel' ) }
209287 </ button >
0 commit comments