()
| 241 | } |
| 242 | |
| 243 | #syncSelection() { |
| 244 | const visibleCheckboxes = this.#visibleRows() |
| 245 | .map(row => row.querySelector('[data-table-select-row]')) |
| 246 | .filter(checkbox => checkbox && !checkbox.disabled); |
| 247 | const selectedCheckboxes = this.#rowCheckboxes().filter(checkbox => checkbox.checked); |
| 248 | |
| 249 | this.#rows.forEach(row => { |
| 250 | const checkbox = row.querySelector('[data-table-select-row]'); |
| 251 | row.toggleAttribute('data-selected', Boolean(checkbox?.checked)); |
| 252 | }); |
| 253 | |
| 254 | if (this.#selectAll) { |
| 255 | const visibleSelected = visibleCheckboxes.filter(checkbox => checkbox.checked).length; |
| 256 | this.#selectAll.checked = visibleCheckboxes.length > 0 && visibleSelected === visibleCheckboxes.length; |
| 257 | this.#selectAll.indeterminate = visibleSelected > 0 && visibleSelected < visibleCheckboxes.length; |
| 258 | } |
| 259 | |
| 260 | if (this.#selectedStatus) { |
| 261 | const count = selectedCheckboxes.length; |
| 262 | this.#selectedStatus.value = String(count); |
| 263 | this.#selectedStatus.textContent = count === 1 ? '1 selected' : `${count} selected`; |
| 264 | } |
| 265 | } |
| 266 | |
| 267 | #rowCheckboxes() { |
| 268 | return this.#rows |
no test coverage detected