Web: Added canChangeUserRole function.

This commit is contained in:
Tatiana Lopaeva 2022-11-17 09:12:05 +03:00
parent 21e690ff95
commit 6fe3a695a6
4 changed files with 43 additions and 41 deletions

View File

@ -15,7 +15,7 @@ const User = ({
currCanEditUsers,
selectionParentRoom,
setSelectionParentRoom,
isArchiveRoot,
canChangeUserRole,
}) => {
if (!selectionParentRoom) return null;
if (!user.displayName && !user.email) return null;
@ -66,11 +66,7 @@ const User = ({
}
};
const isAvailable =
!isArchiveRoot &&
currCanEditUsers &&
currentMember?.id !== user.id &&
userRole.access !== ShareAccessRights.FullAccess;
const isCanChangeUserRole = user && canChangeUserRole(user);
return (
<StyledUser isExpect={isExpect} key={user.id}>
@ -91,7 +87,7 @@ const User = ({
{userRole && userRoleOptions && (
<div className="role-wrapper">
{isAvailable ? (
{isCanChangeUserRole ? (
<ComboBox
className="role-combobox"
selectedOption={userRole}

View File

@ -19,7 +19,6 @@ const Members = ({
selfId,
isOwner,
isAdmin,
isArchiveRoot,
selection,
selectionParentRoom,
@ -33,13 +32,14 @@ const Members = ({
changeUserType,
canInviteUserInRoom,
canChangeUserRole,
}) => {
const membersHelper = new MembersHelper({ t });
const [members, setMembers] = useState(null);
const [showLoader, setShowLoader] = useState(false);
const isDisabledInvite = !canInviteUserInRoom({ access: selection.access });
const fetchMembers = async (roomId) => {
let timerId;
if (members) timerId = setTimeout(() => setShowLoader(true), 1000);
@ -117,19 +117,13 @@ const Members = ({
(member) => member.id === selfId
);
const currCanEditUsers =
isOwner ||
isAdmin ||
currentMember?.access === ShareAccessRights.FullAccess ||
currentMember?.access === ShareAccessRights.RoomManager;
return (
<>
<StyledUserTypeHeader>
<Text className="title">
{t("UsersInRoom")} : {members.inRoom.length}
</Text>
{currCanEditUsers && !isArchiveRoot && (
{canInviteUserInRoom && (
<IconButton
className={"icon"}
title={t("Common:AddUsers")}
@ -137,7 +131,6 @@ const Members = ({
isFill={true}
onClick={onClickInviteUsers}
size={16}
isDisabled={isDisabledInvite}
/>
)}
</StyledUserTypeHeader>
@ -145,7 +138,6 @@ const Members = ({
<StyledUserList>
{Object.values(members.inRoom).map((user) => (
<User
currCanEditUsers={currCanEditUsers}
key={user.id}
t={t}
user={user}
@ -156,7 +148,7 @@ const Members = ({
roomType={selectionParentRoom.roomType}
selectionParentRoom={selectionParentRoom}
setSelectionParentRoom={setSelectionParentRoom}
isArchiveRoot={isArchiveRoot}
canChangeUserRole={canChangeUserRole}
/>
))}
</StyledUserList>
@ -164,7 +156,7 @@ const Members = ({
{!!members.expected.length && (
<StyledUserTypeHeader isExpect>
<Text className="title">{t("ExpectPeople")}</Text>
{currCanEditUsers && !isArchiveRoot && (
{canInviteUserInRoom && (
<IconButton
className={"icon"}
title={t("Repeat invitation")}
@ -191,7 +183,6 @@ const Members = ({
roomType={selectionParentRoom.roomType}
selectionParentRoom={selectionParentRoom}
setSelectionParentRoom={setSelectionParentRoom}
isArchiveRoot={isArchiveRoot}
/>
))}
</StyledUserList>
@ -200,14 +191,7 @@ const Members = ({
};
export default inject(
({
auth,
filesStore,
peopleStore,
dialogsStore,
accessRightsStore,
treeFoldersStore,
}) => {
({ auth, filesStore, peopleStore, dialogsStore, accessRightsStore }) => {
const { selectionParentRoom, setSelectionParentRoom } = auth.infoPanelStore;
const {
getRoomMembers,
@ -217,9 +201,7 @@ export default inject(
const { isOwner, isAdmin, id: selfId } = auth.userStore.user;
const { setInvitePanelOptions } = dialogsStore;
const { changeType: changeUserType } = peopleStore;
const { canInviteUserInRoom } = accessRightsStore;
const { isArchiveFolderRoot } = treeFoldersStore;
const { canInviteUserInRoom, canChangeUserRole } = accessRightsStore;
return {
selectionParentRoom,
@ -237,7 +219,7 @@ export default inject(
changeUserType,
canInviteUserInRoom,
isArchiveRoot: isArchiveFolderRoot,
canChangeUserRole,
};
}
)(

View File

@ -14,22 +14,43 @@ import {
class AccessRightsStore {
authStore = null;
selectedFolderStore = null;
treeFoldersStore = null;
constructor(authStore, selectedFolderStore) {
constructor(
authStore,
selectedFolderStore,
treeFoldersStore,
versionHistoryStore
) {
this.authStore = authStore;
this.selectedFolderStore = selectedFolderStore;
this.treeFoldersStore = treeFoldersStore;
makeAutoObservable(this);
}
canInviteUserInRoom = (room) => {
const { rootFolderType } = this.selectedFolderStore;
get canInviteUserInRoom() {
const { isArchiveFolderRoot } = this.treeFoldersStore;
const { access } = this.selectedFolderStore;
if (rootFolderType === FolderType.Archive) return false;
if (isArchiveFolderRoot) return false;
const { inviteUsers } = getRoomRoleActions(room.access);
return getRoomRoleActions(access).inviteUsers;
}
return inviteUsers;
canChangeUserRole = (currentRoomMember) => {
const { isArchiveFolderRoot } = this.treeFoldersStore;
const { access } = this.selectedFolderStore;
const { userStore } = this.authStore;
const { user } = userStore;
const isMyProfile = user.id === currentRoomMember.id;
const isOwnerRoleRoom =
currentRoomMember.access === ShareAccessRights.FullAccess;
if (isArchiveFolderRoot || isMyProfile || isOwnerRoleRoom) return false;
return getRoomRoleActions(access).changeUserRole;
};
canArchiveRoom = (room) => {

View File

@ -36,8 +36,6 @@ const oformsStore = new OformsStore(authStore);
const selectedFolderStore = new SelectedFolderStore(authStore.settingsStore);
const accessRightsStore = new AccessRightsStore(authStore, selectedFolderStore);
const paymentStore = new PaymentStore();
const wizardStore = new WizardStore();
const setupStore = new SettingsSetupStore();
@ -60,6 +58,11 @@ const tagsStore = new TagsStore();
const treeFoldersStore = new TreeFoldersStore(selectedFolderStore);
const settingsStore = new SettingsStore(thirdPartyStore, treeFoldersStore);
const accessRightsStore = new AccessRightsStore(
authStore,
selectedFolderStore,
treeFoldersStore
);
const filesStore = new FilesStore(
authStore,
selectedFolderStore,