diff --git a/frontend/src/components/quarantine/QuarantineList.vue b/frontend/src/components/quarantine/QuarantineList.vue
index bc3df8c65..625455afe 100644
--- a/frontend/src/components/quarantine/QuarantineList.vue
+++ b/frontend/src/components/quarantine/QuarantineList.vue
@@ -27,17 +27,37 @@
:placeholder="$gettext('Search in messages')"
variant="outlined"
single-line
- flat
hide-details
- density="compact"
class="flex-grow-0 w-33 mr-4"
clearable
+ density="compact"
@click:clear="fetchContent"
@keyup.enter="fetchContent"
>
+
+
+
+
+
+
+
+
+
+
+
+
@@ -87,6 +107,36 @@
+
+
+
+ {{ $gettext('Display') }}
+
+
+
+
+
+ {{ item.raw.label }}
+
+
+
+
@@ -128,9 +178,25 @@ const itemsPerPageR = ref(10)
const loading = ref(false)
const messages = ref([])
const search = ref('')
+const searchCriteria = ref('both')
const selected = ref([])
const sortByR = ref([])
const totalMessages = ref(0)
+const typeFilter = ref('all')
+
+const messageTypes = [
+ { color: '', key: 'all', label: 'All' },
+ { color: 'success', key: 'C', label: 'Clean' },
+ { color: 'error', key: 'S', label: 'Spam' },
+ { color: 'warning', key: 'Y', label: 'Spammy' },
+ { color: 'error', key: 'V', label: 'Virus' },
+ { color: 'warning', key: 'H', label: 'Bad Header' },
+ { color: 'warning', key: 'M', label: 'Bad MIME' },
+ { color: 'warning', key: 'B', label: 'Banned' },
+ { color: 'warning', key: 'O', label: 'Over sized' },
+ { color: 'warning', key: 'T', label: 'MTA error' },
+ { color: '', key: 'U', label: 'Unchecked' },
+]
const headers = [
{ title: '', key: 'type' },
@@ -184,6 +250,10 @@ const _fetchContent = async () => {
}
if (search.value !== '') {
params.search = search.value
+ params.criteria = searchCriteria.value
+ }
+ if (typeFilter.value !== 'all') {
+ params.msgtype = typeFilter.value
}
try {
const resp = await api.getQuarantineContent(params)
@@ -262,8 +332,6 @@ const markSelectionAsSpam = async () => {
const markSelectionAsHam = async () => {
await markSelection('ham')
}
-
-const submitSearch = () => {}