Added user deletion option

This commit is contained in:
mushka 2022-11-03 16:28:47 +03:00
parent bb16de4ed9
commit 063bcfc6a7
3 changed files with 69 additions and 35 deletions

View File

@ -49,25 +49,47 @@ class MembersHelper {
};
};
getOptionsByRoomType = (roomType) => {
getOptionsByRoomType = (roomType, withDeleteOption = false) => {
if (!roomType) return;
const options = this.getOptions();
const deleteOption = withDeleteOption
? [
{ key: "s2", isSeparator: true },
{
key: "remove",
label: this.t("Translations:Remove"),
access: ShareAccessRights.None,
},
]
: [];
switch (roomType) {
case RoomsType.FillingFormsRoom:
return [options.roomAdmin, options.formFiller, options.viewer];
return [
options.roomAdmin,
options.formFiller,
options.viewer,
...deleteOption,
];
case RoomsType.EditingRoom:
return [options.roomAdmin, options.editor, options.viewer];
return [
options.roomAdmin,
options.editor,
options.viewer,
...deleteOption,
];
case RoomsType.ReviewRoom:
return [
options.roomAdmin,
options.reviewer,
options.commentator,
options.viewer,
...deleteOption,
];
case RoomsType.ReadOnlyRoom:
return [options.roomAdmin, options.viewer];
return [options.roomAdmin, options.viewer, ...deleteOption];
case RoomsType.CustomRoom:
return [
options.roomAdmin,
@ -76,6 +98,7 @@ class MembersHelper {
options.reviewer,
options.commentator,
options.viewer,
...deleteOption,
];
}
};

View File

@ -3,7 +3,6 @@ import React, { useState } from "react";
import { StyledUser } from "../../styles/members";
import Avatar from "@docspace/components/avatar";
import { ComboBox } from "@docspace/components";
import MembersHelper from "../../helpers/MembersHelper";
import { ShareAccessRights } from "@docspace/common/constants";
const User = ({
@ -11,46 +10,57 @@ const User = ({
user,
isExpect,
membersHelper,
roomId,
roomType,
currentMember,
updateRoomMemberRole,
selectionParentRoom,
setSelectionParentRoom,
}) => {
if (!selectionParentRoom) return null;
if (!user.displayName && !user.email) return null;
const fullRoomRoleOptions = membersHelper.getOptionsByRoomType(roomType);
const [userIsRemoved, setUserIsRemoved] = useState(false);
if (userIsRemoved) return null;
const [userRole, setUserRole] = useState(
membersHelper.getOptionByUserAccess(user.access)
);
const [userRoleOptions, setUserRoleOptions] = useState(
fullRoomRoleOptions.filter((role) => role.key !== userRole.key)
const currCanEditUsers =
currentMember.isOwner ||
currentMember.isAdmin ||
currentMember?.access === ShareAccessRights.FullAccess ||
currentMember?.access === ShareAccessRights.RoomManager;
const fullRoomRoleOptions = membersHelper.getOptionsByRoomType(
selectionParentRoom.roomType,
currCanEditUsers
);
const onRoomRoleChange = (option) => {
setUserRole(option);
setUserRoleOptions(
fullRoomRoleOptions.filter((role) => role.key !== option.key)
);
const userRole = membersHelper.getOptionByUserAccess(user.access);
const userRoleOptions = fullRoomRoleOptions?.filter(
(role) => role.key !== userRole.key
);
updateRoomMemberRole(roomId, {
invitations: [
{
id: user.id,
access: option.access,
},
],
const onOptionClick = (option) => {
updateRoomMemberRole(selectionParentRoom.id, {
invitations: [{ id: user.id, access: option.access }],
notify: false,
sharingMessage: "",
});
if (option.key === "remove") {
setUserIsRemoved(true);
const inRoomMembers = selectionParentRoom.members.inRoom;
const expectedMembers = selectionParentRoom.members.expected;
setSelectionParentRoom({
...selectionParentRoom,
members: {
inRoom: inRoomMembers?.filter((m) => m.id !== user.id),
expected: expectedMembers?.filter((m) => m.id !== user.id),
},
});
}
};
return (
<StyledUser
isExpect={isExpect}
key={user.id}
canEditRole={user.role !== "Owner"}
>
<StyledUser isExpect={isExpect} key={user.id}>
<Avatar
role="user"
className="avatar"
@ -68,14 +78,12 @@ const User = ({
{userRole && userRoleOptions && (
<div className="role-wrapper">
{(currentMember?.access === ShareAccessRights.FullAccess ||
currentMember?.access === ShareAccessRights.RoomManager) &&
currentMember.id !== user.id ? (
{currCanEditUsers && currentMember.id !== user.id ? (
<ComboBox
className="role-combobox"
selectedOption={userRole}
options={userRoleOptions}
onSelect={onRoomRoleChange}
onSelect={onOptionClick}
scaled={false}
withBackdrop={false}
size="content"

View File

@ -12,7 +12,6 @@ import { ShareAccessRights } from "@docspace/common/constants";
import IconButton from "@docspace/components/icon-button";
import Text from "@docspace/components/text";
import User from "./User";
import { getAccessOptions } from "@docspace/client/src/components/panels/InvitePanel/utils";
import MembersHelper from "../../helpers/MembersHelper";
const Members = ({
@ -140,6 +139,8 @@ const Members = ({
updateRoomMemberRole={updateRoomMemberRole}
roomId={selectionParentRoom.id}
roomType={selectionParentRoom.roomType}
selectionParentRoom={selectionParentRoom}
setSelectionParentRoom={setSelectionParentRoom}
/>
))}
</StyledUserList>
@ -170,6 +171,8 @@ const Members = ({
updateRoomMemberRole={updateRoomMemberRole}
roomId={selectionParentRoom.id}
roomType={selectionParentRoom.roomType}
selectionParentRoom={selectionParentRoom}
setSelectionParentRoom={setSelectionParentRoom}
/>
))}
</StyledUserList>