diff --git a/frontend/src/components/identities/IdentityList.vue b/frontend/src/components/identities/IdentityList.vue index b181387f1..78e1d9261 100644 --- a/frontend/src/components/identities/IdentityList.vue +++ b/frontend/src/components/identities/IdentityList.vue @@ -8,6 +8,7 @@ + @@ -105,52 +106,92 @@ export default { } }, methods: { - async deleteAlias (alias) { - const confirm = await this.$refs.confirmAlias.open( - this.$gettext('Warning'), - this.$gettext( - 'Do you really want to delete the alias %{ alias }?', - { alias: alias.identity } - ), - { - color: 'error', - cancelLabel: this.$gettext('No'), - agreeLabel: this.$gettext('Yes') + sleep (milliseconds) { + return new Promise((resolve) => setTimeout(resolve, milliseconds)) + }, + async deleteAlias (alias, confirmDialog = true) { + if (confirmDialog) { + const confirm = await this.$refs.confirmAlias.open( + this.$gettext('Warning'), + this.$gettext( + 'Do you really want to delete the alias %{ alias }?', + { alias: alias.identity } + ), + { + color: 'error', + cancelLabel: this.$gettext('No'), + agreeLabel: this.$gettext('Yes') + } + ) + if (!confirm) { + return } - ) - if (!confirm) { - return } aliases.delete(alias.pk).then(() => { - bus.$emit('notification', { msg: this.$gettext('Alias deleted') }) - this.fetchIdentities() + if (confirmDialog) { + this.fetchIdentities() + bus.$emit('notification', { msg: this.$gettext('Alias deleted') }) + } }) }, - async deleteAccount (account) { - const confirm = await this.$refs.confirmAccount.open( - this.$gettext('Warning'), - this.$gettextInterpolate( - 'Do you really want to delete the account %{ account }?', - { account: account.identity } - ), - { - color: 'error', - cancelLabel: this.$gettext('No'), - agreeLabel: this.$gettext('Yes') + async deleteAccount (account, confirmDialog = true) { + if (confirmDialog) { + const confirm = await this.$refs.confirmAccount.open( + this.$gettext('Warning'), + this.$gettextInterpolate( + 'Do you really want to delete the account %{ account }?', + { account: account.identity } + ), + { + color: 'error', + cancelLabel: this.$gettext('No'), + agreeLabel: this.$gettext('Yes') + } + ) + if (!confirm) { + return } - ) - if (!confirm) { - return } const data = { keepdir: this.keepAccountFolder } accounts.delete(account.pk, data).then(() => { - bus.$emit('notification', { msg: this.$gettext('Account deleted') }) this.keepAccountFolder = false - this.fetchIdentities() + if (confirmDialog) { + bus.$emit('notification', { msg: this.$gettext('Account deleted') }) + this.fetchIdentities() + } }).catch(error => { bus.$emit('notification', { msg: error.response.data, type: 'error' }) }) }, + async deleteIdentities () { + if (this.selected.length === 0) { + return + } + const confirm = await this.$refs.confirmAlias.open( + this.$gettext('Warning'), + this.$gettext( + 'Do you really want to delete the selected identities?' + ), + { + color: 'error', + cancelLabel: this.$gettext('No'), + agreeLabel: this.$gettext('Yes') + } + ) + if (!confirm) { + return + } + for (const item of this.selected) { + if (item.type === 'account') { + this.deleteAccount(item, false) + } else if (item.type === 'alias') { + this.deleteAlias(item, false) + } + await this.sleep(100) + } + bus.$emit('notification', { msg: this.$gettext('Identities deleted') }) + this.fetchIdentities() + }, editAccount (account) { this.$router.push({ name: 'AccountEdit', params: { id: account.pk } }) }, @@ -183,6 +224,11 @@ export default { result.push({ label: this.$gettext('Delete'), icon: 'mdi-delete-outline', onClick: this.deleteAlias, color: 'red' }) } return result + }, + getActionMenuItems () { + const result = [] + result.push({ label: this.$gettext('Delete'), icon: 'mdi-delete-outline', onClick: this.deleteIdentities, color: 'red' }) + return result } }, mounted () {