@@ -89,6 +89,12 @@ export const createOfflineTableComponent = <
89
89
* The context in which the table is being rendered.
90
90
*/
91
91
readonly context : TContext ;
92
+
93
+ /**
94
+ * Called on pressing a row.
95
+ * @param row The row pressed.
96
+ */
97
+ onPressRow ?( row : TRow ) : void ;
92
98
} > => {
93
99
const rowViewBase : ViewStyle = {
94
100
width : `100%` ,
@@ -346,6 +352,7 @@ export const createOfflineTableComponent = <
346
352
sortDirection,
347
353
onSortChange,
348
354
context,
355
+ onPressRow,
349
356
} ) => {
350
357
let rows = [ ...data . rows ] ;
351
358
@@ -473,137 +480,161 @@ export const createOfflineTableComponent = <
473
480
{ rows . length === 0 ? (
474
481
< Text style = { styles . emptyText } > { whenEmpty } </ Text >
475
482
) : (
476
- rows . map ( ( row , index ) => (
477
- < View
478
- key = { String ( row [ schema . key ] ) }
479
- style = {
480
- index === 0
481
- ? styles . firstRowView
482
- : index % 2 === 0
483
- ? styles . oddRowView
484
- : styles . evenRowView
485
- }
486
- >
487
- { schema . columns . map ( ( column , columnIndex ) => {
488
- switch ( column . type ) {
489
- case `basic` : {
490
- const value = row [ column . key ] ;
491
-
492
- // TODO: why does TypeScript think this cannot be null, false or true?
493
- switch ( value as unknown ) {
494
- case null :
495
- return (
496
- < View
497
- key = { String ( columnIndex ) }
498
- style = { customCellStyles [ columnIndex ] }
499
- >
500
- { style . body . primitiveElements . null }
501
- </ View >
502
- ) ;
503
-
504
- case false :
505
- return (
506
- < View
507
- key = { String ( columnIndex ) }
508
- style = { customCellStyles [ columnIndex ] }
509
- >
510
- { style . body . primitiveElements . false }
511
- </ View >
512
- ) ;
513
-
514
- case true :
515
- return (
516
- < View
517
- key = { String ( columnIndex ) }
518
- style = { customCellStyles [ columnIndex ] }
519
- >
520
- { style . body . primitiveElements . true }
521
- </ View >
522
- ) ;
523
-
524
- default :
525
- return (
526
- < Text
527
- key = { String ( columnIndex ) }
528
- style = {
529
- index % 2 === 0
530
- ? oddRowCellStyles [ columnIndex ]
531
- : evenRowCellStyles [ columnIndex ]
532
- }
533
- >
534
- { value }
535
- </ Text >
536
- ) ;
537
- }
538
- }
483
+ rows . map ( ( row , index ) => {
484
+ const cells = schema . columns . map ( ( column , columnIndex ) => {
485
+ switch ( column . type ) {
486
+ case `basic` : {
487
+ const value = row [ column . key ] ;
488
+
489
+ // TODO: why does TypeScript think this cannot be null, false or true?
490
+ switch ( value as unknown ) {
491
+ case null :
492
+ return (
493
+ < View
494
+ key = { String ( columnIndex ) }
495
+ style = { customCellStyles [ columnIndex ] }
496
+ >
497
+ { style . body . primitiveElements . null }
498
+ </ View >
499
+ ) ;
539
500
540
- case `customText` : {
541
- const value = column . render (
542
- row [ column . key ] as never ,
543
- context
544
- ) ;
545
-
546
- // TODO: why does TypeScript think this cannot be null, false or true?
547
- switch ( value as unknown ) {
548
- case null :
549
- return (
550
- < View
551
- key = { String ( columnIndex ) }
552
- style = { customCellStyles [ columnIndex ] }
553
- >
554
- { style . body . primitiveElements . null }
555
- </ View >
556
- ) ;
557
-
558
- case false :
559
- return (
560
- < View
561
- key = { String ( columnIndex ) }
562
- style = { customCellStyles [ columnIndex ] }
563
- >
564
- { style . body . primitiveElements . false }
565
- </ View >
566
- ) ;
567
-
568
- case true :
569
- return (
570
- < View
571
- key = { String ( columnIndex ) }
572
- style = { customCellStyles [ columnIndex ] }
573
- >
574
- { style . body . primitiveElements . true }
575
- </ View >
576
- ) ;
577
-
578
- default :
579
- return (
580
- < Text
581
- key = { String ( columnIndex ) }
582
- style = {
583
- index % 2 === 0
584
- ? oddRowCellStyles [ columnIndex ]
585
- : evenRowCellStyles [ columnIndex ]
586
- }
587
- >
588
- { value }
589
- </ Text >
590
- ) ;
591
- }
501
+ case false :
502
+ return (
503
+ < View
504
+ key = { String ( columnIndex ) }
505
+ style = { customCellStyles [ columnIndex ] }
506
+ >
507
+ { style . body . primitiveElements . false }
508
+ </ View >
509
+ ) ;
510
+
511
+ case true :
512
+ return (
513
+ < View
514
+ key = { String ( columnIndex ) }
515
+ style = { customCellStyles [ columnIndex ] }
516
+ >
517
+ { style . body . primitiveElements . true }
518
+ </ View >
519
+ ) ;
520
+
521
+ default :
522
+ return (
523
+ < Text
524
+ key = { String ( columnIndex ) }
525
+ style = {
526
+ index % 2 === 0
527
+ ? oddRowCellStyles [ columnIndex ]
528
+ : evenRowCellStyles [ columnIndex ]
529
+ }
530
+ >
531
+ { value }
532
+ </ Text >
533
+ ) ;
592
534
}
535
+ }
536
+
537
+ case `customText` : {
538
+ const value = column . render (
539
+ row [ column . key ] as never ,
540
+ context
541
+ ) ;
542
+
543
+ // TODO: why does TypeScript think this cannot be null, false or true?
544
+ switch ( value as unknown ) {
545
+ case null :
546
+ return (
547
+ < View
548
+ key = { String ( columnIndex ) }
549
+ style = { customCellStyles [ columnIndex ] }
550
+ >
551
+ { style . body . primitiveElements . null }
552
+ </ View >
553
+ ) ;
554
+
555
+ case false :
556
+ return (
557
+ < View
558
+ key = { String ( columnIndex ) }
559
+ style = { customCellStyles [ columnIndex ] }
560
+ >
561
+ { style . body . primitiveElements . false }
562
+ </ View >
563
+ ) ;
593
564
594
- case `customElement` :
595
- return (
596
- < View
597
- key = { String ( columnIndex ) }
598
- style = { customCellStyles [ columnIndex ] }
599
- >
600
- { column . render ( row , context ) }
601
- </ View >
602
- ) ;
565
+ case true :
566
+ return (
567
+ < View
568
+ key = { String ( columnIndex ) }
569
+ style = { customCellStyles [ columnIndex ] }
570
+ >
571
+ { style . body . primitiveElements . true }
572
+ </ View >
573
+ ) ;
574
+
575
+ default :
576
+ return (
577
+ < Text
578
+ key = { String ( columnIndex ) }
579
+ style = {
580
+ index % 2 === 0
581
+ ? oddRowCellStyles [ columnIndex ]
582
+ : evenRowCellStyles [ columnIndex ]
583
+ }
584
+ >
585
+ { value }
586
+ </ Text >
587
+ ) ;
588
+ }
603
589
}
604
- } ) }
605
- </ View >
606
- ) )
590
+
591
+ case `customElement` :
592
+ return (
593
+ < View
594
+ key = { String ( columnIndex ) }
595
+ style = { customCellStyles [ columnIndex ] }
596
+ >
597
+ { column . render ( row , context ) }
598
+ </ View >
599
+ ) ;
600
+ }
601
+ } ) ;
602
+
603
+ if ( onPressRow === undefined ) {
604
+ return (
605
+ < View
606
+ key = { String ( row [ schema . key ] ) }
607
+ style = {
608
+ index === 0
609
+ ? styles . firstRowView
610
+ : index % 2 === 0
611
+ ? styles . oddRowView
612
+ : styles . evenRowView
613
+ }
614
+ >
615
+ { cells }
616
+ </ View >
617
+ ) ;
618
+ } else {
619
+ return (
620
+ < Hitbox
621
+ key = { String ( row [ schema . key ] ) }
622
+ style = {
623
+ index === 0
624
+ ? styles . firstRowView
625
+ : index % 2 === 0
626
+ ? styles . oddRowView
627
+ : styles . evenRowView
628
+ }
629
+ onPress = { ( ) => {
630
+ onPressRow ( row ) ;
631
+ } }
632
+ >
633
+ { cells }
634
+ </ Hitbox >
635
+ ) ;
636
+ }
637
+ } )
607
638
) }
608
639
</ View >
609
640
) ;
0 commit comments