@click.stop.prevent="deleteEmail">
{{ deleteEmailLabel }}
</ActionButton>
+ <ActionButton
+ :aria-label="setNotificationMailLabel"
+ :close-after-click="true"
+ :disabled="setNotificationDisabled"
+ icon="icon-favorite"
+ @click.stop.prevent="setNotificationMail">
+ {{ setNotificationMailLabel }}
+ </ActionButton>
</Actions>
</div>
</div>
- <em v-if="primary">
+ <em v-if="isNotificationEmail">
{{ t('settings', 'Primary email for password reset and notifications') }}
</em>
</div>
<script>
import Actions from '@nextcloud/vue/dist/Components/Actions'
import ActionButton from '@nextcloud/vue/dist/Components/ActionButton'
-import { showError } from '@nextcloud/dialogs'
+import {showError} from '@nextcloud/dialogs'
import debounce from 'debounce'
import FederationControl from '../shared/FederationControl'
-import { ACCOUNT_PROPERTY_READABLE_ENUM } from '../../../constants/AccountPropertyConstants'
-import { savePrimaryEmail, saveAdditionalEmail, saveAdditionalEmailScope, updateAdditionalEmail, removeAdditionalEmail } from '../../../service/PersonalInfo/EmailService'
-import { validateEmail } from '../../../utils/validate'
+import {ACCOUNT_PROPERTY_READABLE_ENUM} from '../../../constants/AccountPropertyConstants'
+import {
+ removeAdditionalEmail,
+ saveAdditionalEmail,
+ saveAdditionalEmailScope,
+ saveNotificationEmail,
+ savePrimaryEmail,
+ updateAdditionalEmail
+} from '../../../service/PersonalInfo/EmailService'
+import {validateEmail} from '../../../utils/validate'
export default {
name: 'Email',
type: String,
required: true,
},
+ activeNotificationEmail: {
+ type: String,
+ default: '',
+ },
},
data() {
saveAdditionalEmailScope,
showCheckmarkIcon: false,
showErrorIcon: false,
+ isNotificationEmail: (this.email === this.activeNotificationEmail)
+ || (this.primary && this.activeNotificationEmail === ''),
}
},
return t('settings', 'Delete email')
},
+ setNotificationDisabled() {
+ return this.isNotificationEmail
+ },
+
+ setNotificationMailLabel() {
+ if (this.isNotificationEmail) {
+ return t('settings', 'Your primary email')
+ }
+ return t('settings', 'Set as primary mail')
+ },
+
federationDisabled() {
return !this.initialEmail
},
}
},
+ async setNotificationMail() {
+ try {
+ const responseData = await saveNotificationEmail(this.primary ? '' : this.initialEmail)
+ this.handleResponse({
+ notificationEmail: this.primary ? '' : this.initialEmail,
+ status: responseData.ocs?.meta?.status,
+ })
+ } catch (e) {
+ this.handleResponse({
+ errorMessage: 'Unable to choose this email for notifications',
+ error: e,
+ })
+ }
+ },
+
async updateAdditionalEmail(email) {
try {
const responseData = await updateAdditionalEmail(this.initialEmail, email)
}
},
- handleResponse({ email, status, errorMessage, error }) {
+ handleResponse({ email, notificationEmail, status, errorMessage, error }) {
if (status === 'ok') {
// Ensure that local state reflects server state
- this.initialEmail = email
+ if (email) {
+ this.initialEmail = email
+ } else if (notificationEmail) {
+ this.activeNotificationEmail = notificationEmail
+ }
this.showCheckmarkIcon = true
setTimeout(() => { this.showCheckmarkIcon = false }, 2000)
} else {
:primary="true"
:scope.sync="primaryEmail.scope"
:email.sync="primaryEmail.value"
+ :active-notification-email.sync="notificationEmail"
@update:email="onUpdateEmail" />
</template>
<span v-else>
:index="index"
:scope.sync="additionalEmail.scope"
:email.sync="additionalEmail.value"
+ :active-notification-email.sync="notificationEmail"
@update:email="onUpdateEmail"
@delete-additional-email="onDeleteAdditionalEmail(index)" />
</section>
import { savePrimaryEmail, savePrimaryEmailScope, removeAdditionalEmail } from '../../../service/PersonalInfo/EmailService'
import { validateEmail } from '../../../utils/validate'
-const { emails: { additionalEmails, primaryEmail } } = loadState('settings', 'personalInfoParameters', {})
+const { emails: { additionalEmails, primaryEmail, notificationEmail } } = loadState('settings', 'personalInfoParameters', {})
const { displayNameChangeSupported } = loadState('settings', 'accountParameters', {})
export default {
displayNameChangeSupported,
primaryEmail,
savePrimaryEmailScope,
+ notificationEmail,
}
},
}
},
+ async onUpdateNotificationEmail(email) {
+ this.notificationEmail = email
+ },
+
async updatePrimaryEmail() {
try {
const responseData = await savePrimaryEmail(this.primaryEmailValue)