Page MenuHomePhabricator

D3380.id10866.diff
No OneTemporary

D3380.id10866.diff

diff --git a/web/modals/threads/members/member.react.js b/web/modals/threads/members/member.react.js
--- a/web/modals/threads/members/member.react.js
+++ b/web/modals/threads/members/member.react.js
@@ -1,17 +1,28 @@
// @flow
+import {
+ faPlusCircle,
+ faMinusCircle,
+ faSignOutAlt,
+} from '@fortawesome/free-solid-svg-icons';
import classNames from 'classnames';
import * as React from 'react';
-import { memberIsAdmin, memberHasAdminPowers } from 'lib/shared/thread-utils';
+import {
+ memberIsAdmin,
+ memberHasAdminPowers,
+ threadHasPermission,
+} from 'lib/shared/thread-utils';
import { stringForUser } from 'lib/shared/user-utils';
import type { SetState } from 'lib/types/hook-types';
import {
type RelativeMemberInfo,
type ThreadInfo,
+ threadPermissions,
} from 'lib/types/thread-types';
import Label from '../../../components/label.react';
+import MenuItem from '../../../components/menu-item.react';
import Menu from '../../../components/menu.react';
import SWMansionIcon from '../../../SWMansionIcon.react';
import css from './members-modal.css';
@@ -38,7 +49,55 @@
[memberInfo.id, setOpenMenu],
);
- const menuItems = [];
+ const menuItems = React.useMemo(() => {
+ const { role } = memberInfo;
+ if (!role) {
+ return [];
+ }
+
+ const canRemoveMembers = threadHasPermission(
+ threadInfo,
+ threadPermissions.REMOVE_MEMBERS,
+ );
+ const canChangeRoles = threadHasPermission(
+ threadInfo,
+ threadPermissions.CHANGE_ROLE,
+ );
+
+ const actions = [];
+
+ const isAdmin = memberIsAdmin(memberInfo, threadInfo);
+ if (canChangeRoles && memberInfo.username && isAdmin) {
+ actions.push(
+ <MenuItem
+ key="remove_admin"
+ text="Remove admin"
+ icon={faMinusCircle}
+ />,
+ );
+ } else if (canChangeRoles && memberInfo.username) {
+ actions.push(
+ <MenuItem key="make_admin" text="Make admin" icon={faPlusCircle} />,
+ );
+ }
+
+ if (
+ canRemoveMembers &&
+ !memberInfo.isViewer &&
+ (canChangeRoles || threadInfo.roles[role]?.isDefault)
+ ) {
+ actions.push(
+ <MenuItem
+ key="remove_user"
+ text="Remove user"
+ icon={faSignOutAlt}
+ dangerous
+ />,
+ );
+ }
+
+ return actions;
+ }, [memberInfo, threadInfo]);
const userSettingsIcon = React.useMemo(
() => <SWMansionIcon icon="edit" size={17} />,

File Metadata

Mime Type
text/plain
Expires
Thu, Dec 19, 4:45 AM (21 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2675330
Default Alt Text
D3380.id10866.diff (2 KB)

Event Timeline