From b60d888d008a64c6570a1a1af549a80c3cd1a480 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Fri, 3 Mar 2023 14:30:32 +0100 Subject: [PATCH] Groups: Disable some permissions for public groups (#2708) --- .../management/ManageGroupPermissions.tsx | 52 +++++++++++++------ .../right/management/Management.scss | 7 +++ 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/src/components/right/management/ManageGroupPermissions.tsx b/src/components/right/management/ManageGroupPermissions.tsx index a7e803338..07bd9cffc 100644 --- a/src/components/right/management/ManageGroupPermissions.tsx +++ b/src/components/right/management/ManageGroupPermissions.tsx @@ -9,6 +9,7 @@ import type { ApiChat, ApiChatBannedRights, ApiChatMember } from '../../../api/t import stopEvent from '../../../util/stopEvent'; import buildClassName from '../../../util/buildClassName'; +import { isChatPublic } from '../../../global/helpers'; import useLang from '../../../hooks/useLang'; import { selectChat } from '../../../global/selectors'; import useHistoryBack from '../../../hooks/useHistoryBack'; @@ -31,6 +32,7 @@ type OwnProps = { type StateProps = { chat?: ApiChat; currentUserId?: string; + hasLinkedChat?: boolean; }; const ITEM_HEIGHT = 24 + 32; @@ -81,16 +83,19 @@ const ManageGroupPermissions: FC = ({ onChatMemberSelect, chat, currentUserId, + hasLinkedChat, onClose, isActive, }) => { - const { updateChatDefaultBannedRights } = getActions(); + const { updateChatDefaultBannedRights, showNotification } = getActions(); const { permissions, havePermissionChanged, isLoading, handlePermissionChange, setIsLoading, } = useManagePermissions(chat?.defaultBannedRights); const lang = useLang(); const { isForum } = chat || {}; + const isPublic = useMemo(() => chat && isChatPublic(chat), [chat]); + const shouldDisablePermissionForPublicGroup = hasLinkedChat || isPublic; useHistoryBack({ isActive, @@ -116,6 +121,10 @@ const ManageGroupPermissions: FC = ({ setIsMediaDropdownOpen(!isMediaDropdownOpen); }, [isMediaDropdownOpen]); + const handleDisabledClick = useCallback(() => { + showNotification({ message: lang('lng_rights_permission_unavailable') }); + }, [lang, showNotification]); + const handleSavePermissions = useCallback(() => { if (!chat) { return; @@ -181,7 +190,7 @@ const ManageGroupPermissions: FC = ({

{lang('ChannelPermissionsHeader')}

-
+
= ({ onChange={handlePermissionChange} />
-
+
= ({ isMediaDropdownOpen && 'DropdownList--open', )} > -
+
= ({ />
-
+
= ({ />
-
+
= ({ />
-
+
= ({ />
-
+
= ({ />
-
+
= ({ />
-
+
= ({ />
-
+
= ({ />
-
+
= ({
-
+
= ({ onChange={handlePermissionChange} />
-
+
-
+
{isForum && ( -
+
= ({ export default memo(withGlobal( (global, { chatId }): StateProps => { const chat = selectChat(global, chatId); + const hasLinkedChat = Boolean(chat?.fullInfo?.linkedChatId); - return { chat, currentUserId: global.currentUserId }; + return { chat, currentUserId: global.currentUserId, hasLinkedChat }; }, )(ManageGroupPermissions)); diff --git a/src/components/right/management/Management.scss b/src/components/right/management/Management.scss index 4cdce5eba..6c475f5f6 100644 --- a/src/components/right/management/Management.scss +++ b/src/components/right/management/Management.scss @@ -68,6 +68,13 @@ text-overflow: ellipsis; } + &.with-checkbox { + body.is-ios &::after, + body.is-android &::after { + bottom: -1rem; + } + } + &:not(.picker-list-item) .Checkbox { margin-top: 2rem; margin-bottom: 2rem;