| 87 | } |
| 88 | |
| 89 | function getOrCreateSuiteElement(suite) { |
| 90 | if (suiteElementsMap.has(suite.name)) { |
| 91 | return suiteElementsMap.get(suite.name); |
| 92 | } |
| 93 | |
| 94 | // Create suite element components |
| 95 | let isCollapsed = false; |
| 96 | const $body = <div className="suite-body"></div>; |
| 97 | |
| 98 | const toggleCollapse = () => { |
| 99 | isCollapsed = !isCollapsed; |
| 100 | if (isCollapsed) { |
| 101 | $body.classList.add("collapsed"); |
| 102 | } else { |
| 103 | $body.classList.remove("collapsed"); |
| 104 | } |
| 105 | }; |
| 106 | |
| 107 | const $header = ( |
| 108 | <div className="suite-header" onclick={toggleCollapse}> |
| 109 | <div className="suite-info"> |
| 110 | <span className="suite-status-icon"></span> |
| 111 | <span className="suite-title">{suite.name}</span> |
| 112 | </div> |
| 113 | <div className="suite-meta"> |
| 114 | <span className="suite-badge"></span> |
| 115 | </div> |
| 116 | </div> |
| 117 | ); |
| 118 | |
| 119 | const $el = ( |
| 120 | <div className="suite-card"> |
| 121 | {$header} |
| 122 | {$body} |
| 123 | </div> |
| 124 | ); |
| 125 | |
| 126 | if ($suiteList) { |
| 127 | $suiteList.append($el); |
| 128 | } |
| 129 | |
| 130 | const suiteData = { |
| 131 | el: $el, |
| 132 | header: $header, |
| 133 | body: $body, |
| 134 | statusIcon: $header.querySelector(".suite-status-icon"), |
| 135 | badge: $header.querySelector(".suite-badge"), |
| 136 | }; |
| 137 | |
| 138 | suiteElementsMap.set(suite.name, suiteData); |
| 139 | return suiteData; |
| 140 | } |
| 141 | |
| 142 | function updateSuiteElement(suite) { |
| 143 | const { body, statusIcon, badge } = getOrCreateSuiteElement(suite); |