import React from 'react'; import { MenuItem, SubMenu } from 'react-contextmenu'; import { LocalizerType } from '../../types/Util'; import { TimerOption } from '../../components/conversation/ConversationHeader'; function showTimerOptions( isPublic: boolean, isRss: boolean, isKickedFromGroup: boolean, isBlocked: boolean ): boolean { return ( Boolean(!isPublic) && Boolean(!isRss) && !isKickedFromGroup && !isBlocked ); } function showMemberMenu( isPublic: boolean, isRss: boolean, isGroup: boolean ): boolean { return Boolean(!isPublic) && Boolean(!isRss) && isGroup; } function showSafetyNumber( isPublic: boolean, isRss: boolean, isGroup: boolean, isMe: boolean ): boolean { return Boolean(!isPublic) && Boolean(!isRss) && !isGroup && !isMe; } function showResetSession( isPublic: boolean, isRss: boolean, isGroup: boolean ): boolean { return Boolean(!isPublic) && Boolean(!isRss) && Boolean(!isGroup); } function showBlock( isMe: boolean | undefined, isPrivate: boolean | undefined ): boolean { return Boolean(!isMe) && Boolean(isPrivate); } function showClearNickname( isPublic: boolean | undefined, isRss: boolean | undefined, isMe: boolean | undefined, hasNickname: boolean | undefined ): boolean { return ( Boolean(!isPublic) && Boolean(!isRss) && Boolean(!isMe) && Boolean(hasNickname) ); } function showCopyId( isPublic: boolean | undefined, isRss: boolean | undefined ): boolean { return Boolean(!isPublic) && Boolean(!isRss); } function showDeleteContact( isMe: boolean | undefined, isClosable: boolean | undefined, isGroup: boolean | undefined, isPublic: boolean | undefined, isRss: boolean | undefined ): boolean { return ( Boolean(!isMe) && Boolean(isClosable) && !!(!isGroup || isPublic || isRss) ); } function showAddModerators( amMod: boolean | undefined, isKickedFromGroup: boolean | undefined ): boolean { return Boolean(!isKickedFromGroup) && Boolean(amMod); } function showRemoveModerators( amMod: boolean | undefined, isKickedFromGroup: boolean | undefined ): boolean { return Boolean(!isKickedFromGroup) && Boolean(amMod); } function showUpdateGroupName( amMod: boolean | undefined, isKickedFromGroup: boolean | undefined ): boolean { return Boolean(!isKickedFromGroup) && Boolean(amMod); } function showLeaveGroup( isKickedFromGroup: boolean | undefined, isGroup: boolean | undefined, isPublic: boolean | undefined, isRss: boolean | undefined ): boolean { return Boolean(!isKickedFromGroup) && Boolean(isGroup) && !isPublic && !isRss; } function showInviteContact( isGroup: boolean | undefined, isPublic: boolean | undefined ): boolean { return Boolean(isGroup) && Boolean(isPublic); } /** Menu items standardized */ export function getInviteContactMenuItem( isGroup: boolean | undefined, isPublic: boolean | undefined, action: any, i18n: LocalizerType ): JSX.Element | null { if (showInviteContact(isGroup, isPublic)) { return {i18n('inviteContacts')}; } return null; } export function getDeleteContactMenuItem( isMe: boolean | undefined, isClosable: boolean | undefined, isGroup: boolean | undefined, isPublic: boolean | undefined, isRss: boolean | undefined, action: any, i18n: LocalizerType ): JSX.Element | null { if (showDeleteContact(isMe, isClosable, isGroup, isPublic, isRss)) { if (isPublic) { return ( {i18n('deletePublicChannel')} ); } return {i18n('deleteContact')}; } return null; } export function getLeaveGroupMenuItem( isKickedFromGroup: boolean | undefined, isGroup: boolean | undefined, isPublic: boolean | undefined, isRss: boolean | undefined, action: any, i18n: LocalizerType ): JSX.Element | null { if (showLeaveGroup(isKickedFromGroup, isGroup, isPublic, isRss)) { return {i18n('leaveGroup')}; } return null; } export function getUpdateGroupNameMenuItem( amMod: boolean | undefined, isKickedFromGroup: boolean | undefined, action: any, i18n: LocalizerType ): JSX.Element | null { if (showUpdateGroupName(amMod, isKickedFromGroup)) { return ( {i18n('editGroupNameOrPicture')} ); } return null; } export function getRemoveModeratorsMenuItem( amMod: boolean | undefined, isKickedFromGroup: boolean | undefined, action: any, i18n: LocalizerType ): JSX.Element | null { if (showRemoveModerators(amMod, isKickedFromGroup)) { return {i18n('removeModerators')}; } return null; } export function getAddModeratorsMenuItem( amMod: boolean | undefined, isKickedFromGroup: boolean | undefined, action: any, i18n: LocalizerType ): JSX.Element | null { if (showAddModerators(amMod, isKickedFromGroup)) { return {i18n('addModerators')}; } return null; } export function getCopyIdMenuItem( isPublic: boolean | undefined, isRss: boolean | undefined, isGroup: boolean | undefined, action: any, i18n: LocalizerType ): JSX.Element | null { if (showCopyId(isPublic, isRss)) { const copyIdLabel = isGroup ? i18n('copyChatId') : i18n('copyPublicKey'); return {copyIdLabel}; } return null; } export function getDisappearingMenuItem( isPublic: boolean | undefined, isRss: boolean | undefined, isKickedFromGroup: boolean | undefined, isBlocked: boolean | undefined, timerOptions: Array, action: any, i18n: LocalizerType ): JSX.Element | null { if ( showTimerOptions( Boolean(isPublic), Boolean(isRss), Boolean(isKickedFromGroup), Boolean(isBlocked) ) ) { return ( {(timerOptions || []).map(item => ( { action(item.value); }} > {item.name} ))} ); } return null; } export function getShowMemberMenuItem( isPublic: boolean | undefined, isRss: boolean | undefined, isGroup: boolean | undefined, action: any, i18n: LocalizerType ): JSX.Element | null { if (showMemberMenu(Boolean(isPublic), Boolean(isRss), Boolean(isGroup))) { return {i18n('showMembers')}; } return null; } export function getShowSafetyNumberMenuItem( isPublic: boolean | undefined, isRss: boolean | undefined, isGroup: boolean | undefined, isMe: boolean | undefined, action: any, i18n: LocalizerType ): JSX.Element | null { if ( showSafetyNumber( Boolean(isPublic), Boolean(isRss), Boolean(isGroup), Boolean(isMe) ) ) { return {i18n('showSafetyNumber')}; } return null; } export function getResetSessionMenuItem( isPublic: boolean | undefined, isRss: boolean | undefined, isGroup: boolean | undefined, action: any, i18n: LocalizerType ): JSX.Element | null { if (showResetSession(Boolean(isPublic), Boolean(isRss), Boolean(isGroup))) { return {i18n('resetSession')}; } return null; } export function getBlockMenuItem( isMe: boolean | undefined, isPrivate: boolean | undefined, isBlocked: boolean | undefined, actionBlock: any, actionUnblock: any, i18n: LocalizerType ): JSX.Element | null { if (showBlock(Boolean(isMe), Boolean(isPrivate))) { const blockTitle = isBlocked ? i18n('unblockUser') : i18n('blockUser'); const blockHandler = isBlocked ? actionUnblock : actionBlock; return {blockTitle}; } return null; } export function getClearNicknameMenuItem( isPublic: boolean | undefined, isRss: boolean | undefined, isMe: boolean | undefined, hasNickname: boolean | undefined, action: any, i18n: LocalizerType ): JSX.Element | null { if ( showClearNickname( Boolean(isPublic), Boolean(isRss), Boolean(isMe), Boolean(hasNickname) ) ) { return {i18n('clearNickname')}; } return null; }