@@ -215,9 +215,16 @@ document.addEventListener('DOMContentLoaded', function () {
215
215
const copyBtn = document . getElementById ( 'copyReport' ) ;
216
216
217
217
generateBtn . addEventListener ( 'click' , function ( ) {
218
- this . innerHTML = '<i class="fa fa-spinner fa-spin"></i> Generating...' ;
219
- this . disabled = true ;
220
- window . generateScrumReport ( ) ;
218
+ // Check org input value before generating report
219
+ let org = orgInput . value . trim ( ) . toLowerCase ( ) ;
220
+ if ( ! org ) {
221
+ org = 'fossasia' ;
222
+ }
223
+ chrome . storage . local . set ( { orgName : org } , ( ) => {
224
+ generateBtn . innerHTML = '<i class="fa fa-spinner fa-spin"></i> Generating...' ;
225
+ generateBtn . disabled = true ;
226
+ window . generateScrumReport ( ) ;
227
+ } ) ;
221
228
} ) ;
222
229
223
230
copyBtn . addEventListener ( 'click' , function ( ) {
@@ -276,11 +283,13 @@ document.addEventListener('DOMContentLoaded', function () {
276
283
] , ( items ) => {
277
284
console . log ( 'Restoring state:' , items ) ;
278
285
279
- if ( items . startingDate && items . endingDate && ! items . lastWeekContribution && ! items . yesterdayContribution ) {
286
+
287
+ if ( items . startingDate && items . endingDate && ! items . lastWeekContribution && ! items . yesterdayContribution ) {
280
288
const startDateInput = document . getElementById ( 'startingDate' ) ;
281
289
const endDateInput = document . getElementById ( 'endingDate' ) ;
282
290
283
- if ( startDateInput && endDateInput ) {
291
+ if ( startDateInput && endDateInput ) {
292
+
284
293
startDateInput . value = items . startingDate ;
285
294
endDateInput . value = items . endingDate ;
286
295
startDateInput . readOnly = false ;
@@ -315,7 +324,7 @@ document.addEventListener('DOMContentLoaded', function () {
315
324
endDateInput . value = getToday ( ) ;
316
325
}
317
326
startDateInput . readOnly = endDateInput . readOnly = true ;
318
-
327
+
319
328
chrome . storage . local . set ( {
320
329
startingDate : startDateInput . value ,
321
330
endingDate : endDateInput . value ,
@@ -367,28 +376,31 @@ document.addEventListener('DOMContentLoaded', function () {
367
376
orgInput . value = result . orgName || '' ;
368
377
} ) ;
369
378
370
- // Debounce function
371
- function debounce ( func , wait ) {
372
- let timeout ;
373
- return function ( ...args ) {
374
- clearTimeout ( timeout ) ;
375
- timeout = setTimeout ( ( ) => func . apply ( this , args ) , wait ) ;
376
- } ;
377
- }
379
+ // Auto-update orgName in storage on input change
380
+ orgInput . addEventListener ( 'input' , function ( ) {
381
+ let org = orgInput . value . trim ( ) . toLowerCase ( ) ;
382
+ if ( ! org ) {
383
+ org = 'fossasia' ;
384
+ }
385
+ chrome . storage . local . set ( { orgName : org } , function ( ) {
386
+ chrome . storage . local . remove ( 'githubCache' ) ; // Clear cache on org change
387
+ } ) ;
388
+ } ) ;
378
389
379
- let lastInvalidOrg = '' ;
380
- // Validate and set org as user types
381
- const handleOrgInput = debounce ( function ( ) {
390
+ // Add click event for setOrgBtn to set org
391
+ setOrgBtn . addEventListener ( 'click' , function ( ) {
382
392
let org = orgInput . value . trim ( ) . toLowerCase ( ) ;
383
393
if ( ! org ) {
384
394
org = 'fossasia' ;
385
395
}
386
- console . log ( '[Org Check] Checking organization:' , org ) ;
396
+ setOrgBtn . disabled = true ;
397
+ const originalText = setOrgBtn . innerHTML ;
398
+ setOrgBtn . innerHTML = '<i class="fa fa-spinner fa-spin"></i>' ;
387
399
fetch ( `https://api.github.com/orgs/${ org } ` )
388
400
. then ( res => {
389
- console . log ( '[Org Check] Response status for' , org , ':' , res . status ) ;
390
401
if ( res . status === 404 ) {
391
- console . log ( '[Org Check] Organization not found on GitHub:' , org ) ;
402
+ setOrgBtn . disabled = false ;
403
+ setOrgBtn . innerHTML = originalText ;
392
404
const oldToast = document . getElementById ( 'invalid-org-toast' ) ;
393
405
if ( oldToast ) oldToast . parentNode . removeChild ( oldToast ) ;
394
406
const toastDiv = document . createElement ( 'div' ) ;
@@ -413,14 +425,40 @@ document.addEventListener('DOMContentLoaded', function () {
413
425
}
414
426
const oldToast = document . getElementById ( 'invalid-org-toast' ) ;
415
427
if ( oldToast ) oldToast . parentNode . removeChild ( oldToast ) ;
416
- console . log ( '[Org Check] Organisation exists on GitHub:' , org ) ;
417
- console . log ( '[Org Check] Organization exists on GitHub:' , org ) ;
418
428
chrome . storage . local . set ( { orgName : org } , function ( ) {
419
- if ( window . generateScrumReport ) window . generateScrumReport ( ) ;
429
+ // Always clear the scrum report and show org changed message
430
+ const scrumReport = document . getElementById ( 'scrumReport' ) ;
431
+ if ( scrumReport ) {
432
+ scrumReport . innerHTML = '<p style="text-align: center; color: #666; padding: 20px;">Organization changed. Click Generate button to fetch the GitHub activities.</p>' ;
433
+ }
434
+ // Clear the githubCache for previous org
435
+ chrome . storage . local . remove ( 'githubCache' ) ;
436
+ setOrgBtn . disabled = false ;
437
+ setOrgBtn . innerHTML = originalText ;
438
+ // Always show green toast: org is set
439
+ const toastDiv = document . createElement ( 'div' ) ;
440
+ toastDiv . id = 'invalid-org-toast' ;
441
+ toastDiv . className = 'toast' ;
442
+ toastDiv . style . background = '#10b981' ;
443
+ toastDiv . style . color = '#fff' ;
444
+ toastDiv . style . fontWeight = 'bold' ;
445
+ toastDiv . style . padding = '12px 24px' ;
446
+ toastDiv . style . borderRadius = '8px' ;
447
+ toastDiv . style . position = 'fixed' ;
448
+ toastDiv . style . top = '24px' ;
449
+ toastDiv . style . left = '50%' ;
450
+ toastDiv . style . transform = 'translateX(-50%)' ;
451
+ toastDiv . style . zIndex = '9999' ;
452
+ toastDiv . innerText = 'Organization is set.' ;
453
+ document . body . appendChild ( toastDiv ) ;
454
+ setTimeout ( ( ) => {
455
+ if ( toastDiv . parentNode ) toastDiv . parentNode . removeChild ( toastDiv ) ;
456
+ } , 2500 ) ;
420
457
} ) ;
421
458
} )
422
459
. catch ( ( err ) => {
423
- console . log ( '[Org Check] Error validating organisation:' , org , err ) ;
460
+ setOrgBtn . disabled = false ;
461
+ setOrgBtn . innerHTML = originalText ;
424
462
const oldToast = document . getElementById ( 'invalid-org-toast' ) ;
425
463
if ( oldToast ) oldToast . parentNode . removeChild ( oldToast ) ;
426
464
const toastDiv = document . createElement ( 'div' ) ;
@@ -442,9 +480,38 @@ document.addEventListener('DOMContentLoaded', function () {
442
480
if ( toastDiv . parentNode ) toastDiv . parentNode . removeChild ( toastDiv ) ;
443
481
} , 3000 ) ;
444
482
} ) ;
445
- } , 3000 ) ;
483
+ } ) ;
484
+
485
+ let cacheInput = document . getElementById ( 'cacheInput' ) ;
486
+ if ( cacheInput ) {
487
+ chrome . storage . local . get ( [ 'cacheInput' ] , function ( result ) {
488
+ if ( result . cacheInput ) {
489
+ cacheInput . value = result . cacheInput ;
490
+ } else {
491
+ cacheInput . value = 10 ;
492
+ }
493
+ } ) ;
494
+
495
+ cacheInput . addEventListener ( 'blur' , function ( ) {
496
+ let ttlValue = parseInt ( this . value ) ;
497
+ if ( isNaN ( ttlValue ) || ttlValue <= 0 || this . value . trim ( ) === '' ) {
498
+ ttlValue = 10 ;
499
+ this . value = ttlValue ;
500
+ this . style . borderColor = '#ef4444' ;
501
+ } else if ( ttlValue > 1440 ) {
502
+ ttlValue = 1440 ;
503
+ this . value = ttlValue ;
504
+ this . style . borderColor = '#f59e0b' ;
505
+ } else {
506
+ this . style . borderColor = '#10b981' ;
507
+ }
508
+
509
+ chrome . storage . local . set ( { cacheInput : ttlValue } , function ( ) {
510
+ console . log ( 'Cache TTL saved:' , ttlValue , 'minutes' ) ;
511
+ } ) ;
512
+ } ) ;
446
513
447
- orgInput . addEventListener ( 'input' , handleOrgInput ) ;
514
+ }
448
515
449
516
} ) ;
450
517
@@ -586,33 +653,3 @@ function toggleRadio(radio) {
586
653
} ) ;
587
654
}
588
655
589
- let cacheInput = document . getElementById ( 'cacheInput' ) ;
590
- if ( cacheInput ) {
591
- chrome . storage . local . get ( [ 'cacheInput' ] , function ( result ) {
592
- if ( result . cacheInput ) {
593
- cacheInput . value = result . cacheInput ;
594
- } else {
595
- cacheInput . value = 10 ;
596
- }
597
- } ) ;
598
-
599
- cacheInput . addEventListener ( 'blur' , function ( ) {
600
- let ttlValue = parseInt ( this . value ) ;
601
- if ( isNaN ( ttlValue ) || ttlValue <= 0 || this . value . trim ( ) === '' ) {
602
- ttlValue = 10 ;
603
- this . value = ttlValue ;
604
- this . style . borderColor = '#ef4444' ;
605
- } else if ( ttlValue > 1440 ) {
606
- ttlValue = 1440 ;
607
- this . value = ttlValue ;
608
- this . style . borderColor = '#f59e0b' ;
609
- } else {
610
- this . style . borderColor = '#10b981' ;
611
- }
612
-
613
- chrome . storage . local . set ( { cacheInput : ttlValue } , function ( ) {
614
- console . log ( 'Cache TTL saved:' , ttlValue , 'minutes' ) ;
615
- } ) ;
616
- } ) ;
617
-
618
- }
0 commit comments