Admin: refactor actions to use accountIds instead of nicknames

This commit is contained in:
Alex Gleason 2021-07-13 18:11:11 -05:00
parent a89ea524a9
commit 2f6cd35f38
No known key found for this signature in database
GPG key ID: 7211D1F99744FBB7
4 changed files with 37 additions and 32 deletions

View file

@ -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 });
});
};
}

View file

@ -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));

View file

@ -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:

View file

@ -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: