diff --git a/CHANGELOG.md b/CHANGELOG.md index 734a5ed5..bb2b750d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - remove fetching initial data for configuring server settings - Actions in users module (ActivateUsers, AddRight, DeactivateUsers, DeleteRight, DeleteUsers) now accept an array of users instead of one user - Leave dropdown menu open after clicking an action +- Move current try/catch error handling from view files to module, add it where necessary ### Added diff --git a/src/lang/en.js b/src/lang/en.js index 8575144a..6e6a892e 100644 --- a/src/lang/en.js +++ b/src/lang/en.js @@ -365,7 +365,13 @@ export default { deletePack: 'Delete pack', downloadSharedPack: 'Download shared pack to current instance', downloadAsOptional: 'Download as (optional)', - downloadPackArchive: 'Download pack archive' + downloadPackArchive: 'Download pack archive', + successfullyDownloaded: 'Successfully downloaded', + successfullyImported: 'Successfully imported', + nowNewPacksToImport: 'No new packs to import', + successfullyUpdated: 'Successfully updated', + metadatLowerCase: 'metadata', + files: 'files' }, invites: { inviteTokens: 'Invite tokens', diff --git a/src/store/modules/emojiPacks.js b/src/store/modules/emojiPacks.js index 6a14e406..c118b71f 100644 --- a/src/store/modules/emojiPacks.js +++ b/src/store/modules/emojiPacks.js @@ -8,7 +8,7 @@ import { savePackMetadata, importFromFS, updatePackFile } from '@/api/emojiPacks' - +import i18n from '@/lang' import { Message } from 'element-ui' import Vue from 'vue' @@ -44,34 +44,30 @@ const packs = { } }, actions: { - async SetLocalEmojiPacks({ commit, getters, state }) { - const { data } = await listPacks(getters.authHost) - commit('SET_LOCAL_PACKS', data) + async CreatePack({ getters }, { name }) { + await createPack(getters.authHost, getters.token, name) }, - async SetRemoteEmojiPacks({ commit, getters, state }, { remoteInstance }) { - const { data } = await listRemotePacks(getters.authHost, getters.token, remoteInstance) - - commit('SET_REMOTE_PACKS', data) + async DeletePack({ getters }, { name }) { + await deletePack(getters.authHost, getters.token, name) }, - async DownloadFrom({ commit, getters, state }, { instanceAddress, packName, as }) { + async DownloadFrom({ getters }, { instanceAddress, packName, as }) { const result = await downloadFrom(getters.authHost, instanceAddress, packName, as, getters.token) if (result.data === 'ok') { Message({ - message: `Successfully downloaded ${packName}`, + message: `${i18n.t('settings.successfullyDownloaded')} ${packName}`, type: 'success', duration: 5 * 1000 }) } }, - async ReloadEmoji({ commit, getters, state }) { - await reloadEmoji(getters.authHost, getters.token) - }, - async ImportFromFS({ commit, getters, state }) { + async ImportFromFS({ getters }) { const result = await importFromFS(getters.authHost, getters.token) if (result.status === 200) { - const message = result.data.length > 0 ? `Successfully imported ${result.data}` : 'No new packs to import' + const message = result.data.length > 0 + ? `${i18n.t('settings.successfullyImported')} ${result.data}` + : i18n.t('settings.nowNewPacksToImport') Message({ message, @@ -80,17 +76,9 @@ const packs = { }) } }, - async DeletePack({ commit, getters, state }, { name }) { - await deletePack(getters.authHost, getters.token, name) + async ReloadEmoji({ getters }) { + await reloadEmoji(getters.authHost, getters.token) }, - async CreatePack({ commit, getters, state }, { name }) { - await createPack(getters.authHost, getters.token, name) - }, - - async UpdateLocalPackVal({ commit, getters, state }, args) { - commit('UPDATE_LOCAL_PACK_VAL', args) - }, - async SavePackMetadata({ commit, getters, state }, { packName }) { const result = await savePackMetadata( @@ -102,7 +90,7 @@ const packs = { if (result.status === 200) { Message({ - message: `Successfully updated ${packName} metadata`, + message: `${i18n.t('settings.successfullyUpdated')} ${packName} ${i18n.t('settings.metadatLowerCase')}`, type: 'success', duration: 5 * 1000 }) @@ -110,21 +98,32 @@ const packs = { commit('UPDATE_LOCAL_PACK_PACK', { name: packName, pack: result.data }) } }, + async SetLocalEmojiPacks({ commit, getters }) { + const { data } = await listPacks(getters.authHost) + commit('SET_LOCAL_PACKS', data) + }, + async SetRemoteEmojiPacks({ commit, getters }, { remoteInstance }) { + const { data } = await listRemotePacks(getters.authHost, getters.token, remoteInstance) - async UpdateAndSavePackFile({ commit, getters, state }, args) { + commit('SET_REMOTE_PACKS', data) + }, + async UpdateAndSavePackFile({ commit, getters }, args) { const result = await updatePackFile(getters.authHost, getters.token, args) if (result.status === 200) { const { packName } = args Message({ - message: `Successfully updated ${packName} files`, + message: `${i18n.t('settings.successfullyUpdated')} ${packName} ${i18n.t('settings.metadatLowerCase')}`, type: 'success', duration: 5 * 1000 }) commit('UPDATE_LOCAL_PACK_FILES', { name: packName, files: result.data }) } + }, + async UpdateLocalPackVal({ commit }, args) { + commit('UPDATE_LOCAL_PACK_VAL', args) } } } diff --git a/src/store/modules/invites.js b/src/store/modules/invites.js index bdf43ce3..730b25d1 100644 --- a/src/store/modules/invites.js +++ b/src/store/modules/invites.js @@ -1,4 +1,6 @@ import { generateInviteToken, inviteViaEmail, listInviteTokens, revokeToken } from '@/api/invites' +import { Message } from 'element-ui' +import i18n from '@/lang' const invites = { state: { @@ -25,18 +27,35 @@ const invites = { commit('SET_LOADING', false) }, async GenerateInviteToken({ commit, dispatch, getters }, { maxUse, expiresAt }) { - const { data } = await generateInviteToken(maxUse, expiresAt, getters.authHost, getters.token) - commit('SET_NEW_TOKEN', { token: data.token, maxUse: data.max_use, expiresAt: data.expires_at }) + try { + const { data } = await generateInviteToken(maxUse, expiresAt, getters.authHost, getters.token) + commit('SET_NEW_TOKEN', { token: data.token, maxUse: data.max_use, expiresAt: data.expires_at }) + } catch (_e) { + return + } dispatch('FetchInviteTokens') }, async InviteUserViaEmail({ commit, dispatch, getters }, { email, name }) { - await inviteViaEmail(email, name, getters.authHost, getters.token) + try { + await inviteViaEmail(email, name, getters.authHost, getters.token) + } catch (_e) { + return + } + Message({ + message: i18n.t('invites.emailSent'), + type: 'success', + duration: 5 * 1000 + }) }, RemoveNewToken({ commit }) { commit('SET_NEW_TOKEN', {}) }, async RevokeToken({ commit, dispatch, getters }, token) { - await revokeToken(token, getters.authHost, getters.token) + try { + await revokeToken(token, getters.authHost, getters.token) + } catch (_e) { + return + } dispatch('FetchInviteTokens') } } diff --git a/src/store/modules/relays.js b/src/store/modules/relays.js index 6353569e..3a0d15cc 100644 --- a/src/store/modules/relays.js +++ b/src/store/modules/relays.js @@ -28,15 +28,27 @@ const relays = { commit('SET_RELAYS', response.data.relays) commit('SET_LOADING', false) }, - async AddRelay({ commit, getters }, relay) { + async AddRelay({ commit, dispatch, getters }, relay) { commit('ADD_RELAY', relay) - await addRelay(relay, getters.authHost, getters.token) + try { + await addRelay(relay, getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('FetchRelays') + } }, - async DeleteRelay({ commit, getters }, relay) { + async DeleteRelay({ commit, dispatch, getters }, relay) { commit('DELETE_RELAY', relay) - await deleteRelay(relay, getters.authHost, getters.token) + try { + await deleteRelay(relay, getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('FetchRelays') + } } } } diff --git a/src/store/modules/settings.js b/src/store/modules/settings.js index bb6bd8c1..9c3a2c79 100644 --- a/src/store/modules/settings.js +++ b/src/store/modules/settings.js @@ -1,5 +1,7 @@ +import i18n from '@/lang' import { fetchSettings, updateSettings, uploadMedia } from '@/api/settings' import { filterIgnored, parseTuples, valueHasTuples, wrapConfig } from './normalizers' +import { Message } from 'element-ui' const settings = { state: { @@ -124,10 +126,17 @@ const settings = { async SubmitChanges({ getters, commit, state }, data) { const filteredSettings = filterIgnored(state.settings, state.ignoredIfNotEnabled) const configs = data || wrapConfig(filteredSettings) - const response = await updateSettings(configs, getters.authHost, getters.token) - if (data) { + try { + const response = await updateSettings(configs, getters.authHost, getters.token) commit('SET_SETTINGS', response.data.configs) + } catch (_e) { + return } + Message({ + message: i18n.t('settings.success'), + type: 'success', + duration: 5 * 1000 + }) }, UpdateSettings({ commit }, { tab, data }) { commit('UPDATE_SETTINGS', { tab, data }) diff --git a/src/store/modules/users.js b/src/store/modules/users.js index ae5ed146..0290b888 100644 --- a/src/store/modules/users.js +++ b/src/store/modules/users.js @@ -1,3 +1,5 @@ +import { Message } from 'element-ui' +import i18n from '@/lang' import { activateUsers, addRight, @@ -78,8 +80,14 @@ const users = { commit('SWAP_USERS', updatedUsers) const usersNicknames = users.map(user => user.nickname) - await activateUsers(usersNicknames, getters.authHost, getters.token) - dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + try { + await activateUsers(usersNicknames, getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + } + dispatch('SuccessMessage') }, async AddRight({ commit, dispatch, getters, state }, { users, right }) { const updatedUsers = users.map(user => { @@ -88,8 +96,14 @@ const users = { commit('SWAP_USERS', updatedUsers) const usersNicknames = users.map(user => user.nickname) - await addRight(usersNicknames, right, getters.authHost, getters.token) - dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + try { + await addRight(usersNicknames, right, getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + } + dispatch('SuccessMessage') }, async AddTag({ commit, dispatch, getters, state }, { users, tag }) { const updatedUsers = users.map(user => { @@ -98,16 +112,28 @@ const users = { commit('SWAP_USERS', updatedUsers) const nicknames = users.map(user => user.nickname) - await tagUser(nicknames, [tag], getters.authHost, getters.token) - dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + try { + await tagUser(nicknames, [tag], getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + } + dispatch('SuccessMessage') }, async ClearFilters({ commit, dispatch, state }) { commit('CLEAR_USERS_FILTERS') dispatch('SearchUsers', { query: state.searchQuery, page: 1 }) }, async CreateNewAccount({ dispatch, getters, state }, { nickname, email, password }) { - await createNewAccount(nickname, email, password, getters.authHost, getters.token) - dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + try { + await createNewAccount(nickname, email, password, getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + } + dispatch('SuccessMessage') }, async DeactivateUsers({ commit, dispatch, getters, state }, users) { const updatedUsers = users.map(user => { @@ -116,8 +142,14 @@ const users = { commit('SWAP_USERS', updatedUsers) const usersNicknames = users.map(user => user.nickname) - await deactivateUsers(usersNicknames, getters.authHost, getters.token) - dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + try { + await deactivateUsers(usersNicknames, getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + } + dispatch('SuccessMessage') }, async DeleteRight({ commit, dispatch, getters, state }, { users, right }) { const updatedUsers = users.map(user => { @@ -126,19 +158,26 @@ const users = { commit('SWAP_USERS', updatedUsers) const usersNicknames = users.map(user => user.nickname) - await deleteRight(usersNicknames, right, getters.authHost, getters.token) - dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + try { + await deleteRight(usersNicknames, right, getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + } + dispatch('SuccessMessage') }, - async DeleteUsers({ commit, getters, state }, users) { + async DeleteUsers({ commit, dispatch, getters, state }, users) { + const usersNicknames = users.map(user => user.nickname) + try { + await deleteUsers(usersNicknames, getters.authHost, getters.token) + } catch (_e) { + return + } const deletedUsersIds = users.map(deletedUser => deletedUser.id) const updatedUsers = state.fetchedUsers.filter(user => !deletedUsersIds.includes(user.id)) commit('SET_USERS', updatedUsers) - - const usersNicknames = users.map(user => user.nickname) - await deleteUsers(usersNicknames, getters.authHost, getters.token) - }, - async RequirePasswordReset({ getters }, user) { - await requirePasswordReset(user.nickname, getters.authHost, getters.token) + dispatch('SuccessMessage') }, async FetchUsers({ commit, dispatch, getters, state }, { page }) { commit('SET_LOADING', true) @@ -161,8 +200,22 @@ const users = { commit('SWAP_USERS', updatedUsers) const nicknames = users.map(user => user.nickname) - await untagUser(nicknames, [tag], getters.authHost, getters.token) - dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + try { + await untagUser(nicknames, [tag], getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + } + dispatch('SuccessMessage') + }, + async RequirePasswordReset({ dispatch, getters }, user) { + try { + await requirePasswordReset(user.nickname, getters.authHost, getters.token) + } catch (_e) { + return + } + dispatch('SuccessMessage') }, async SearchUsers({ commit, dispatch, state, getters }, { query, page }) { if (query.length === 0) { @@ -178,6 +231,13 @@ const users = { loadUsers(commit, page, response.data) } }, + SuccessMessage() { + return Message({ + message: i18n.t('users.completed'), + type: 'success', + duration: 5 * 1000 + }) + }, async ToggleUsersFilter({ commit, dispatch, state }, filters) { const defaultFilters = { local: false, diff --git a/src/views/invites/index.vue b/src/views/invites/index.vue index 783e897a..e8ca75fd 100644 --- a/src/views/invites/index.vue +++ b/src/views/invites/index.vue @@ -192,17 +192,8 @@ export default { async inviteUserViaEmail() { this.$refs['inviteUserForm'].validate(async(valid) => { if (valid) { - try { - await this.$store.dispatch('InviteUserViaEmail', this.$data.inviteUserForm) - } catch (_e) { - return - } finally { - this.closeDialogWindow() - } - this.$message({ - type: 'success', - message: this.$t('invites.emailSent') - }) + await this.$store.dispatch('InviteUserViaEmail', this.$data.inviteUserForm) + this.closeDialogWindow() } else { this.$message({ type: 'error', diff --git a/src/views/settings/components/ActivityPub.vue b/src/views/settings/components/ActivityPub.vue index 903e34fe..2067be0a 100644 --- a/src/views/settings/components/ActivityPub.vue +++ b/src/views/settings/components/ActivityPub.vue @@ -37,7 +37,6 @@