:primary="true"
:scope.sync="primaryEmail.scope"
:email.sync="primaryEmail.value"
- @update:email="updateFormValidity" />
+ @update:email="onUpdateEmail" />
<Email v-for="(additionalEmail, index) in additionalEmails"
:key="index"
:index="index"
:scope.sync="additionalEmail.scope"
:email.sync="additionalEmail.value"
- @update:email="updateFormValidity"
+ @update:email="onUpdateEmail"
@deleteAdditionalEmail="onDeleteAdditionalEmail(index)" />
</template>
<script>
import { loadState } from '@nextcloud/initial-state'
+import { showError } from '@nextcloud/dialogs'
import '@nextcloud/dialogs/styles/toast.scss'
import HeaderBar from './HeaderBar'
import Email from './Email'
+import { savePrimaryEmail, removeAdditionalEmail } from '../../../service/PersonalInfoService'
import { DEFAULT_ADDITIONAL_EMAIL_SCOPE } from '../../../constants/AccountPropertyConstants'
const { additionalEmails, primaryEmail } = loadState('settings', 'emails', {})
isDisplayNameChangeSupported() {
return this.accountParams.displayNameChangeSupported
},
+
+ primaryEmailValue: {
+ get() {
+ return this.primaryEmail.value
+ },
+ set(value) {
+ this.primaryEmail.value = value
+ },
+ },
+
+ firstAdditionalEmail() {
+ if (this.additionalEmails.length) {
+ return this.additionalEmails[0].value
+ }
+ return null
+ },
},
mounted() {
this.$delete(this.additionalEmails, index)
},
+ async onUpdateEmail() {
+ this.$nextTick(() => this.updateFormValidity())
+
+ if (this.primaryEmailValue === '' && this.firstAdditionalEmail) {
+ const deletedEmail = this.firstAdditionalEmail
+ await this.deleteFirstAdditionalEmail()
+ this.primaryEmailValue = deletedEmail
+ await this.updatePrimaryEmail()
+ this.$nextTick(() => this.updateFormValidity())
+ }
+ },
+
+ async updatePrimaryEmail() {
+ try {
+ const responseData = await savePrimaryEmail(this.primaryEmailValue)
+ this.handleResponse(responseData.ocs?.meta?.status)
+ } catch (e) {
+ this.handleResponse('error', 'Unable to update primary email address', e)
+ }
+ },
+
+ async deleteFirstAdditionalEmail() {
+ try {
+ const responseData = await removeAdditionalEmail(this.firstAdditionalEmail)
+ this.handleDeleteFirstAdditionalEmail(responseData.ocs?.meta?.status)
+ } catch (e) {
+ this.handleResponse('error', 'Unable to delete additional email address', e)
+ }
+ },
+
+ handleDeleteFirstAdditionalEmail(status) {
+ if (status === 'ok') {
+ this.$delete(this.additionalEmails, 0)
+ } else {
+ this.handleResponse('error', 'Unable to delete additional email address', {})
+ }
+ },
+
+ handleResponse(status, errorMessage, error) {
+ if (status !== 'ok') {
+ showError(t('settings', errorMessage))
+ this.logger.error(errorMessage, error)
+ }
+ },
+
updateFormValidity() {
this.isValidForm = this.$refs.form?.checkValidity()
},