Merge branch 'MDL-68506-master' of git://github.com/andrewnicols/moodle
[moodle.git] / lib / table / amd / src / dynamic.js
index 9a95950..aa1d030 100644 (file)
@@ -79,6 +79,7 @@ export const refreshTableContent = tableRoot => {
             lastinitial: tableRoot.dataset.tableLastInitial,
             pageNumber: tableRoot.dataset.tablePageNumber,
             pageSize: tableRoot.dataset.tablePageSize,
+            hiddenColumns: JSON.parse(tableRoot.dataset.tableHiddenColumns),
         }
     )
     .then(data => {
@@ -105,6 +106,7 @@ export const updateTable = (tableRoot, {
     lastInitial = null,
     pageNumber = null,
     pageSize = null,
+    hiddenColumns = null,
 } = {}, refreshContent = true) => {
     checkTableIsDynamic(tableRoot);
 
@@ -136,6 +138,11 @@ export const updateTable = (tableRoot, {
         tableRoot.dataset.tableFilters = JSON.stringify(filters);
     }
 
+    // Update hidden columns.
+    if (hiddenColumns) {
+        tableRoot.dataset.tableHiddenColumns = JSON.stringify(hiddenColumns);
+    }
+
     // Refresh.
     if (refreshContent) {
         return refreshTableContent(tableRoot);
@@ -211,6 +218,34 @@ export const setFirstInitial = (tableRoot, firstInitial, refreshContent = true)
 export const setLastInitial = (tableRoot, lastInitial, refreshContent = true) =>
     updateTable(tableRoot, {lastInitial}, refreshContent);
 
+/**
+ * Hide a column in the participants table.
+ *
+ * @param {HTMLElement} tableRoot
+ * @param {String} columnToHide
+ * @param {Bool} refreshContent
+ */
+export const hideColumn = (tableRoot, columnToHide, refreshContent = true) => {
+    const hiddenColumns = JSON.parse(tableRoot.dataset.tableHiddenColumns);
+    hiddenColumns.push(columnToHide);
+
+    updateTable(tableRoot, {hiddenColumns}, refreshContent);
+};
+
+/**
+ * Make a hidden column visible in the participants table.
+ *
+ * @param {HTMLElement} tableRoot
+ * @param {String} columnToShow
+ * @param {Bool} refreshContent
+ */
+export const showColumn = (tableRoot, columnToShow, refreshContent = true) => {
+    let hiddenColumns = JSON.parse(tableRoot.dataset.tableHiddenColumns);
+    hiddenColumns = hiddenColumns.filter(columnName => columnName !== columnToShow);
+
+    updateTable(tableRoot, {hiddenColumns}, refreshContent);
+};
+
 /**
  * Set up listeners to handle table updates.
  */
@@ -255,6 +290,21 @@ export const init = () => {
 
             setPageNumber(tableRoot, pageItem.dataset.pageNumber);
         }
+
+        const hide = e.target.closest(Selectors.table.links.hide);
+        if (hide) {
+            e.preventDefault();
+
+            hideColumn(tableRoot, hide.dataset.column);
+        }
+
+        const show = e.target.closest(Selectors.table.links.show);
+        if (show) {
+            e.preventDefault();
+
+            showColumn(tableRoot, show.dataset.column);
+        }
+
     });
 };