diff --git a/dashboard/src/components/MailinglistDialog.vue b/dashboard/src/components/MailinglistDialog.vue index ed2313bed..e08769460 100644 --- a/dashboard/src/components/MailinglistDialog.vue +++ b/dashboard/src/components/MailinglistDialog.vue @@ -11,17 +11,17 @@ const mailinglistsModel = MailinglistsModel.create(); const dialog = useTemplateRef('dialog'); const busy = ref(false); -const formError = ref(''); +const formError = ref({}); const name = ref(''); const domain = ref(''); const mailinglist = ref(null); const membersText = ref(''); const membersOnly = ref(false); -const active = ref(false); +const active = ref(true); async function onSubmit() { busy.value = true; - formError.value = ''; + formError.value = {}; const data = { members: membersText.value.split('\n').map(m => m.trim()).filter(m => m), @@ -33,14 +33,18 @@ async function onSubmit() { const [error] = await mailinglistsModel.update(domain.value, name.value, data); if (error) { busy.value = false; - formError.value = error.body ? error.body.message : 'Internal error'; + if (error.status === 400 && error.body.message.indexOf('Invalid mail member') === 0) formError.value.members = error.body.message; + else if (error.status === 400) formError.value.name = error.body.message; + else formError.value.generic = error.body ? error.body.message : 'Internal error'; return console.error(error); } } else { const [error] = await mailinglistsModel.add(domain.value, name.value, data); if (error) { busy.value = false; - formError.value = error.body ? error.body.message : 'Internal error'; + if (error.status === 400 && error.body.message.indexOf('Invalid mail member') === 0) formError.value.members = error.body.message; + else if (error.status === 400) formError.value.name = error.body.message; + else formError.value.generic = error.body ? error.body.message : 'Internal error'; return console.error(error); } } @@ -53,13 +57,14 @@ async function onSubmit() { defineExpose({ async open(m = null) { busy.value = false; - formError.value = ''; + formError.value = {}; mailinglist.value = m; name.value = m ? m.name : ''; - domain.value = m ? m.domain : ''; + domain.value = m ? m.domain : props.domains[0].domain; membersText.value = m ? m.members.join('\n') : ''; membersOnly.value = m ? m.membersOnly : false; + active.value = m ? m.active : true; dialog.value.open(); } @@ -78,7 +83,7 @@ defineExpose({ @confirm="onSubmit()" >
-
{{ formError }}
+
{{ formError.generic }}
@@ -90,15 +95,17 @@ defineExpose({ +
{{ formError.name }}
+
{{ formError.members }}
- +