From 5b68c15659a3abb6a4be0aec29ae083ab17ea9de Mon Sep 17 00:00:00 2001 From: Corban-Lee Jones Date: Tue, 18 Jun 2024 00:27:12 +0100 Subject: [PATCH] Mutators front-end --- apps/static/js/api.js | 6 ++ apps/static/js/home/content.js | 5 +- apps/static/js/home/subscriptions.js | 110 ++++++++++++++------- apps/templates/home/includes/submodal.html | 16 ++- 4 files changed, 90 insertions(+), 47 deletions(-) diff --git a/apps/static/js/api.js b/apps/static/js/api.js index 9b294d1..f658592 100644 --- a/apps/static/js/api.js +++ b/apps/static/js/api.js @@ -137,3 +137,9 @@ async function deleteTrackedContent(guid) { const encodedGuid = encodeURIComponent(guid); return await ajaxRequest(`/api/tracked-content/${encodedGuid}/`, "DELETE"); } + +// Mutators + +async function getMutators() { + return await ajaxRequest("/api/article-mutator/?page_size=25", "GET"); +} \ No newline at end of file diff --git a/apps/static/js/home/content.js b/apps/static/js/home/content.js index d2c68f3..17a01eb 100644 --- a/apps/static/js/home/content.js +++ b/apps/static/js/home/content.js @@ -29,6 +29,7 @@ function initContentTable() { return '' } }, + { data: "id", visible: false }, { title: "GUID", data: "guid", visible: false }, { title: "Name", @@ -72,8 +73,8 @@ $("#deleteSelectedContentBtn").on("click", async function() { var rows = contentTable.rows(".selected").data(); $.each(rows, async function() { - await deleteTrackedContent(this.guid); - showToast("danger", "Deleted Tracked Content", "It can now appear be sent again. Content GUID: " + this.guid); + await deleteTrackedContent(this.id); + showToast("danger", "Deleted Tracked Content", "It can now appear be sent again. Content ID: " + this.id); }); setTimeout(async () => { diff --git a/apps/static/js/home/subscriptions.js b/apps/static/js/home/subscriptions.js index ca14dd6..5af1b9e 100644 --- a/apps/static/js/home/subscriptions.js +++ b/apps/static/js/home/subscriptions.js @@ -149,7 +149,7 @@ async function showEditSubModal(subId) { $("#subFormModal .form-edit").hide(); $("#subChannels").val("").change(); $("#subFilters").val("").change(); - $("#subUwu").prop("checked", false); + $("#subMutators").val("").change(); $("#subActive").prop("checked", true); $("#subImagePreview img").attr("src", "").hide(); $("#subImagePreview small").show(); @@ -162,11 +162,13 @@ async function showEditSubModal(subId) { $("#subName").val(subscription.name); $("#subUrl").val(subscription.url); $("#subExtraNotes").val(subscription.extra_notes); - $("#subUwu").prop("checked", subscription.uwuify); $("#subActive").prop("checked", subscription.active); $("#subFormModal .form-create").hide(); $("#subFormModal .form-edit").show(); + $("#subMutators").val("").change(); + $("#subMutators").val(subscription.mutators.map(mutator => mutator.id)).change(); + const channels = await getSubChannels(subscription.id); $("#subChannels").val("").change(); $("#subChannels").val(channels.results.map(channel => channel.channel_id)).change(); @@ -190,11 +192,10 @@ $("#subForm").on("submit", async function(event) { uwuify = $("#subUwu").prop("checked"); subChannels = $("#subChannels option:selected").toArray().map(channel => channel.value); subFilters = $("#subFilters option:selected").toArray().map(filter => parseInt(filter.value)); - active = $("#subActive").prop("checked"); + subMutators = $("#subMutators option:selected").toArray().map(mutator => parseInt(mutator.value)); + active = true; - // alert(JSON.stringify(subFilters, null, 4)); - - var subPrimaryKey = await saveSubscription(id, name, url, guildId, extraNotes, uwuify, subFilters, active); + var subPrimaryKey = await saveSubscription(id, name, url, guildId, extraNotes, uwuify, subFilters, subMutators, active); await deleteSubChannels(subPrimaryKey); subChannels.forEach(async channelId => { @@ -208,7 +209,7 @@ $("#subForm").on("submit", async function(event) { $("#subFormModal").modal("hide"); }); -async function saveSubscription(id, name, url, guildId, extraNotes, uwuify, filters, active, handleErrorMsg=true) { +async function saveSubscription(id, name, url, guildId, extraNotes, uwuify, filters, mutators, active, handleErrorMsg=true) { var formData = new FormData(); formData.append("name", name); formData.append("url", url); @@ -216,6 +217,7 @@ async function saveSubscription(id, name, url, guildId, extraNotes, uwuify, filt formData.append("extra_notes", extraNotes); formData.append("uwuify", uwuify) filters.forEach(filter => formData.append("filters", filter)); + mutators.forEach(mutator => formData.append("mutators", mutator)); formData.append("active", active); var response; @@ -353,6 +355,7 @@ $(document).on("selectedServerChange", async function() { await loadSubscriptions(activeServer.guild_id); await loadChannelOptions(activeServer.guild_id); await loadFilterOptions(activeServer.guild_id); + await loadMutatorOptions(); }) // Dev button (to be removed) @@ -483,39 +486,74 @@ async function loadChannelOptions(guildId) { } } +async function loadMutatorOptions() { + + // Disable input while options are loading + $("#subMutators").prop("disabled", true); + + // Delete existing options + $("#subMutators option").each(function() { + if ($(this).val()) + $(this).remove(); + }); + + // Clear select2 input + $("#subMutators").val("").change(); + + try { + const mutators = await getMutators(); + console.log(JSON.stringify(mutators)); + + mutators.results.forEach(filter => { + $("#subMutators").append($("