Management / Channel: Add Removed Users (#1725)
This commit is contained in:
parent
e017299005
commit
13ae8c6a7a
@ -121,6 +121,7 @@ const RightColumn: FC<StateProps> = ({
|
|||||||
case ManagementScreens.Invites:
|
case ManagementScreens.Invites:
|
||||||
case ManagementScreens.Reactions:
|
case ManagementScreens.Reactions:
|
||||||
case ManagementScreens.JoinRequests:
|
case ManagementScreens.JoinRequests:
|
||||||
|
case ManagementScreens.ChannelRemovedUsers:
|
||||||
setManagementScreen(ManagementScreens.Initial);
|
setManagementScreen(ManagementScreens.Initial);
|
||||||
break;
|
break;
|
||||||
case ManagementScreens.GroupUserPermissionsCreate:
|
case ManagementScreens.GroupUserPermissionsCreate:
|
||||||
|
|||||||
@ -77,6 +77,7 @@ enum HeaderContent {
|
|||||||
ManageDiscussion,
|
ManageDiscussion,
|
||||||
ManageGroupPermissions,
|
ManageGroupPermissions,
|
||||||
ManageGroupRemovedUsers,
|
ManageGroupRemovedUsers,
|
||||||
|
ManageChannelRemovedUsers,
|
||||||
ManageGroupUserPermissionsCreate,
|
ManageGroupUserPermissionsCreate,
|
||||||
ManageGroupUserPermissions,
|
ManageGroupUserPermissions,
|
||||||
ManageGroupRecentActions,
|
ManageGroupRecentActions,
|
||||||
@ -209,6 +210,8 @@ const RightHeader: FC<OwnProps & StateProps> = ({
|
|||||||
HeaderContent.ManageChatAdministrators
|
HeaderContent.ManageChatAdministrators
|
||||||
) : managementScreen === ManagementScreens.GroupRemovedUsers ? (
|
) : managementScreen === ManagementScreens.GroupRemovedUsers ? (
|
||||||
HeaderContent.ManageGroupRemovedUsers
|
HeaderContent.ManageGroupRemovedUsers
|
||||||
|
) : managementScreen === ManagementScreens.ChannelRemovedUsers ? (
|
||||||
|
HeaderContent.ManageChannelRemovedUsers
|
||||||
) : managementScreen === ManagementScreens.GroupUserPermissionsCreate ? (
|
) : managementScreen === ManagementScreens.GroupUserPermissionsCreate ? (
|
||||||
HeaderContent.ManageGroupUserPermissionsCreate
|
HeaderContent.ManageGroupUserPermissionsCreate
|
||||||
) : managementScreen === ManagementScreens.GroupUserPermissions ? (
|
) : managementScreen === ManagementScreens.GroupUserPermissions ? (
|
||||||
@ -284,6 +287,8 @@ const RightHeader: FC<OwnProps & StateProps> = ({
|
|||||||
case HeaderContent.ManageGroupPermissions:
|
case HeaderContent.ManageGroupPermissions:
|
||||||
return <h3>{lang('ChannelPermissions')}</h3>;
|
return <h3>{lang('ChannelPermissions')}</h3>;
|
||||||
case HeaderContent.ManageGroupRemovedUsers:
|
case HeaderContent.ManageGroupRemovedUsers:
|
||||||
|
return <h3>{lang('BlockedUsers')}</h3>;
|
||||||
|
case HeaderContent.ManageChannelRemovedUsers:
|
||||||
return <h3>{lang('ChannelBlockedUsers')}</h3>;
|
return <h3>{lang('ChannelBlockedUsers')}</h3>;
|
||||||
case HeaderContent.ManageGroupUserPermissionsCreate:
|
case HeaderContent.ManageGroupUserPermissionsCreate:
|
||||||
return <h3>{lang('ChannelAddException')}</h3>;
|
return <h3>{lang('ChannelAddException')}</h3>;
|
||||||
|
|||||||
@ -102,6 +102,7 @@ const ManageChannel: FC<OwnProps & StateProps> = ({
|
|||||||
}, [progress]);
|
}, [progress]);
|
||||||
|
|
||||||
const adminsCount = (chat?.fullInfo?.adminMembers?.length) || 0;
|
const adminsCount = (chat?.fullInfo?.adminMembers?.length) || 0;
|
||||||
|
const removedUsersCount = (chat?.fullInfo?.kickedMembers?.length) || 0;
|
||||||
|
|
||||||
const handleClickEditType = useCallback(() => {
|
const handleClickEditType = useCallback(() => {
|
||||||
onScreenSelect(ManagementScreens.ChatPrivacyType);
|
onScreenSelect(ManagementScreens.ChatPrivacyType);
|
||||||
@ -167,6 +168,10 @@ const ManageChannel: FC<OwnProps & StateProps> = ({
|
|||||||
onScreenSelect(ManagementScreens.ChannelSubscribers);
|
onScreenSelect(ManagementScreens.ChannelSubscribers);
|
||||||
}, [onScreenSelect]);
|
}, [onScreenSelect]);
|
||||||
|
|
||||||
|
const handleRemovedUsersClick = useCallback(() => {
|
||||||
|
onScreenSelect(ManagementScreens.ChannelRemovedUsers);
|
||||||
|
}, [onScreenSelect]);
|
||||||
|
|
||||||
const handleDeleteChannel = useCallback(() => {
|
const handleDeleteChannel = useCallback(() => {
|
||||||
if (chat.isCreator) {
|
if (chat.isCreator) {
|
||||||
deleteChannel({ chatId: chat.id });
|
deleteChannel({ chatId: chat.id });
|
||||||
@ -227,14 +232,6 @@ const ManageChannel: FC<OwnProps & StateProps> = ({
|
|||||||
<span className="title">{lang('Discussion')}</span>
|
<span className="title">{lang('Discussion')}</span>
|
||||||
<span className="subtitle">{hasLinkedChat ? lang('DiscussionUnlink') : lang('Add')}</span>
|
<span className="subtitle">{hasLinkedChat ? lang('DiscussionUnlink') : lang('Add')}</span>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
<ListItem
|
|
||||||
icon="admin"
|
|
||||||
multiline
|
|
||||||
onClick={handleClickAdministrators}
|
|
||||||
>
|
|
||||||
<span className="title">{lang('ChannelAdministrators')}</span>
|
|
||||||
<span className="subtitle">{adminsCount}</span>
|
|
||||||
</ListItem>
|
|
||||||
{canInvite && (
|
{canInvite && (
|
||||||
<ListItem
|
<ListItem
|
||||||
icon="link"
|
icon="link"
|
||||||
@ -280,6 +277,14 @@ const ManageChannel: FC<OwnProps & StateProps> = ({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="section">
|
<div className="section">
|
||||||
|
<ListItem
|
||||||
|
icon="admin"
|
||||||
|
multiline
|
||||||
|
onClick={handleClickAdministrators}
|
||||||
|
>
|
||||||
|
<span className="title">{lang('ChannelAdministrators')}</span>
|
||||||
|
<span className="subtitle">{adminsCount}</span>
|
||||||
|
</ListItem>
|
||||||
<ListItem
|
<ListItem
|
||||||
icon="group"
|
icon="group"
|
||||||
multiline
|
multiline
|
||||||
@ -288,6 +293,15 @@ const ManageChannel: FC<OwnProps & StateProps> = ({
|
|||||||
<span className="title" dir="auto">{lang('ChannelSubscribers')}</span>
|
<span className="title" dir="auto">{lang('ChannelSubscribers')}</span>
|
||||||
<span className="subtitle" dir="auto">{lang('Subscribers', chat.membersCount ?? 0, 'i')}</span>
|
<span className="subtitle" dir="auto">{lang('Subscribers', chat.membersCount ?? 0, 'i')}</span>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
|
<ListItem
|
||||||
|
icon="delete-user"
|
||||||
|
multiline
|
||||||
|
narrow
|
||||||
|
onClick={handleRemovedUsersClick}
|
||||||
|
>
|
||||||
|
<span className="title">{lang('ChannelBlockedUsers')}</span>
|
||||||
|
<span className="subtitle">{removedUsersCount}</span>
|
||||||
|
</ListItem>
|
||||||
</div>
|
</div>
|
||||||
<div className="section">
|
<div className="section">
|
||||||
<ListItem icon="delete" ripple destructive onClick={openDeleteDialog}>
|
<ListItem icon="delete" ripple destructive onClick={openDeleteDialog}>
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import { getDispatch, withGlobal } from '../../../lib/teact/teactn';
|
|||||||
import { ApiChat, ApiChatMember, ApiUser } from '../../../api/types';
|
import { ApiChat, ApiChatMember, ApiUser } from '../../../api/types';
|
||||||
|
|
||||||
import { selectChat } from '../../../modules/selectors';
|
import { selectChat } from '../../../modules/selectors';
|
||||||
import { getHasAdminRight, getUserFullName } from '../../../modules/helpers';
|
import { getHasAdminRight, getUserFullName, isChatChannel } from '../../../modules/helpers';
|
||||||
import useLang from '../../../hooks/useLang';
|
import useLang from '../../../hooks/useLang';
|
||||||
import useHistoryBack from '../../../hooks/useHistoryBack';
|
import useHistoryBack from '../../../hooks/useHistoryBack';
|
||||||
import useFlag from '../../../hooks/useFlag';
|
import useFlag from '../../../hooks/useFlag';
|
||||||
@ -26,12 +26,14 @@ type StateProps = {
|
|||||||
chat?: ApiChat;
|
chat?: ApiChat;
|
||||||
usersById: Record<string, ApiUser>;
|
usersById: Record<string, ApiUser>;
|
||||||
canDeleteMembers?: boolean;
|
canDeleteMembers?: boolean;
|
||||||
|
isChannel?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
const ManageGroupRemovedUsers: FC<OwnProps & StateProps> = ({
|
const ManageChatRemovedUsers: FC<OwnProps & StateProps> = ({
|
||||||
chat,
|
chat,
|
||||||
usersById,
|
usersById,
|
||||||
canDeleteMembers,
|
canDeleteMembers,
|
||||||
|
isChannel,
|
||||||
onClose,
|
onClose,
|
||||||
isActive,
|
isActive,
|
||||||
}) => {
|
}) => {
|
||||||
@ -84,7 +86,7 @@ const ManageGroupRemovedUsers: FC<OwnProps & StateProps> = ({
|
|||||||
<div className="Management">
|
<div className="Management">
|
||||||
<div className="custom-scroll">
|
<div className="custom-scroll">
|
||||||
<div className="section" dir={lang.isRtl ? 'rtl' : undefined}>
|
<div className="section" dir={lang.isRtl ? 'rtl' : undefined}>
|
||||||
<p className="text-muted">{lang('NoBlockedGroup2')}</p>
|
<p className="text-muted">{lang(isChannel ? 'NoBlockedChannel2' : 'NoBlockedGroup2')}</p>
|
||||||
|
|
||||||
{removedMembers.map((member) => (
|
{removedMembers.map((member) => (
|
||||||
<ListItem
|
<ListItem
|
||||||
@ -127,6 +129,11 @@ export default memo(withGlobal<OwnProps>(
|
|||||||
const { byId: usersById } = global.users;
|
const { byId: usersById } = global.users;
|
||||||
const canDeleteMembers = chat && (getHasAdminRight(chat, 'banUsers') || chat.isCreator);
|
const canDeleteMembers = chat && (getHasAdminRight(chat, 'banUsers') || chat.isCreator);
|
||||||
|
|
||||||
return { chat, usersById, canDeleteMembers };
|
return {
|
||||||
|
chat,
|
||||||
|
usersById,
|
||||||
|
canDeleteMembers,
|
||||||
|
isChannel: chat && isChatChannel(chat),
|
||||||
|
};
|
||||||
},
|
},
|
||||||
)(ManageGroupRemovedUsers));
|
)(ManageChatRemovedUsers));
|
||||||
@ -8,7 +8,7 @@ import { selectCurrentManagementType } from '../../../modules/selectors';
|
|||||||
import ManageUser from './ManageUser';
|
import ManageUser from './ManageUser';
|
||||||
import ManageGroup from './ManageGroup';
|
import ManageGroup from './ManageGroup';
|
||||||
import ManageGroupPermissions from './ManageGroupPermissions';
|
import ManageGroupPermissions from './ManageGroupPermissions';
|
||||||
import ManageGroupRemovedUsers from './ManageGroupRemovedUsers';
|
import ManageChatRemovedUsers from './ManageChatRemovedUsers';
|
||||||
import ManageChannel from './ManageChannel';
|
import ManageChannel from './ManageChannel';
|
||||||
import ManageChatPrivacyType from './ManageChatPrivacyType';
|
import ManageChatPrivacyType from './ManageChatPrivacyType';
|
||||||
import ManageDiscussion from './ManageDiscussion';
|
import ManageDiscussion from './ManageDiscussion';
|
||||||
@ -93,6 +93,7 @@ const Management: FC<OwnProps & StateProps> = ({
|
|||||||
isActive={isActive || [
|
isActive={isActive || [
|
||||||
ManagementScreens.ChannelSubscribers,
|
ManagementScreens.ChannelSubscribers,
|
||||||
ManagementScreens.ChatAdministrators,
|
ManagementScreens.ChatAdministrators,
|
||||||
|
ManagementScreens.ChannelRemovedUsers,
|
||||||
ManagementScreens.Discussion,
|
ManagementScreens.Discussion,
|
||||||
ManagementScreens.ChatPrivacyType,
|
ManagementScreens.ChatPrivacyType,
|
||||||
ManagementScreens.ChatAdminRights,
|
ManagementScreens.ChatAdminRights,
|
||||||
@ -140,9 +141,10 @@ const Management: FC<OwnProps & StateProps> = ({
|
|||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
case ManagementScreens.ChannelRemovedUsers:
|
||||||
case ManagementScreens.GroupRemovedUsers:
|
case ManagementScreens.GroupRemovedUsers:
|
||||||
return (
|
return (
|
||||||
<ManageGroupRemovedUsers
|
<ManageChatRemovedUsers
|
||||||
chatId={chatId}
|
chatId={chatId}
|
||||||
isActive={isActive}
|
isActive={isActive}
|
||||||
onClose={onClose}
|
onClose={onClose}
|
||||||
|
|||||||
@ -331,6 +331,7 @@ export enum ManagementScreens {
|
|||||||
GroupType,
|
GroupType,
|
||||||
GroupPermissions,
|
GroupPermissions,
|
||||||
GroupRemovedUsers,
|
GroupRemovedUsers,
|
||||||
|
ChannelRemovedUsers,
|
||||||
GroupUserPermissionsCreate,
|
GroupUserPermissionsCreate,
|
||||||
GroupUserPermissions,
|
GroupUserPermissions,
|
||||||
ChatAdministrators,
|
ChatAdministrators,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user