import type { FC } from '../../lib/teact/teact'; import React, { memo, useMemo, } from '../../lib/teact/teact'; import { getActions, withGlobal } from '../../global'; import type { ApiChat, ApiChatBannedRights } from '../../api/types'; import { isChatPublic } from '../../global/helpers'; import { selectChat, selectChatFullInfo } from '../../global/selectors'; import buildClassName from '../../util/buildClassName'; import stopEvent from '../../util/stopEvent'; import useLastCallback from '../../hooks/useLastCallback'; import useOldLang from '../../hooks/useOldLang'; import Checkbox from '../ui/Checkbox'; export type OwnProps = { chatId?: string; handlePermissionChange: (e: React.ChangeEvent) => void; permissions: ApiChatBannedRights; isMediaDropdownOpen: boolean; setIsMediaDropdownOpen: (open: boolean) => void; className?: string; shiftedClassName?: string; dropdownClassName?: string; withCheckbox?: boolean; permissionGroup?: boolean; getControlIsDisabled?: (key: Exclude) => boolean | undefined; }; type StateProps = { chat?: ApiChat; hasLinkedChat?: boolean; }; const permissionKeyList: (keyof ApiChatBannedRights)[] = [ 'sendPhotos', 'sendVideos', 'sendStickers', 'sendAudios', 'sendDocs', 'sendVoices', 'sendRoundvideos', 'embedLinks', 'sendPolls', ]; const PermissionCheckboxList: FC = ({ chat, isMediaDropdownOpen, setIsMediaDropdownOpen, hasLinkedChat, permissions, handlePermissionChange, className, shiftedClassName, dropdownClassName, withCheckbox, getControlIsDisabled, permissionGroup, }) => { const { showNotification, } = getActions(); const { isForum } = chat || {}; const lang = useOldLang(); const isPublic = useMemo(() => chat && isChatPublic(chat), [chat]); const shouldDisablePermissionForPublicGroup = hasLinkedChat || isPublic; const countCheckedPermissions = useMemo(() => { return permissionKeyList.reduce((count, key) => { if (!permissions[key]) { count += 1; } return count; }, 0); }, [permissions]); const handleOpenMediaDropdown = useLastCallback((e: React.MouseEvent) => { stopEvent(e); setIsMediaDropdownOpen(!isMediaDropdownOpen); }); const handleDisabledClick = useLastCallback(() => { showNotification({ message: lang('lng_rights_permission_unavailable') }); }); return ( <>
{isForum && (
)}
); }; export default memo(withGlobal( (global, { chatId }): StateProps => { const chat = chatId ? selectChat(global, chatId) : undefined; const fullInfo = chat && selectChatFullInfo(global, chat.id); const hasLinkedChat = Boolean(fullInfo?.linkedChatId); return { chat, hasLinkedChat, }; }, )(PermissionCheckboxList));