@@ -213,97 +213,15 @@ const appsModule = {
213
213
} ) ;
214
214
} ,
215
215
216
- // Add auto-save listeners to form elements
216
+ // Add change listeners to form elements (auto-save removed - now using manual save)
217
217
addFormChangeListeners : function ( form ) {
218
218
if ( ! form ) return ;
219
219
220
220
const appType = form . getAttribute ( 'data-app-type' ) ;
221
- console . log ( `[Apps] Adding auto-save listeners for ${ appType } ` ) ;
221
+ console . log ( `[Apps] Skipping auto-save listeners for ${ appType } - now using manual save ` ) ;
222
222
223
- // Immediate auto-save function
224
- const autoSave = ( ) => {
225
- this . autoSaveSettings ( appType , form ) ;
226
- } ;
227
-
228
- // Add listeners to all form inputs, selects, and textareas
229
- const formElements = form . querySelectorAll ( 'input, select, textarea' ) ;
230
- formElements . forEach ( element => {
231
- // Skip buttons and test-related elements
232
- if ( element . type === 'button' ||
233
- element . type === 'submit' ||
234
- element . tagName . toLowerCase ( ) === 'button' ||
235
- element . classList . contains ( 'test-connection-btn' ) ||
236
- element . id && element . id . includes ( 'test-' ) ) {
237
- return ;
238
- }
239
-
240
- // Remove any existing listeners to avoid duplicates
241
- element . removeEventListener ( 'change' , autoSave ) ;
242
- element . removeEventListener ( 'input' , autoSave ) ;
243
-
244
- // Add auto-save listeners
245
- element . addEventListener ( 'change' , autoSave ) ;
246
-
247
- // For text and number inputs, also listen for input events
248
- if ( element . type === 'text' || element . type === 'number' || element . tagName . toLowerCase ( ) === 'textarea' ) {
249
- element . addEventListener ( 'input' , autoSave ) ;
250
- }
251
-
252
- console . log ( `[Apps] Added auto-save listener to ${ element . tagName } with id: ${ element . id || 'no-id' } ` ) ;
253
- } ) ;
254
-
255
- // Also observe for added/removed instances
256
- try {
257
- if ( this . observer ) {
258
- this . observer . disconnect ( ) ;
259
- }
260
-
261
- this . observer = new MutationObserver ( ( mutations ) => {
262
- let shouldAutoSave = false ;
263
-
264
- mutations . forEach ( mutation => {
265
- if ( mutation . type === 'childList' &&
266
- ( mutation . addedNodes . length > 0 || mutation . removedNodes . length > 0 ) ) {
267
-
268
- // Check if the changes are test-related elements that we should ignore
269
- let isTestRelated = false ;
270
-
271
- [ ...mutation . addedNodes , ...mutation . removedNodes ] . forEach ( node => {
272
- if ( node . nodeType === Node . ELEMENT_NODE ) {
273
- if ( node . classList && (
274
- node . classList . contains ( 'connection-message' ) ||
275
- node . classList . contains ( 'test-status' ) ||
276
- node . classList . contains ( 'test-result' ) ||
277
- node . classList . contains ( 'auto-save-indicator' )
278
- ) ) {
279
- isTestRelated = true ;
280
- }
281
- if ( node . id && ( node . id . includes ( '-status-' ) || node . id . includes ( 'save-indicator' ) ) ) {
282
- isTestRelated = true ;
283
- }
284
- }
285
- } ) ;
286
-
287
- if ( ! isTestRelated ) {
288
- shouldAutoSave = true ;
289
- }
290
- }
291
- } ) ;
292
-
293
- if ( shouldAutoSave ) {
294
- console . log ( '[Apps] Instance structure changed - triggering auto-save' ) ;
295
- autoSave ( ) ;
296
- }
297
- } ) ;
298
-
299
- // Start observing instances container for changes
300
- const instancesContainers = form . querySelectorAll ( '.instances-container' ) ;
301
- instancesContainers . forEach ( container => {
302
- this . observer . observe ( container , { childList : true , subtree : true } ) ;
303
- } ) ;
304
- } catch ( error ) {
305
- console . error ( '[Apps] Error setting up MutationObserver:' , error ) ;
306
- }
223
+ // Auto-save has been removed - apps now use manual save buttons
224
+ // No longer adding change listeners or mutation observers for auto-save functionality
307
225
} ,
308
226
309
227
// Auto-save settings silently in background
0 commit comments