about summary refs log tree commit diff
path: root/uploader/static/js/datatables.js
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2025-03-11 16:50:04 -0500
committerFrederick Muriuki Muriithi2025-03-11 16:58:43 -0500
commitcfa33d211372d40edcd35d2c0d74daf261fe6bf3 (patch)
tree9de7a84e4e87c693d7b54ca2ac4271e720313a7d /uploader/static/js/datatables.js
parentef71af77671669531bbc07c7363511117b7d13e9 (diff)
downloadgn-uploader-cfa33d211372d40edcd35d2c0d74daf261fe6bf3.tar.gz
Extract common DataTables into a reusable function.
Diffstat (limited to 'uploader/static/js/datatables.js')
-rw-r--r--uploader/static/js/datatables.js60
1 files changed, 59 insertions, 1 deletions
diff --git a/uploader/static/js/datatables.js b/uploader/static/js/datatables.js
index 8d54a84..9782a60 100644
--- a/uploader/static/js/datatables.js
+++ b/uploader/static/js/datatables.js
@@ -54,4 +54,62 @@ var dtAddRowClickHandler = (tableId) => {
 var dtAddCommonHandlers = (tableId) => {
     dtAddRowSelectionHandler(tableId);
     dtAddRowClickHandler(tableId);
-}
+};
+
+var addTableLength = (menuList, lengthToAdd, dataLength) => {
+    if(dataLength >= lengthToAdd) {
+        newList = structuredClone(menuList);//menuList.slice(0, menuList.length); // shallow copy
+        newList.push(lengthToAdd);
+        return newList;
+    }
+    return menuList;
+};
+
+var defaultLengthMenu = (data) => {
+    menuList = []
+    var lengths = [10, 25, 50, 100, 1000, data.length];
+    lengths.forEach((len) => {
+        menuList = addTableLength(menuList, len, data.length);
+    });
+    return menuList;
+};
+
+var buildDataTable = (tableId, data = [], columns = [], userSettings = {}) => {
+    var defaultSettings = {
+        responsive: true,
+        /* == Scroller settings == */
+        scroller: true,
+        paging: true, // MUST be true for scroller to work
+        sDom: "iti",
+        scrollY: "100vh",
+        scrollCollapse: true,
+        /* == END: Scroller settings == */
+        lengthMenu: defaultLengthMenu(data),
+        language: {
+            processing: "Processing… Please wait.",
+            loadingRecords: "Loading population — Please wait.",
+            lengthMenu: "Show _MENU_ populations",
+            info: "Showing _START_ to _END_ of _TOTAL_ populations"
+        },
+        data: data,
+        columns: columns,
+        drawCallback: (settings) => {
+            $(this[0]).find("tbody tr").each((idx, row) => {
+                var arow = $(row);
+                var checkboxOrRadio = arow.find(".chk-row-select");
+                if (checkboxOrRadio) {
+                    if (arow.hasClass("selected")) {
+                        checkboxOrRadio.prop("checked", true);
+                    } else {
+                        checkboxOrRadio.prop("checked", false);
+                    }
+                }
+            });
+        }
+    }
+    var theDataTable = $(tableId).DataTable({
+        ...defaultSettings,
+        ...userSettings
+    });
+    return theDataTable;
+};