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 = (