2021-07-13 17:31:30 +03:00

228 lines
6.6 KiB
TypeScript

import React, { FC, memo } from '../../../lib/teact/teact';
import { withGlobal } from '../../../lib/teact/teactn';
import { ManagementScreens, ManagementType } from '../../../types';
import { selectCurrentManagementType } from '../../../modules/selectors';
import ManageUser from './ManageUser';
import ManageGroup from './ManageGroup';
import ManageGroupPermissions from './ManageGroupPermissions';
import ManageGroupRemovedUsers from './ManageGroupRemovedUsers';
import ManageChannel from './ManageChannel';
import ManageChatPrivacyType from './ManageChatPrivacyType';
import ManageDiscussion from './ManageDiscussion';
import ManageGroupUserPermissions from './ManageGroupUserPermissions';
import ManageChatAdministrators from './ManageChatAdministrators';
import ManageGroupRecentActions from './ManageGroupRecentActions';
import ManageGroupAdminRights from './ManageGroupAdminRights';
import ManageGroupMembers from './ManageGroupMembers';
import ManageGroupUserPermissionsCreate from './ManageGroupUserPermissionsCreate';
export type OwnProps = {
chatId: number;
currentScreen: ManagementScreens;
selectedChatMemberId?: number;
isPromotedByCurrentUser?: boolean;
onScreenSelect: (screen: ManagementScreens) => void;
onChatMemberSelect: (memberId: number, isPromotedByCurrentUser?: boolean) => void;
onClose: NoneToVoidFunction;
isActive: boolean;
};
type StateProps = {
managementType?: ManagementType;
};
const Management: FC<OwnProps & StateProps> = ({
chatId,
currentScreen,
selectedChatMemberId,
isPromotedByCurrentUser,
onScreenSelect,
onChatMemberSelect,
onClose,
isActive,
managementType,
}) => {
switch (currentScreen) {
case ManagementScreens.Initial: {
switch (managementType) {
case 'user':
return (
<ManageUser
key={chatId}
userId={chatId}
onClose={onClose}
isActive={isActive}
/>
);
case 'group':
return (
<ManageGroup
key={chatId}
chatId={chatId}
onScreenSelect={onScreenSelect}
onClose={onClose}
isActive={isActive || [
ManagementScreens.ChatPrivacyType,
ManagementScreens.Discussion,
ManagementScreens.GroupPermissions,
ManagementScreens.ChatAdministrators,
ManagementScreens.GroupRemovedUsers,
ManagementScreens.GroupUserPermissionsCreate,
ManagementScreens.GroupUserPermissions,
ManagementScreens.ChatAdminRights,
ManagementScreens.GroupRecentActions,
].includes(currentScreen)}
/>
);
case 'channel':
return (
<ManageChannel
key={chatId}
chatId={chatId}
onScreenSelect={onScreenSelect}
onClose={onClose}
isActive={isActive || [
ManagementScreens.ChannelSubscribers,
ManagementScreens.ChatAdministrators,
ManagementScreens.Discussion,
ManagementScreens.ChatPrivacyType,
ManagementScreens.ChatAdminRights,
ManagementScreens.GroupRecentActions,
].includes(currentScreen)}
/>
);
}
break;
}
case ManagementScreens.ChatPrivacyType:
return (
<ManageChatPrivacyType
chatId={chatId}
isActive={isActive}
onClose={onClose}
/>
);
case ManagementScreens.Discussion:
return (
<ManageDiscussion
chatId={chatId}
onScreenSelect={onScreenSelect}
isActive={isActive}
onClose={onClose}
/>
);
case ManagementScreens.GroupPermissions:
return (
<ManageGroupPermissions
chatId={chatId}
onScreenSelect={onScreenSelect}
onChatMemberSelect={onChatMemberSelect}
isActive={isActive || [
ManagementScreens.GroupRemovedUsers,
ManagementScreens.GroupUserPermissionsCreate,
ManagementScreens.GroupUserPermissions,
].includes(currentScreen)}
onClose={onClose}
/>
);
case ManagementScreens.GroupRemovedUsers:
return (
<ManageGroupRemovedUsers
chatId={chatId}
isActive={isActive}
onClose={onClose}
/>
);
case ManagementScreens.GroupUserPermissionsCreate:
return (
<ManageGroupUserPermissionsCreate
chatId={chatId}
onChatMemberSelect={onChatMemberSelect}
onScreenSelect={onScreenSelect}
isActive={isActive || [
ManagementScreens.GroupUserPermissions,
].includes(currentScreen)}
onClose={onClose}
/>
);
case ManagementScreens.GroupUserPermissions:
return (
<ManageGroupUserPermissions
chatId={chatId}
selectedChatMemberId={selectedChatMemberId}
isPromotedByCurrentUser={isPromotedByCurrentUser}
onScreenSelect={onScreenSelect}
isActive={isActive}
onClose={onClose}
/>
);
case ManagementScreens.ChatAdministrators:
return (
<ManageChatAdministrators
chatId={chatId}
onScreenSelect={onScreenSelect}
onChatMemberSelect={onChatMemberSelect}
isActive={isActive || [
ManagementScreens.ChatAdminRights,
ManagementScreens.GroupRecentActions,
].includes(currentScreen)}
onClose={onClose}
/>
);
case ManagementScreens.GroupRecentActions:
return (
<ManageGroupRecentActions
chatId={chatId}
isActive={isActive}
onClose={onClose}
/>
);
case ManagementScreens.ChatAdminRights:
return (
<ManageGroupAdminRights
chatId={chatId}
selectedChatMemberId={selectedChatMemberId}
isPromotedByCurrentUser={isPromotedByCurrentUser}
onScreenSelect={onScreenSelect}
isActive={isActive}
onClose={onClose}
/>
);
case ManagementScreens.ChannelSubscribers:
case ManagementScreens.GroupMembers:
return (
<ManageGroupMembers
chatId={chatId}
isActive={isActive}
onClose={onClose}
/>
);
}
return undefined; // Never reached
};
export default memo(withGlobal<OwnProps>(
(global): StateProps => {
const managementType = selectCurrentManagementType(global);
return {
managementType,
};
},
)(Management));