backend implementation of filters
This commit is contained in:
parent
75536bdbea
commit
df4f68fae5
@ -135,7 +135,7 @@ class SubscriptionSerializer(DynamicModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Subscription
|
||||
fields = ("id", "name", "url", "guild_id", "channels_count", "creation_datetime", "extra_notes", "active")
|
||||
fields = ("id", "name", "url", "guild_id", "channels_count", "creation_datetime", "extra_notes", "filters", "active")
|
||||
|
||||
|
||||
class SavedGuildSerializer(DynamicModelSerializer):
|
||||
|
@ -173,7 +173,7 @@ class Subscription_ListView(generics.ListCreateAPIView):
|
||||
# queryset = Subscription.objects.all().order_by("-creation_datetime")
|
||||
|
||||
filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]
|
||||
filterset_fields = ["id", "name", "url", "guild_id", "creation_datetime", "extra_notes", "active"]
|
||||
filterset_fields = ["id", "name", "url", "guild_id", "creation_datetime", "extra_notes", "filters", "active"]
|
||||
search_fields = ["name", "extra_notes"]
|
||||
ordering_fields = ["creation_datetime", "guild_id"]
|
||||
|
||||
|
18
apps/home/migrations/0019_subscription_filters.py
Normal file
18
apps/home/migrations/0019_subscription_filters.py
Normal file
@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.0.1 on 2024-05-01 13:20
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('home', '0018_remove_filter_keywords_is_not_null'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='subscription',
|
||||
name='filters',
|
||||
field=models.ManyToManyField(to='home.filter'),
|
||||
),
|
||||
]
|
@ -216,6 +216,8 @@ class Subscription(models.Model):
|
||||
blank=True,
|
||||
)
|
||||
|
||||
filters = models.ManyToManyField(to="home.Filter")
|
||||
|
||||
active = models.BooleanField(
|
||||
default=True,
|
||||
)
|
||||
|
@ -7,7 +7,7 @@ async function ajaxRequest(url, method, data) {
|
||||
xhr.setRequestHeader("X-CSRFToken", CSRF_MiddlewareToken);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (data) {
|
||||
options.data = data;
|
||||
options.processData = false;
|
||||
|
@ -119,8 +119,6 @@ $("#filterForm").on("submit", async function(event) {
|
||||
regex = advancedFiltering ? $("#filterRegex").val() : "";
|
||||
guildId = getCurrentlyActiveServer().guild_id;
|
||||
|
||||
|
||||
|
||||
if (advancedFiltering) {
|
||||
keywords = "";
|
||||
}
|
||||
@ -133,6 +131,7 @@ $("#filterForm").on("submit", async function(event) {
|
||||
if (filterPrimaryKey) {
|
||||
showToast("success", "Filter Saved", "Filter ID " + filterPrimaryKey);
|
||||
await loadFilters(guildId);
|
||||
await loadFilterOptions(guildId);
|
||||
}
|
||||
|
||||
$("#filterFormModal").modal("hide");
|
||||
@ -187,3 +186,19 @@ $(document).on("selectedServerChange", async function() {
|
||||
const activeServer = getCurrentlyActiveServer();
|
||||
await loadFilters(activeServer.guild_id);
|
||||
});
|
||||
|
||||
$("#deleteSelectedFiltersBtn").on("click", async function() {
|
||||
|
||||
var rows = filtersTable.rows(".selected").data();
|
||||
$.each(rows, async function() {
|
||||
// alert(JSON.stringify(this, null, 4));
|
||||
await deleteFilter(this.id);
|
||||
showToast("danger", "Deleted Filter", "Filter ID: " + this.id)
|
||||
})
|
||||
|
||||
setTimeout(async () => {
|
||||
const guildId = getCurrentlyActiveServer().guild_id;
|
||||
await loadFilters(guildId);
|
||||
loadFilterOptions(guildId);
|
||||
}, 500)
|
||||
})
|
||||
|
@ -104,6 +104,9 @@ async function showEditSubModal(subId) {
|
||||
const channels = await getSubChannels(subscription.id);
|
||||
$("#subChannels").val("").change();
|
||||
$("#subChannels").val(channels.results.map(channel => channel.channel_id)).change();
|
||||
|
||||
$("#subFilters").val("").change();
|
||||
$("#subFilters").val(subscription.filters).change();
|
||||
}
|
||||
|
||||
$("#subId").val(subId);
|
||||
@ -118,9 +121,14 @@ $("#subForm").on("submit", async function(event) {
|
||||
url = $("#subUrl").val();
|
||||
guildId = getCurrentlyActiveServer().guild_id;
|
||||
extraNotes = $("#subExtraNotes").val();
|
||||
subChannels = $("#subChannels option:selected").toArray().map(item => item.value)
|
||||
subChannels = $("#subChannels option:selected").toArray().map(channel => channel.value);
|
||||
subFilters = $("#subFilters option:selected").toArray().map(filter => parseInt(filter.value));
|
||||
active = true;
|
||||
|
||||
// alert(JSON.stringify(subFilters, null, 4));
|
||||
|
||||
var subPrimaryKey = await saveSubscription(id, name, url, guildId, extraNotes, subFilters, active);
|
||||
|
||||
var subPrimaryKey = await saveSubscription(id, name, url, guildId, extraNotes);
|
||||
await deleteSubChannels(subPrimaryKey);
|
||||
subChannels.forEach(async channelId => {
|
||||
await saveSubChannel(channelId, subPrimaryKey);
|
||||
@ -133,13 +141,14 @@ $("#subForm").on("submit", async function(event) {
|
||||
$("#subFormModal").modal("hide");
|
||||
});
|
||||
|
||||
async function saveSubscription(id, name, url, guildId, extraNotes) {
|
||||
async function saveSubscription(id, name, url, guildId, extraNotes, filters, active) {
|
||||
var formData = new FormData();
|
||||
formData.append("name", name);
|
||||
formData.append("url", url);
|
||||
formData.append("guild_id", guildId);
|
||||
formData.append("extra_notes", extraNotes);
|
||||
formData.append("active", true);
|
||||
filters.forEach(filter => formData.append("filters", filter));
|
||||
formData.append("active", active);
|
||||
|
||||
var response;
|
||||
|
||||
@ -213,9 +222,9 @@ $("#deleteSelectedSubscriptionsBtn").on("click", async function() {
|
||||
// alert(JSON.stringify(this, null, 4));
|
||||
await deleteSubscription(this.id);
|
||||
showToast("danger", "Deleted Subscription", "Subscription ID: " + this.id)
|
||||
})
|
||||
});
|
||||
|
||||
loadSubscriptions(getCurrentlyActiveServer().guild_id);
|
||||
await loadSubscriptions(getCurrentlyActiveServer().guild_id);
|
||||
})
|
||||
|
||||
async function loadChannelOptions(guildId) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user