@@ -28,49 +28,51 @@ const renderStatic = () => {
28
28
renderEnvironmentTable ( )
29
29
}
30
30
31
+ const addItemToggleListener = ( elem ) => {
32
+ elem . addEventListener ( 'click' , ( { target } ) => {
33
+ const id = target . parentElement . dataset . id
34
+ manager . toggleCollapsedItem ( id )
35
+
36
+ const collapsedIds = getCollapsedIds ( )
37
+ if ( collapsedIds . includes ( id ) ) {
38
+ const updated = collapsedIds . filter ( ( item ) => item !== id )
39
+ setCollapsedIds ( updated )
40
+ } else {
41
+ collapsedIds . push ( id )
42
+ setCollapsedIds ( collapsedIds )
43
+ }
44
+ redraw ( )
45
+ } )
46
+ }
47
+
31
48
const renderContent = ( tests ) => {
32
49
const sortAttr = getSort ( manager . initialSort )
33
50
const sortAsc = JSON . parse ( getSortDirection ( ) )
34
51
const rows = tests . map ( dom . getResultTBody )
35
52
const table = document . getElementById ( 'results-table' )
36
- const tableHeader = document . getElementById ( 'template_results-table__head' ) . content . cloneNode ( true )
53
+ const tableHeader = document . getElementById ( 'results-table-head' )
54
+
55
+ const newTable = document . createElement ( 'table' )
56
+ newTable . id = 'results-table'
37
57
38
- removeChildren ( table )
58
+ // remove all sorting classes and set the relevant
59
+ findAll ( '.sortable' , tableHeader ) . forEach ( ( elem ) => elem . classList . remove ( 'asc' , 'desc' ) )
60
+ tableHeader . querySelector ( `.sortable[data-column-type="${ sortAttr } "]` ) . classList . add ( sortAsc ? 'desc' : 'asc' )
61
+ newTable . appendChild ( tableHeader )
39
62
40
- tableHeader . querySelector ( `.sortable[data-column-type="${ sortAttr } "]` ) ?. classList . add ( sortAsc ? 'desc' : 'asc' )
41
- table . appendChild ( tableHeader )
42
63
if ( ! rows . length ) {
43
64
const emptyTable = document . getElementById ( 'template_results-table__body--empty' ) . content . cloneNode ( true )
44
- table . appendChild ( emptyTable )
45
- }
46
-
47
- rows . forEach ( ( row ) => ! ! row && table . appendChild ( row ) )
48
-
49
- findAll ( '.sortable' ) . forEach ( ( elem ) => {
50
- elem . addEventListener ( 'click' , ( evt ) => {
51
- const { target : element } = evt
52
- const { columnType } = element . dataset
53
- doSort ( columnType )
54
- redraw ( )
55
- } )
56
- } )
57
-
58
- findAll ( '.collapsible td:not(.col-links' ) . forEach ( ( elem ) => {
59
- elem . addEventListener ( 'click' , ( { target } ) => {
60
- const id = target . parentElement . dataset . id
61
- manager . toggleCollapsedItem ( id )
62
-
63
- const collapsedIds = getCollapsedIds ( )
64
- if ( collapsedIds . includes ( id ) ) {
65
- const updated = collapsedIds . filter ( ( item ) => item !== id )
66
- setCollapsedIds ( updated )
67
- } else {
68
- collapsedIds . push ( id )
69
- setCollapsedIds ( collapsedIds )
65
+ newTable . appendChild ( emptyTable )
66
+ } else {
67
+ rows . forEach ( ( row ) => {
68
+ if ( ! ! row ) {
69
+ findAll ( '.collapsible td:not(.col-links' , row ) . forEach ( addItemToggleListener )
70
+ newTable . appendChild ( row )
70
71
}
71
- redraw ( )
72
72
} )
73
- } )
73
+ }
74
+
75
+ table . replaceWith ( newTable )
74
76
}
75
77
76
78
const renderDerived = ( ) => {
@@ -108,6 +110,16 @@ const bindEvents = () => {
108
110
findAll ( 'input[name="filter_checkbox"]' ) . forEach ( ( elem ) => {
109
111
elem . addEventListener ( 'click' , filterColumn )
110
112
} )
113
+
114
+ findAll ( '.sortable' ) . forEach ( ( elem ) => {
115
+ elem . addEventListener ( 'click' , ( evt ) => {
116
+ const { target : element } = evt
117
+ const { columnType } = element . dataset
118
+ doSort ( columnType )
119
+ redraw ( )
120
+ } )
121
+ } )
122
+
111
123
document . getElementById ( 'show_all_details' ) . addEventListener ( 'click' , ( ) => {
112
124
manager . allCollapsed = false
113
125
setCollapsedIds ( [ ] )
0 commit comments