From 5bae461211ca0250150ce50d143d1e0f91ad84f7 Mon Sep 17 00:00:00 2001 From: Corban-Lee Jones Date: Sat, 3 Aug 2024 10:00:58 +0100 Subject: [PATCH] deletion modal implementation --- apps/static/js/home/content.js | 37 ++++++++----- apps/static/js/home/filters.js | 79 ++++++++++++++++++---------- apps/static/js/home/index.js | 11 ++++ apps/static/js/home/subscriptions.js | 25 +++------ 4 files changed, 92 insertions(+), 60 deletions(-) diff --git a/apps/static/js/home/content.js b/apps/static/js/home/content.js index aa94517..1462222 100644 --- a/apps/static/js/home/content.js +++ b/apps/static/js/home/content.js @@ -146,24 +146,35 @@ async function goToSubscription(subId) { await showEditSubModal(subId); } + +// #region Delete Content + async function deleteSelectedContent() { + const rows = contentTable.rows(".selected").data().toArray(); + const names = rows.map(row => { return row.title }); + const namesString = arrayToHtmlList(names, true).prop("outerHTML"); + const multiple = names.length > 1; - var rows = contentTable.rows(".selected").data(); - $.each(rows, async function() { - await deleteTrackedContent(this.id); - showToast( - "success", - "Deletion Successful", - `This content may appear again under the ${this.subscription.name} Subscription:

${this.guid}`, - 10000 - ); - }); + await confirmDeleteModal( + `Confirm ${multiple ? "Multiple Deletions" : "Deletion"}`, + `Do you wish to permanently delete ${multiple ? "these" : "this"} ${names.length} content${multiple ? "s" : ""}?

${namesString}`, + async () => { + rows.forEach(async row => { await deleteTrackedContent(row.id) }); - setTimeout(async () => { - await loadContent(getCurrentlyActiveServer().guild_id); - }, 600) + showToast( + "danger", + `Deleted ${names.length} Content${multiple ? "s" : ""}`, + `${arrayToHtmlList(names, false).prop("outerHTML")}`, + 12000 + ); + }, + null + ); } +// #endregion + + function clearExistingContentRows() { $("#contentTable thead .table-select-all").prop("checked", false).prop("indeterminate", false); contentTable.clear().draw(false); diff --git a/apps/static/js/home/filters.js b/apps/static/js/home/filters.js index c6e83b8..83cfd42 100644 --- a/apps/static/js/home/filters.js +++ b/apps/static/js/home/filters.js @@ -247,36 +247,57 @@ $(document).on("selectedServerChange", async function() { await loadFilters(activeServer.guild_id); }); -async function deleteSelectedFilters() { - var rows = filtersTable.rows(".selected").data(); - $.each(rows, async function() { - await deleteFilter(this.id); - showToast( - "success", - "Deletion Successful", - `Content Filter ${this.name} has been erased.`, - 10000 - ); - }) - - setTimeout(async () => { - const guildId = getCurrentlyActiveServer().guild_id; - await loadFilters(guildId); - loadFilterOptions(guildId); - }, 500) -} +// #region Delete Filters $("#deleteEditFilter").on("click", async function() { - const filterId = $("#filterId").val(); - const row = filtersTable.row(function(index, row) {row.id == id}).data(); - alert(filterId + JSON.stringify(row, null, 4)) - await deleteFilter(filterId); - await loadFilters(getCurrentlyActiveServer().guild_id); + const filterId = parseInt($("#filterId").val()); + const filter = filtersTable.row(function(idx, row) { return row.id === filterId }).data(); + $("#filterFormModal").modal("hide"); - showToast( - "success", - "Deletion Successful", - `Content Filter ${row.name} has been erased.`, - 10000 + + await confirmDeleteModal( + "Confirm Deletion", + `Do you wish to permanently delete ${filter.name}?`, + async () => { + await deleteFilter(filterId); + await loadFilters(getCurrentlyActiveServer().guild_id); + + showToast( + "danger", + "Deleted a Filter", + filter.name, + 12000 + ); + }, + async () => { + $("#filterFormModal").modal("show"); + } ); -}); \ No newline at end of file +}); + +async function deleteSelectedFilters() { + const rows = filtersTable.rows(".selected").data().toArray(); + const names = rows.map(row => row.name); + const namesString = arrayToHtmlList(names, true).prop("outerHTML"); + const multiple = names.length > 1; + + await confirmDeleteModal( + `Confirm ${multiple ? "Multiple Deletions" : "Deletion"}`, + `Do you wish to permanently delete ${multiple ? "these" : "this"} ${names.length} filter${multiple ? "s" : ""}?

${namesString}`, + async () => { + rows.forEach(async row => { await deleteFilter(row.id) }); + + showToast( + "danger", + `Delete ${names.length} Subscription${multiple ? "s" : ""}`, + `${arrayToHtmlList(names, false).prop("outerHTML")}`, + 12000 + ); + + await loadFilters(getCurrentlyActiveServer().guild_id); + }, + null + ); +} + +// #endregion diff --git a/apps/static/js/home/index.js b/apps/static/js/home/index.js index f1d25d7..bfdc881 100644 --- a/apps/static/js/home/index.js +++ b/apps/static/js/home/index.js @@ -157,4 +157,15 @@ async function confirmDeleteModal(title, description, acceptFunc, declineFunc) { $modal.modal("hide"); }); $modal.modal("show"); +} + +function arrayToHtmlList(array, bold=false) { + $ul = $("