diff --git a/frontend/src/components/account/FilterForm.vue b/frontend/src/components/account/FilterForm.vue
index 42add6e18..224b9cb0a 100644
--- a/frontend/src/components/account/FilterForm.vue
+++ b/frontend/src/components/account/FilterForm.vue
@@ -31,55 +31,57 @@
value="all"
/>
-
-
-
-
-
-
+
+
-
+
+
+
+
+
+
{{ $gettext('Actions') }}
@@ -143,6 +145,7 @@
@@ -175,6 +178,7 @@ const conditionTemplates = ref([])
const actionTemplates = ref([])
const formRef = ref()
const form = ref(getInitialFormContent())
+const working = ref(false)
const title = computed(() => {
return (props.filter) ? $gettext('Edit filter') : $gettext('New filter')
@@ -266,6 +270,7 @@ async function submit() {
if (!valid) {
return
}
+ working.value = true
let msg
const data = JSON.parse(JSON.stringify(form.value))
for (const action of data.actions) {
@@ -288,6 +293,8 @@ async function submit() {
busStore.displayNotification({ msg: err.response.data.error, type: 'error' })
}
return
+ } finally {
+ working.value = false
}
busStore.displayNotification({ msg })
close()
diff --git a/frontend/src/components/account/FilterSetForm.vue b/frontend/src/components/account/FilterSetForm.vue
index 43c69e266..864bfb960 100644
--- a/frontend/src/components/account/FilterSetForm.vue
+++ b/frontend/src/components/account/FilterSetForm.vue
@@ -36,13 +36,18 @@
diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js
index 9c0612c9e..a322c73c8 100644
--- a/frontend/src/router/index.js
+++ b/frontend/src/router/index.js
@@ -257,7 +257,7 @@ const routes = [
},
children: [
{
- path: 'filters',
+ path: 'filters/:filterset?',
name: 'AccountFilters',
component: () => import('@/views/account/FiltersView.vue'),
meta: {
diff --git a/frontend/src/views/account/FiltersView.vue b/frontend/src/views/account/FiltersView.vue
index ed9e4ca94..2ff2c79de 100644
--- a/frontend/src/views/account/FiltersView.vue
+++ b/frontend/src/views/account/FiltersView.vue
@@ -8,7 +8,7 @@
v-model="currentFilterSet"
:label="$gettext('Select a filter set')"
:items="filterSets"
- item-title="name"
+ :item-title="getFilterSetName"
return-object
variant="outlined"
hide-details
@@ -35,7 +35,7 @@
@@ -103,6 +103,7 @@
diff --git a/modoboa/sievefilters/api/v2/serializers.py b/modoboa/sievefilters/api/v2/serializers.py
index e6ffb9362..fe6ce83c4 100644
--- a/modoboa/sievefilters/api/v2/serializers.py
+++ b/modoboa/sievefilters/api/v2/serializers.py
@@ -3,6 +3,7 @@
from typing import List, Tuple
from sievelib import commands
+from sievelib.factory import Filter
from rest_framework import serializers
@@ -37,7 +38,7 @@ class FilterSerializer(serializers.Serializer):
actions = ActionSerializer(many=True)
@staticmethod
- def from_filters(filters) -> "FilterSerializer":
+ def from_filters(filters: List[Filter]) -> "FilterSerializer":
result = []
for fobj in filters:
test = (