Page MenuHomePhabricator

D3382.id10525.diff
No OneTemporary

D3382.id10525.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
@@ -8,10 +8,16 @@
import classNames from 'classnames';
import * as React from 'react';
+import {
+ removeUsersFromThread,
+ changeThreadMemberRoles,
+} from 'lib/actions/thread-actions';
import {
memberIsAdmin,
memberHasAdminPowers,
threadHasPermission,
+ removeMemberFromThread,
+ switchMemberAdminRoleInThread,
} from 'lib/shared/thread-utils';
import { stringForUser } from 'lib/shared/user-utils';
import type { SetState } from 'lib/types/hook-types';
@@ -20,6 +26,10 @@
type ThreadInfo,
threadPermissions,
} from 'lib/types/thread-types';
+import {
+ useDispatchActionPromise,
+ useServerCall,
+} from 'lib/utils/action-utils';
import Label from '../../../components/label.react';
import MenuItem from '../../../components/menu-item.react';
@@ -49,6 +59,41 @@
[memberInfo.id, setOpenMenu],
);
+ const dispatchActionPromise = useDispatchActionPromise();
+ const boundRemoveUsersFromThread = useServerCall(removeUsersFromThread);
+
+ const onClickRemoveUser = React.useCallback(
+ () =>
+ removeMemberFromThread(
+ threadInfo,
+ memberInfo,
+ dispatchActionPromise,
+ boundRemoveUsersFromThread,
+ ),
+ [boundRemoveUsersFromThread, dispatchActionPromise, memberInfo, threadInfo],
+ );
+
+ const isCurrentlyAdmin = memberIsAdmin(memberInfo, threadInfo);
+ const boundChangeThreadMemberRoles = useServerCall(changeThreadMemberRoles);
+
+ const onMemberAdminRoleToggled = React.useCallback(
+ () =>
+ switchMemberAdminRoleInThread(
+ threadInfo,
+ memberInfo,
+ isCurrentlyAdmin,
+ dispatchActionPromise,
+ boundChangeThreadMemberRoles,
+ ),
+ [
+ boundChangeThreadMemberRoles,
+ dispatchActionPromise,
+ isCurrentlyAdmin,
+ memberInfo,
+ threadInfo,
+ ],
+ );
+
const menuItems = React.useMemo(() => {
const { role } = memberInfo;
if (!role) {
@@ -73,11 +118,17 @@
key="remove_admin"
text="Remove admin"
icon={faMinusCircle}
+ onClick={onMemberAdminRoleToggled}
/>,
);
} else if (canChangeRoles && memberInfo.username) {
actions.push(
- <MenuItem key="make_admin" text="Make admin" icon={faPlusCircle} />,
+ <MenuItem
+ key="make_admin"
+ text="Make admin"
+ icon={faPlusCircle}
+ onClick={onMemberAdminRoleToggled}
+ />,
);
}
@@ -91,13 +142,14 @@
key="remove_user"
text="Remove user"
icon={faSignOutAlt}
+ onClick={onClickRemoveUser}
dangerous
/>,
);
}
return actions;
- }, [memberInfo, threadInfo]);
+ }, [memberInfo, onClickRemoveUser, onMemberAdminRoleToggled, threadInfo]);
const userSettingsIcon = React.useMemo(
() => <SWMansionIcon icon="edit" size={17} />,

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 17, 8:28 PM (19 h, 48 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2531134
Default Alt Text
D3382.id10525.diff (3 KB)

Event Timeline