diff --git a/dashboard/src/components/DockerRegistryDialog.vue b/dashboard/src/components/DockerRegistryDialog.vue index 2e647bdec..2399d7907 100644 --- a/dashboard/src/components/DockerRegistryDialog.vue +++ b/dashboard/src/components/DockerRegistryDialog.vue @@ -66,6 +66,7 @@ async function onSubmit() { defineExpose({ async open(r = null) { + r = r ? JSON.parse(JSON.stringify(r)) : null; // make a copy busy.value = false; formError.value = {}; registry.value = r; diff --git a/dashboard/src/components/DomainDialog.vue b/dashboard/src/components/DomainDialog.vue index a49482200..5c4d00c62 100644 --- a/dashboard/src/components/DomainDialog.vue +++ b/dashboard/src/components/DomainDialog.vue @@ -63,7 +63,7 @@ async function onSubmit() { defineExpose({ open(d) { - d = d || { config: {}, tlsConfig: {}}; + d = d ? JSON.parse(JSON.stringify(d)) : { config: {}, tlsConfig: {} }; // make a copy provider.value = d.provider || ''; dnsConfig.value = d.config; diff --git a/dashboard/src/components/GroupDialog.vue b/dashboard/src/components/GroupDialog.vue index b14df8ee3..c12f6db0a 100644 --- a/dashboard/src/components/GroupDialog.vue +++ b/dashboard/src/components/GroupDialog.vue @@ -53,6 +53,7 @@ async function onSubmit() { defineExpose({ async open(g = null) { + g = g ? JSON.parse(JSON.stringify(g)) : null; // make a copy group.value = g; name.value = g ? g.name : ''; formError.value = {}; diff --git a/dashboard/src/components/ImpersonateDialog.vue b/dashboard/src/components/ImpersonateDialog.vue index c61a0b8a9..8492453d4 100644 --- a/dashboard/src/components/ImpersonateDialog.vue +++ b/dashboard/src/components/ImpersonateDialog.vue @@ -42,6 +42,7 @@ async function onSubmit() { defineExpose({ async open(u) { + u = JSON.parse(JSON.stringify(u)); // make a copy user.value = u; success.value = false; password.value = ''; diff --git a/dashboard/src/components/InvitationDialog.vue b/dashboard/src/components/InvitationDialog.vue index 274ce2ece..33e40c569 100644 --- a/dashboard/src/components/InvitationDialog.vue +++ b/dashboard/src/components/InvitationDialog.vue @@ -31,6 +31,7 @@ async function onSendInvite() { defineExpose({ async open(u) { + u = JSON.parse(JSON.stringify(u)); // make a copy user.value = u; success.value = false; email.value = u.email || ''; diff --git a/dashboard/src/components/MailboxDialog.vue b/dashboard/src/components/MailboxDialog.vue index f915b5254..e043b54c9 100644 --- a/dashboard/src/components/MailboxDialog.vue +++ b/dashboard/src/components/MailboxDialog.vue @@ -85,6 +85,7 @@ async function onSubmit() { defineExpose({ async open(m = null) { + m = m ? JSON.parse(JSON.stringify(m)) : null; // make a copy busy.value = false; formError.value = ''; mailbox.value = m; @@ -92,7 +93,7 @@ defineExpose({ name.value = m ? m.name : ''; domain.value = m ? m.domain : props.domains[0].domain; ownerId.value = m ? m.ownerId : ''; - aliases.value = m ? JSON.parse(JSON.stringify(m.aliases)) : []; + aliases.value = m ? m.aliases : []; active.value = m ? m.active : true; enablePop3.value = m ? m.enablePop3 : false; storageQuotaEnabled.value = m && m.storageQuota ? true : false; diff --git a/dashboard/src/components/MailinglistDialog.vue b/dashboard/src/components/MailinglistDialog.vue index 6875d810f..8153de064 100644 --- a/dashboard/src/components/MailinglistDialog.vue +++ b/dashboard/src/components/MailinglistDialog.vue @@ -57,6 +57,7 @@ async function onSubmit() { defineExpose({ async open(m = null) { + m = m ? JSON.parse(JSON.stringify(m)) : null; // make a copy busy.value = false; formError.value = {}; mailinglist.value = m; diff --git a/dashboard/src/components/PasswordResetDialog.vue b/dashboard/src/components/PasswordResetDialog.vue index 6c56ef918..3eb3a3ffa 100644 --- a/dashboard/src/components/PasswordResetDialog.vue +++ b/dashboard/src/components/PasswordResetDialog.vue @@ -35,6 +35,7 @@ async function onSend() { defineExpose({ async open(u) { + u = JSON.parse(JSON.stringify(u)); // make a copy user.value = u; formError.value = ''; email.value = u.fallbackEmail || u.email; diff --git a/dashboard/src/components/UserDialog.vue b/dashboard/src/components/UserDialog.vue index f1cd9a696..846651d36 100644 --- a/dashboard/src/components/UserDialog.vue +++ b/dashboard/src/components/UserDialog.vue @@ -179,6 +179,7 @@ async function onSubmit() { defineExpose({ async open(u = null) { + u = u ? JSON.parse(JSON.stringify(u)) : null; // make a copy busy.value = false; formError.value = {}; user.value = u; diff --git a/dashboard/src/views/DomainsView.vue b/dashboard/src/views/DomainsView.vue index 572d30470..c624b6b46 100644 --- a/dashboard/src/views/DomainsView.vue +++ b/dashboard/src/views/DomainsView.vue @@ -34,7 +34,7 @@ function onAdd () { } function onEdit(domain) { - domainDialog.value.open(domain); + domainDialog.value.open(domain); // pass a copy to prevent the dialog from mutating } const inputDialog = useTemplateRef('inputDialog');