diff --git a/app/soapbox/actions/admin.js b/app/soapbox/actions/admin.js index 1b48efa94..43119708d 100644 --- a/app/soapbox/actions/admin.js +++ b/app/soapbox/actions/admin.js @@ -142,41 +142,44 @@ export function fetchUsers(filters = [], page = 1, pageSize = 50) { }; } -export function deactivateUsers(nicknames) { +export function deactivateUsers(accountIds) { return (dispatch, getState) => { - dispatch({ type: ADMIN_USERS_DEACTIVATE_REQUEST, nicknames }); + const nicknames = nicknamesFromIds(getState, accountIds); + dispatch({ type: ADMIN_USERS_DEACTIVATE_REQUEST, accountIds }); return api(getState) .patch('/api/pleroma/admin/users/deactivate', { nicknames }) .then(({ data: { users } }) => { - dispatch({ type: ADMIN_USERS_DEACTIVATE_SUCCESS, users, nicknames }); + dispatch({ type: ADMIN_USERS_DEACTIVATE_SUCCESS, users, accountIds }); }).catch(error => { - dispatch({ type: ADMIN_USERS_DEACTIVATE_FAIL, error, nicknames }); + dispatch({ type: ADMIN_USERS_DEACTIVATE_FAIL, error, accountIds }); }); }; } -export function deleteUsers(nicknames) { +export function deleteUsers(accountIds) { return (dispatch, getState) => { - dispatch({ type: ADMIN_USERS_DELETE_REQUEST, nicknames }); + const nicknames = nicknamesFromIds(getState, accountIds); + dispatch({ type: ADMIN_USERS_DELETE_REQUEST, accountIds }); return api(getState) .delete('/api/pleroma/admin/users', { data: { nicknames } }) .then(({ data: nicknames }) => { - dispatch({ type: ADMIN_USERS_DELETE_SUCCESS, nicknames }); + dispatch({ type: ADMIN_USERS_DELETE_SUCCESS, nicknames, accountIds }); }).catch(error => { - dispatch({ type: ADMIN_USERS_DELETE_FAIL, error, nicknames }); + dispatch({ type: ADMIN_USERS_DELETE_FAIL, error, accountIds }); }); }; } -export function approveUsers(nicknames) { +export function approveUsers(accountIds) { return (dispatch, getState) => { - dispatch({ type: ADMIN_USERS_APPROVE_REQUEST, nicknames }); + const nicknames = nicknamesFromIds(getState, accountIds); + dispatch({ type: ADMIN_USERS_APPROVE_REQUEST, accountIds }); return api(getState) .patch('/api/pleroma/admin/users/approve', { nicknames }) .then(({ data: { users } }) => { - dispatch({ type: ADMIN_USERS_APPROVE_SUCCESS, users, nicknames }); + dispatch({ type: ADMIN_USERS_APPROVE_SUCCESS, users, accountIds }); }).catch(error => { - dispatch({ type: ADMIN_USERS_APPROVE_FAIL, error, nicknames }); + dispatch({ type: ADMIN_USERS_APPROVE_FAIL, error, accountIds }); }); }; } diff --git a/app/soapbox/actions/moderation.js b/app/soapbox/actions/moderation.js index cce860de8..cb84803bd 100644 --- a/app/soapbox/actions/moderation.js +++ b/app/soapbox/actions/moderation.js @@ -36,7 +36,7 @@ export function deactivateUserModal(intl, accountId, afterConfirm = () => {}) { message: intl.formatMessage(messages.deactivateUserPrompt, { acct }), confirm: intl.formatMessage(messages.deactivateUserConfirm, { name }), onConfirm: () => { - dispatch(deactivateUsers([acct])).then(() => { + dispatch(deactivateUsers([accountId])).then(() => { const message = intl.formatMessage(messages.userDeactivated, { acct }); dispatch(snackbar.success(message)); afterConfirm(); @@ -74,7 +74,7 @@ export function deleteUserModal(intl, accountId, afterConfirm = () => {}) { confirm, checkbox, onConfirm: () => { - dispatch(deleteUsers([acct])).then(() => { + dispatch(deleteUsers([accountId])).then(() => { const message = intl.formatMessage(messages.userDeleted, { acct }); dispatch(fetchAccountByUsername(acct)); dispatch(snackbar.success(message)); diff --git a/app/soapbox/reducers/accounts.js b/app/soapbox/reducers/accounts.js index 0ea392263..0ce12d28e 100644 --- a/app/soapbox/reducers/accounts.js +++ b/app/soapbox/reducers/accounts.js @@ -23,7 +23,12 @@ import { ADMIN_REMOVE_PERMISSION_GROUP_REQUEST, ADMIN_REMOVE_PERMISSION_GROUP_FAIL, } from 'soapbox/actions/admin'; -import { ADMIN_USERS_DELETE_REQUEST } from 'soapbox/actions/admin'; +import { + ADMIN_USERS_DELETE_REQUEST, + ADMIN_USERS_DELETE_FAIL, + ADMIN_USERS_DEACTIVATE_REQUEST, + ADMIN_USERS_DEACTIVATE_FAIL, +} from 'soapbox/actions/admin'; const initialState = ImmutableMap(); @@ -80,17 +85,10 @@ const removeTags = (state, accountIds, tags) => { }); }; -const nicknamesToIds = (state, nicknames) => { - return nicknames.map(nickname => { - return state.find(account => account.get('acct') === nickname, null, ImmutableMap()).get('id'); - }); -}; - -const setDeactivated = (state, nicknames) => { - const ids = nicknamesToIds(state, nicknames); +const setActive = (state, accountIds, active) => { return state.withMutations(state => { - ids.forEach(id => { - state.setIn([id, 'pleroma', 'is_active'], false); + accountIds.forEach(id => { + state.setIn([id, 'pleroma', 'is_active'], active); }); }); }; @@ -210,7 +208,11 @@ export default function accounts(state = initialState, action) { case ADMIN_ADD_PERMISSION_GROUP_FAIL: return removePermission(state, action.accountIds, action.permissionGroup); case ADMIN_USERS_DELETE_REQUEST: - return setDeactivated(state, action.nicknames); + case ADMIN_USERS_DEACTIVATE_REQUEST: + return setActive(state, action.accountIds, false); + case ADMIN_USERS_DELETE_FAIL: + case ADMIN_USERS_DEACTIVATE_FAIL: + return setActive(state, action.accountIds, true); case ADMIN_USERS_FETCH_SUCCESS: return importAdminUsers(state, action.users); default: diff --git a/app/soapbox/reducers/admin.js b/app/soapbox/reducers/admin.js index ebd009ed9..f7cb33fb6 100644 --- a/app/soapbox/reducers/admin.js +++ b/app/soapbox/reducers/admin.js @@ -41,11 +41,11 @@ function importUsers(state, users) { }); } -function deleteUsers(state, nicknames) { +function deleteUsers(state, accountIds) { return state.withMutations(state => { - nicknames.forEach(nickname => { - state.update('awaitingApproval', orderedSet => orderedSet.delete(nickname)); - state.deleteIn(['users', nickname]); + accountIds.forEach(id => { + state.update('awaitingApproval', orderedSet => orderedSet.delete(id)); + state.deleteIn(['users', id]); }); }); } @@ -100,9 +100,9 @@ export default function admin(state = initialState, action) { return importUsers(state, action.users); case ADMIN_USERS_DELETE_REQUEST: case ADMIN_USERS_DELETE_SUCCESS: - return deleteUsers(state, action.nicknames); + return deleteUsers(state, action.accountIds); case ADMIN_USERS_APPROVE_REQUEST: - return state.update('awaitingApproval', set => set.subtract(action.nicknames)); + return state.update('awaitingApproval', set => set.subtract(action.accountIds)); case ADMIN_USERS_APPROVE_SUCCESS: return approveUsers(state, action.users); default: