mirror of
https://github.com/scratchfoundation/scratch-www.git
synced 2024-11-23 15:47:53 -05:00
Allow curators to remove themselves
This commit is contained in:
parent
31655d7f11
commit
acc88069e9
3 changed files with 22 additions and 8 deletions
|
@ -31,7 +31,15 @@ const selectCanEditOpenToAll = state => isManager(state);
|
|||
|
||||
const selectShowCuratorInvite = state => !!state.studio.invited;
|
||||
const selectCanInviteCurators = state => isManager(state);
|
||||
const selectCanRemoveCurators = state => isManager(state) || selectIsAdmin(state);
|
||||
const selectCanRemoveCurator = (state, username) => {
|
||||
// Admins/managers can remove any curators
|
||||
if (isManager(state) || selectIsAdmin(state)) return true;
|
||||
// Curators can remove themselves
|
||||
if (selectUsername(state) === username) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
const selectCanRemoveManager = (state, managerId) =>
|
||||
(selectIsAdmin(state) || isManager(state)) && managerId !== state.studio.owner;
|
||||
const selectCanPromoteCurators = state => isManager(state);
|
||||
|
@ -63,7 +71,7 @@ export {
|
|||
selectCanEditOpenToAll,
|
||||
selectShowCuratorInvite,
|
||||
selectCanInviteCurators,
|
||||
selectCanRemoveCurators,
|
||||
selectCanRemoveCurator,
|
||||
selectCanRemoveManager,
|
||||
selectCanPromoteCurators,
|
||||
selectCanRemoveProject
|
||||
|
|
|
@ -6,7 +6,7 @@ import classNames from 'classnames';
|
|||
import {FormattedMessage} from 'react-intl';
|
||||
|
||||
import {
|
||||
selectCanRemoveCurators, selectCanRemoveManager, selectCanPromoteCurators
|
||||
selectCanRemoveCurator, selectCanRemoveManager, selectCanPromoteCurators
|
||||
} from '../../redux/studio-permissions';
|
||||
import {
|
||||
promoteCurator,
|
||||
|
@ -109,8 +109,8 @@ const ManagerTile = connect(
|
|||
)(StudioMemberTile);
|
||||
|
||||
const CuratorTile = connect(
|
||||
state => ({
|
||||
canRemove: selectCanRemoveCurators(state),
|
||||
(state, ownProps) => ({
|
||||
canRemove: selectCanRemoveCurator(state, ownProps.username),
|
||||
canPromote: selectCanPromoteCurators(state)
|
||||
}),
|
||||
{
|
||||
|
|
|
@ -11,7 +11,7 @@ import {
|
|||
selectCanEditOpenToAll,
|
||||
selectShowCuratorInvite,
|
||||
selectCanInviteCurators,
|
||||
selectCanRemoveCurators,
|
||||
selectCanRemoveCurator,
|
||||
selectCanRemoveManager,
|
||||
selectCanPromoteCurators,
|
||||
selectCanRemoveProject
|
||||
|
@ -287,7 +287,7 @@ describe('studio members', () => {
|
|||
describe('can remove curators', () => {
|
||||
test.each([
|
||||
['admin', true],
|
||||
['curator', false],
|
||||
['curator', false], // except themselves, see test below
|
||||
['manager', true],
|
||||
['creator', true],
|
||||
['logged in', false],
|
||||
|
@ -295,7 +295,13 @@ describe('studio members', () => {
|
|||
['logged out', false]
|
||||
])('%s: %s', (role, expected) => {
|
||||
setStateByRole(role);
|
||||
expect(selectCanRemoveCurators(state)).toBe(expected);
|
||||
expect(selectCanRemoveCurator(state, 'others-username')).toBe(expected);
|
||||
});
|
||||
|
||||
test('curators can remove themselves', () => {
|
||||
setStateByRole('curator');
|
||||
const loggedInUsername = selectUsername(state);
|
||||
expect(selectCanRemoveCurator(state, loggedInUsername)).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in a new issue