From 5a3b458f3e1b1951891745c14803bf2365f00392 Mon Sep 17 00:00:00 2001 From: Corban-Lee Date: Wed, 26 Jun 2024 11:14:17 +0100 Subject: [PATCH] abstracted table functions --- apps/static/js/home/index.js | 5 ++ apps/static/js/home/subscriptions.js | 94 +++++----------------- apps/static/js/table.js | 64 +++++++++++++++ apps/templates/home/includes/submodal.html | 4 +- apps/templates/home/index.html | 1 + 5 files changed, 94 insertions(+), 74 deletions(-) create mode 100644 apps/static/js/table.js diff --git a/apps/static/js/home/index.js b/apps/static/js/home/index.js index bb896d1..c4da33c 100644 --- a/apps/static/js/home/index.js +++ b/apps/static/js/home/index.js @@ -5,10 +5,15 @@ $(document).ready(async function() { $("#subscriptionsTab").click(); + // Bind table select checkboxes bindTableCheckboxes("#subTable", subTable, "#deleteSelectedSubscriptionsBtn"); bindTableCheckboxes("#filtersTable", filtersTable, "#deleteSelectedFiltersBtn"); bindTableCheckboxes("#contentTable", contentTable, "#deleteSelectedContentBtn") + // Bind pagination - subTable + await bindTablePagination("#subPagination", loadSubscriptions); + await bindTablePaginationResizer("#subTablePageSize", loadSubscriptions); + await loadSavedGuilds(); await loadServerOptions(); }); diff --git a/apps/static/js/home/subscriptions.js b/apps/static/js/home/subscriptions.js index c8a1311..95af676 100644 --- a/apps/static/js/home/subscriptions.js +++ b/apps/static/js/home/subscriptions.js @@ -92,9 +92,9 @@ function initSubscriptionTable() { ] }); - subTable.on('page.dt length.dt', function() { - loadSubscriptions(getCurrentlyActiveServer().guild_id); - }); + // subTable.on('page.dt length.dt', async function() { + // await loadSubscriptions(getCurrentlyActiveServer().guild_id); + // }); } $("#subTable").on("change", ".sub-toggle-active", async function () { @@ -120,6 +120,10 @@ $("#subTable").on("change", ".sub-toggle-active", async function () { sub.guild_id, sub.extra_notes, sub.filters, + { + title: sub.article_title_mutators.map(mutator => mutator.id), + desc: sub.article_desc_mutators.map(mutator => mutator.id) + }, active, handleErrorMsg=false ); @@ -133,7 +137,7 @@ $("#subTable").on("change", ".sub-toggle-active", async function () { ); } catch (error) { - console.error(error); + console.error(error); showToast( "danger", "Error Updating Subscription", @@ -215,6 +219,11 @@ $("#subForm").on("submit", async function(event) { var subPrimaryKey = await saveSubscription(id, name, url, guildId, extraNotes, subFilters, subMutators, active); + if (!subPrimaryKey) { + alert("prevented /subscriptions/false/subchannels"); + return + } + await deleteSubChannels(subPrimaryKey); subChannels.forEach(async channelId => { await saveSubChannel(channelId, subPrimaryKey); @@ -245,6 +254,8 @@ async function saveSubscription(id, name, url, guildId, extraNotes, filters, mut else response = await editSubscription(id, formData); } catch (err) { + console.error(err) + if (handleErrorMsg) showToast("danger", "Subscription Error", err.responseText, 18000); @@ -296,8 +307,10 @@ async function loadSubscriptions(guildId, page=1, pageSize=null) { try { const subscriptions = await getSubscriptions(guildId, page, pageSize); subTable.rows.add(subscriptions.results).draw(false); - handleSubPagination(page, pageSize, subscriptions.count, subscriptions.next, subscriptions.previous); - handleSubPageInfo(subscriptions.results.length, subscriptions.count); + + updateTablePagination("#subPagination", page, pageSize, subscriptions.count, subscriptions.next, subscriptions.previous); + updateTablePaginationInfo("#subTablePageInfo", subscriptions.results.length, subscriptions.count); + $("#subTable thead .table-select-all").prop("disabled", subscriptions.results.length === 0); console.debug("loading subs, " + subscriptions.results.length + " found"); } @@ -307,69 +320,6 @@ async function loadSubscriptions(guildId, page=1, pageSize=null) { } } -$("#subTablePageSize").on("change", async function() { - const page = 1; // reset to page 1 to ensure the page exists. - const pageSize = $(this).val(); - - loadSubscriptions(getCurrentlyActiveServer().guild_id, page, pageSize); -}); - -function handleSubPageInfo(showing, total) { - $("#subTablePageInfo .pageinfo-showing").text(showing); - $("#subTablePageInfo .pageinfo-total").text(total); -} - -// Update the UI pagination options according to the passed data. -function handleSubPagination(currentPage, pageSize, totalItems, nextExists, prevExists) { - - $("#subPagination").attr("data-page", currentPage); - - // Remove existing page-specific buttons - $("#subPagination .page-pick").remove(); - - // Determine states of 'previous page' and 'next page' buttons - $("#subPagination .page-prev").toggleClass("disabled", !prevExists).attr("tabindex", prevExists ? "" : "-1"); - $("#subPagination .page-next").toggleClass("disabled", !nextExists).attr("tabindex", nextExists ? "" : "-1"); - - // Calculate amount of pages to account for - const pages = Math.max(Math.ceil(totalItems / pageSize), 1); - - // Create a button for each page - for (let i = 1; i < pages + 1; i++) { - let pageItem = $("
  • ").addClass("page-item"); - let pageLink = $("
  • +