From d1232ce72d45ddcabe14f9770a0f8117d8efe74d Mon Sep 17 00:00:00 2001 From: Sarah Vaupel Date: Mon, 2 Dec 2019 11:19:50 +0100 Subject: [PATCH] feat(hide-columns): hide empty columns per default --- .../src/utils/hide-columns/hide-columns.js | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/frontend/src/utils/hide-columns/hide-columns.js b/frontend/src/utils/hide-columns/hide-columns.js index 33de28005..f8d2cd755 100644 --- a/frontend/src/utils/hide-columns/hide-columns.js +++ b/frontend/src/utils/hide-columns/hide-columns.js @@ -5,6 +5,8 @@ import './hide-columns.scss'; const HIDE_COLUMNS_CONTAINER_IDENT = 'uw-hide-columns'; const TABLE_HEADER_IDENT = 'uw-hide-column-header'; +const ASYNC_TABLE_IDENT = 'uw-async-table'; + const TABLE_UTILS_ATTR = 'table-utils'; const TABLE_UTILS_CONTAINER_SELECTOR = `[${TABLE_UTILS_ATTR}]`; @@ -158,6 +160,8 @@ export class HideColumns { } updateColumnDisplay(columnIndex, hidden) { + let isColumnWithContent = false; + this._element.getElementsByTagName('tr').forEach(row => { const cell = row.cells[columnIndex]; if (cell) { @@ -165,9 +169,26 @@ export class HideColumns { cell.classList.add(CELL_HIDDEN_CLASS); } else { cell.classList.remove(CELL_HIDDEN_CLASS); + + // determine if this cell has content + if (cell.nodeName === 'TD') { + let cellHasContent = false; + if (this._elementWrapper.hasAttribute(ASYNC_TABLE_IDENT)) { + cell.children.forEach(child => { + cellHasContent = cellHasContent || !isEmptyElement(child); + }); + } else { + cellHasContent = !isEmptyElement(cell); + } + isColumnWithContent = isColumnWithContent || cellHasContent; + } } } }); + + if (!hidden && !isColumnWithContent) { + this.updateColumnDisplay(columnIndex, true); + } } updateHider(hider, hidden) { @@ -216,3 +237,12 @@ export class HideColumns { } } + +function isEmptyElement(element) { + for (let child of element.childNodes) { + if (child.nodeName !== '#comment') + return false; + } + return true; +} +