@@ -18,6 +18,7 @@ import {
18
18
Checkbox ,
19
19
Tooltip ,
20
20
Card ,
21
+ Spin ,
21
22
} from "antd" ;
22
23
import { Content } from "antd/es/layout/layout" ;
23
24
import {
@@ -293,8 +294,11 @@ export default function QuestionListPage() {
293
294
return ( ) => clearTimeout ( timeout ) ;
294
295
} , [ search ] ) ;
295
296
297
+ // Testcases
298
+
296
299
const [ visibleTests , setVisibleTests ] = useState < Test [ ] > ( [ ] ) ;
297
300
const [ hiddenTests , setHiddenTests ] = useState < Test [ ] > ( [ ] ) ;
301
+ const [ isTestsLoading , setIsTestsLoading ] = useState < boolean > ( true ) ;
298
302
299
303
const handleAddVisibleTest = ( ) => {
300
304
const newKey = uuidv4 ( ) ;
@@ -342,38 +346,41 @@ export default function QuestionListPage() {
342
346
} ;
343
347
344
348
async function fetchTestsForQuestion ( questionId : string ) {
345
- try {
346
- const response = await ReadAllTestcases ( questionId ) ; // Replace with the actual API call to fetch tests
347
- const { visibleTests, hiddenTests } = response ;
349
+ setIsTestsLoading ( true ) ;
350
+ ReadAllTestcases ( questionId )
351
+ . then ( ( response ) => {
352
+ const { visibleTests, hiddenTests } = response ;
348
353
349
- // Add a unique key to each test
350
- if ( visibleTests ) {
351
- setVisibleTests (
352
- visibleTests . map ( ( test ) => ( {
353
- ...test ,
354
- key : uuidv4 ( ) ,
355
- } ) )
356
- ) ;
357
- }
358
- if ( hiddenTests ) {
359
- setHiddenTests (
360
- hiddenTests . map ( ( test ) => ( {
361
- ...test ,
362
- key : uuidv4 ( ) ,
363
- } ) )
364
- ) ;
365
- }
366
- } catch ( err ) {
367
- error ( "Error fetching tests for question." ) ;
368
- }
354
+ // Add a unique key to each test
355
+ if ( visibleTests ) {
356
+ setVisibleTests (
357
+ visibleTests . map ( ( test ) => ( {
358
+ ...test ,
359
+ key : uuidv4 ( ) ,
360
+ } ) )
361
+ ) ;
362
+ }
363
+ if ( hiddenTests ) {
364
+ setHiddenTests (
365
+ hiddenTests . map ( ( test ) => ( {
366
+ ...test ,
367
+ key : uuidv4 ( ) ,
368
+ } ) )
369
+ ) ;
370
+ }
371
+ } )
372
+ . catch ( ( err ) => {
373
+ error ( "Error fetching tests for question." ) ;
374
+ } )
375
+ . finally ( ( ) => {
376
+ setIsTestsLoading ( false ) ;
377
+ } ) ;
369
378
}
370
379
371
380
async function deleteTestsByDocRefId ( docRefId : string ) {
372
- try {
373
- await DeleteTestcases ( docRefId ) ; // Replace with the actual API call
374
- } catch ( err ) {
381
+ await DeleteTestcases ( docRefId ) . catch ( ( e ) => {
375
382
error ( "Error deleting tests associated with the question." ) ;
376
- }
383
+ } ) ;
377
384
}
378
385
379
386
// Table column specification
@@ -533,69 +540,75 @@ export default function QuestionListPage() {
533
540
}
534
541
key = "1"
535
542
>
536
- < Tabs
537
- type = "editable-card"
538
- onEdit = { ( targetKey , action ) =>
539
- action === "add"
540
- ? handleAddVisibleTest ( )
541
- : handleRemoveVisibleTest ( targetKey . toString ( ) )
542
- }
543
- >
544
- { visibleTests . map ( ( test : Test , index : number ) => (
545
- < TabPane
546
- tab = { `Test ${ index + 1 } ` } // Dynamic numbering based on index
547
- key = { test . key }
548
- closable = { visibleTests . length > 1 } // Restrict removing if only one visible test
549
- >
550
- < Form . Item
551
- label = "Input"
552
- name = { `visible-input-${ test . key } ` }
553
- rules = { [
554
- {
555
- required : true ,
556
- message : "Please enter input value" ,
557
- } ,
558
- ] }
559
- >
560
- < Input
561
- placeholder = "Input"
562
- value = { test . input }
563
- onChange = { ( e ) => {
564
- handleTestChange (
565
- "visible" ,
566
- index ,
567
- e . target . value ,
568
- undefined
569
- ) ;
570
- } }
571
- />
572
- </ Form . Item >
573
- < Form . Item
574
- label = "Expected"
575
- name = { `visible-expected-${ test . key } ` }
576
- rules = { [
577
- {
578
- required : true ,
579
- message : "Please enter expected value" ,
580
- } ,
581
- ] }
543
+ { isTestsLoading ? (
544
+ < Spin style = { { justifySelf : "center" } } />
545
+ ) : (
546
+ < Tabs
547
+ type = "editable-card"
548
+ onEdit = { ( targetKey , action ) =>
549
+ action === "add"
550
+ ? handleAddVisibleTest ( )
551
+ : handleRemoveVisibleTest ( targetKey . toString ( ) )
552
+ }
553
+ >
554
+ { visibleTests . map ( ( test : Test , index : number ) => (
555
+ < TabPane
556
+ tab = { `Test ${ index + 1 } ` } // Dynamic numbering based on index
557
+ key = { test . key }
558
+ closable = { visibleTests . length > 1 } // Restrict removing if only one visible test
582
559
>
583
- < Input
584
- placeholder = "Expected"
585
- value = { test . expected }
586
- onChange = { ( e ) => {
587
- handleTestChange (
588
- "visible" ,
589
- index ,
590
- undefined ,
591
- e . target . value
592
- ) ;
593
- } }
594
- />
595
- </ Form . Item >
596
- </ TabPane >
597
- ) ) }
598
- </ Tabs >
560
+ < Form . Item
561
+ label = "Input"
562
+ name = { `visible-input-${ test . key } ` }
563
+ initialValue = { test . input }
564
+ rules = { [
565
+ {
566
+ required : true ,
567
+ message : "Please enter input value" ,
568
+ } ,
569
+ ] }
570
+ >
571
+ < Input
572
+ placeholder = "Input"
573
+ value = { test . input }
574
+ onChange = { ( e ) => {
575
+ handleTestChange (
576
+ "visible" ,
577
+ index ,
578
+ e . target . value ,
579
+ undefined
580
+ ) ;
581
+ } }
582
+ />
583
+ </ Form . Item >
584
+ < Form . Item
585
+ label = "Expected"
586
+ name = { `visible-expected-${ test . key } ` }
587
+ initialValue = { test . expected }
588
+ rules = { [
589
+ {
590
+ required : true ,
591
+ message : "Please enter expected value" ,
592
+ } ,
593
+ ] }
594
+ >
595
+ < Input
596
+ placeholder = "Expected"
597
+ value = { test . expected }
598
+ onChange = { ( e ) => {
599
+ handleTestChange (
600
+ "visible" ,
601
+ index ,
602
+ undefined ,
603
+ e . target . value
604
+ ) ;
605
+ } }
606
+ />
607
+ </ Form . Item >
608
+ </ TabPane >
609
+ ) ) }
610
+ </ Tabs >
611
+ ) }
599
612
</ TabPane >
600
613
601
614
{ /* Hidden Tests Tab */ }
@@ -607,65 +620,71 @@ export default function QuestionListPage() {
607
620
}
608
621
key = "2"
609
622
>
610
- < Tabs
611
- type = "editable-card"
612
- onEdit = { ( targetKey , action ) =>
613
- action === "add"
614
- ? handleAddHiddenTest ( )
615
- : handleRemoveHiddenTest ( targetKey . toString ( ) )
616
- }
617
- >
618
- { hiddenTests . map ( ( test : Test , index : number ) => (
619
- < TabPane tab = { `Test ${ index + 1 } ` } key = { test . key } >
620
- < Form . Item
621
- label = "Input"
622
- name = { `hidden-input-${ test . key } ` }
623
- rules = { [
624
- {
625
- required : true ,
626
- message : "Please enter input value" ,
627
- } ,
628
- ] }
629
- >
630
- < Input
631
- placeholder = "Input"
632
- value = { test . input }
633
- onChange = { ( e ) => {
634
- handleTestChange (
635
- "hidden" ,
636
- index ,
637
- e . target . value ,
638
- undefined
639
- ) ;
640
- } }
641
- />
642
- </ Form . Item >
643
- < Form . Item
644
- label = "Expected"
645
- name = { `hidden-expected-${ test . key } ` }
646
- rules = { [
647
- {
648
- required : true ,
649
- message : "Please enter expected value" ,
650
- } ,
651
- ] }
652
- >
653
- < Input
654
- placeholder = "Expected"
655
- value = { test . expected }
656
- onChange = { ( e ) => {
657
- handleTestChange (
658
- "hidden" ,
659
- index ,
660
- undefined ,
661
- e . target . value
662
- ) ;
663
- } }
664
- />
665
- </ Form . Item >
666
- </ TabPane >
667
- ) ) }
668
- </ Tabs >
623
+ { isTestsLoading ? (
624
+ < Spin />
625
+ ) : (
626
+ < Tabs
627
+ type = "editable-card"
628
+ onEdit = { ( targetKey , action ) =>
629
+ action === "add"
630
+ ? handleAddHiddenTest ( )
631
+ : handleRemoveHiddenTest ( targetKey . toString ( ) )
632
+ }
633
+ >
634
+ { hiddenTests . map ( ( test : Test , index : number ) => (
635
+ < TabPane tab = { `Test ${ index + 1 } ` } key = { test . key } >
636
+ < Form . Item
637
+ label = "Input"
638
+ name = { `hidden-input-${ test . key } ` }
639
+ initialValue = { test . input }
640
+ rules = { [
641
+ {
642
+ required : true ,
643
+ message : "Please enter input value" ,
644
+ } ,
645
+ ] }
646
+ >
647
+ < Input
648
+ placeholder = "Input"
649
+ value = { test . input }
650
+ onChange = { ( e ) => {
651
+ handleTestChange (
652
+ "hidden" ,
653
+ index ,
654
+ e . target . value ,
655
+ undefined
656
+ ) ;
657
+ } }
658
+ />
659
+ </ Form . Item >
660
+ < Form . Item
661
+ label = "Expected"
662
+ name = { `hidden-expected-${ test . key } ` }
663
+ initialValue = { test . expected }
664
+ rules = { [
665
+ {
666
+ required : true ,
667
+ message : "Please enter expected value" ,
668
+ } ,
669
+ ] }
670
+ >
671
+ < Input
672
+ placeholder = "Expected"
673
+ value = { test . expected }
674
+ onChange = { ( e ) => {
675
+ handleTestChange (
676
+ "hidden" ,
677
+ index ,
678
+ undefined ,
679
+ e . target . value
680
+ ) ;
681
+ } }
682
+ />
683
+ </ Form . Item >
684
+ </ TabPane >
685
+ ) ) }
686
+ </ Tabs >
687
+ ) }
669
688
</ TabPane >
670
689
</ Tabs >
671
690
< Form . Item
0 commit comments