diff --git a/package.json b/package.json index 311be593..47e3eba2 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "lodash.debounce": "^4.0.8", "normalize.css": "7.0.0", "nprogress": "0.2.0", + "numeral": "^2.0.6", "screenfull": "4.0.0", "showdown": "1.8.6", "sortablejs": "1.7.0", diff --git a/src/api/__mocks__/users.js b/src/api/__mocks__/users.js index b763c92d..39d08100 100644 --- a/src/api/__mocks__/users.js +++ b/src/api/__mocks__/users.js @@ -1,6 +1,6 @@ -const users = [ +export const users = [ { active: true, deactivated: false, id: '2', nickname: 'allis', local: true, external: false, roles: { admin: true, moderator: false }, tags: [] }, - { active: true, deactivated: false, id: '10', nickname: 'bob', local: false, external: true, roles: { admin: false, moderator: true }, tags: ['sandbox'] }, + { active: true, deactivated: false, id: '10', nickname: 'bob', local: false, external: true, roles: { admin: false, moderator: false }, tags: ['sandbox'] }, { active: false, deactivated: true, id: 'abc', nickname: 'john', local: true, external: false, roles: { admin: false, moderator: false }, tags: ['strip_media'] } ] diff --git a/src/lang/en.js b/src/lang/en.js index 4ec4b96c..4663a714 100644 --- a/src/lang/en.js +++ b/src/lang/en.js @@ -188,7 +188,9 @@ export default { forceUnlisted: 'Force posts to be unlisted', sandbox: 'Force posts to be followers-only', disableRemoteSubscription: 'Disallow following user from remote instances', - disableAnySubscription: 'Disallow following user at all' + disableAnySubscription: 'Disallow following user at all', + selectUsers: 'Select users to apply actions to multiple users', + moderateUsers: 'Moderate multiple users' }, usersFilter: { inputPlaceholder: 'Select filter', diff --git a/src/store/modules/users.js b/src/store/modules/users.js index daf0c6bd..ae021032 100644 --- a/src/store/modules/users.js +++ b/src/store/modules/users.js @@ -21,14 +21,9 @@ const users = { SET_LOADING: (state, status) => { state.loading = status }, - SWAP_USER: (state, user) => { - const usersWithoutSwapped = state.fetchedUsers.filter(u => { - return u.id !== user.id - }) - - state.fetchedUsers = [...usersWithoutSwapped, user].sort((a, b) => - a.nickname.localeCompare(b.nickname) - ) + SWAP_USER: (state, updatedUser) => { + const updated = state.fetchedUsers.map(user => user.id === updatedUser.id ? updatedUser : user) + state.fetchedUsers = updated.sort((a, b) => a.nickname.localeCompare(b.nickname)) }, SWAP_USERS: (state, users) => { const usersWithoutSwapped = users.reduce((acc, user) => { diff --git a/src/views/users/components/DropdownActionsMenu.vue b/src/views/users/components/DropdownActionsMenu.vue new file mode 100644 index 00000000..e310ed6f --- /dev/null +++ b/src/views/users/components/DropdownActionsMenu.vue @@ -0,0 +1,259 @@ + + + + + diff --git a/src/views/users/index.vue b/src/views/users/index.vue index 4a186ae3..2af18061 100644 --- a/src/views/users/index.vue +++ b/src/views/users/index.vue @@ -1,11 +1,29 @@