share ContextMenu item tests for ConversationListeItem and ConversationHeader

pull/1277/head
Audric Ackermann 5 years ago
parent 8105f0647a
commit ce6263dc21
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4

@ -172,6 +172,7 @@
isClosable: this.model.isClosable(),
isBlocked: this.model.isBlocked(),
isGroup: !this.model.isPrivate(),
isPrivate: this.model.isPrivate(),
isOnline: this.model.isOnline(),
isArchived: this.model.get('isArchived'),
isPublic: this.model.isPublic(),

@ -11,6 +11,12 @@ import { ContactName } from './conversation/ContactName';
import { TypingAnimation } from './conversation/TypingAnimation';
import { Colors, LocalizerType } from '../types/Util';
import {
showClearNickname,
showBlock,
showCopyId,
showDeleteContact,
} from '../session/utils/Menu';
export type PropsData = {
id: string;
@ -179,7 +185,7 @@ export class ConversationListItem extends React.PureComponent<Props> {
return (
<ContextMenu id={triggerId}>
{!isPublic && !isRss && !isMe && isPrivate ? (
{showBlock(isMe, isPrivate) ? (
<MenuItem onClick={blockHandler}>{blockTitle}</MenuItem>
) : null}
{/* {!isPublic && !isRss && !isMe ? (
@ -187,14 +193,20 @@ export class ConversationListItem extends React.PureComponent<Props> {
{i18n('changeNickname')}
</MenuItem>
) : null} */}
{!isPublic && !isRss && !isMe && hasNickname ? (
{showClearNickname(isPublic, isRss, isMe, hasNickname) ? (
<MenuItem onClick={onClearNickname}>{i18n('clearNickname')}</MenuItem>
) : null}
{!isPublic && !isRss ? (
{showCopyId(isPublic, isRss) ? (
<MenuItem onClick={onCopyPublicKey}>{i18n('copyPublicKey')}</MenuItem>
) : null}
<MenuItem onClick={onDeleteMessages}>{i18n('deleteMessages')}</MenuItem>
{!isMe && isClosable ? (
{showDeleteContact(
isMe,
isClosable,
type === 'group',
isPublic,
isRss
) ? (
!isPublic ? (
<MenuItem onClick={onDeleteContact}>
{i18n('deleteContact')}

@ -20,6 +20,20 @@ import {
SessionButtonColor,
SessionButtonType,
} from '../session/SessionButton';
import {
showAddModerators,
showBlock,
showCopyId,
showDeleteContact,
showInviteContact,
showLeaveGroup,
showMemberMenu,
showRemoveModerators,
showResetSession,
showSafetyNumber,
showTimerOptions,
showUpdateGroupName,
} from '../../session/utils/Menu';
export interface TimerOption {
name: string;
@ -38,6 +52,7 @@ interface Props {
isMe: boolean;
isClosable?: boolean;
isGroup: boolean;
isPrivate: boolean;
isArchived: boolean;
isPublic: boolean;
isRss: boolean;
@ -304,40 +319,38 @@ export class ConversationHeader extends React.Component<Props> {
onUpdateGroupName,
} = this.props;
const isPrivateGroup = isGroup && !isPublic && !isRss;
const copyIdLabel = isGroup ? i18n('copyChatId') : i18n('copyPublicKey');
return (
<ContextMenu id={triggerId}>
{this.renderPublicMenuItems()}
{!isRss ? (
{showCopyId(isPublic, isRss) ? (
<MenuItem onClick={onCopyPublicKey}>{copyIdLabel}</MenuItem>
) : null}
<MenuItem onClick={onDeleteMessages}>{i18n('deleteMessages')}</MenuItem>
{amMod && !isKickedFromGroup ? (
{showAddModerators(amMod, isKickedFromGroup) ? (
<MenuItem onClick={onAddModerators}>{i18n('addModerators')}</MenuItem>
) : null}
{amMod && !isKickedFromGroup ? (
{showRemoveModerators(amMod, isKickedFromGroup) ? (
<MenuItem onClick={onRemoveModerators}>
{i18n('removeModerators')}
</MenuItem>
) : null}
{amMod && !isKickedFromGroup ? (
{showUpdateGroupName(amMod, isKickedFromGroup) ? (
<MenuItem onClick={onUpdateGroupName}>
{i18n('editGroupNameOrPicture')}
</MenuItem>
) : null}
{isPrivateGroup && !isKickedFromGroup ? (
{showLeaveGroup(isKickedFromGroup, isGroup, isPublic, isRss) ? (
<MenuItem onClick={onLeaveGroup}>{i18n('leaveGroup')}</MenuItem>
) : null}
{/* TODO: add delete group */}
{isGroup && isPublic ? (
{showInviteContact(isGroup, isPublic) ? (
<MenuItem onClick={onInviteContacts}>
{i18n('inviteContacts')}
</MenuItem>
) : null}
{!isMe && isClosable && !isPrivateGroup ? (
{showDeleteContact(isMe, isClosable, isGroup, isPublic, isRss) ? (
!isPublic ? (
<MenuItem onClick={onDeleteContact}>
{i18n('deleteContact')}
@ -433,6 +446,7 @@ export class ConversationHeader extends React.Component<Props> {
isBlocked,
isMe,
isGroup,
isPrivate,
isKickedFromGroup,
isPublic,
isRss,
@ -454,7 +468,12 @@ export class ConversationHeader extends React.Component<Props> {
const blockTitle = isBlocked ? i18n('unblockUser') : i18n('blockUser');
const blockHandler = isBlocked ? onUnblockUser : onBlockUser;
const disappearingMessagesMenuItem = !isKickedFromGroup && !isBlocked && (
const disappearingMessagesMenuItem = showTimerOptions(
isPublic,
isRss,
isKickedFromGroup,
isBlocked
) && (
<SubMenu title={disappearingTitle}>
{(timerOptions || []).map(item => (
<MenuItem
@ -468,19 +487,24 @@ export class ConversationHeader extends React.Component<Props> {
))}
</SubMenu>
);
const showMembersMenuItem = isGroup && (
const showMembersMenuItem = showMemberMenu(isPublic, isRss, isGroup) && (
<MenuItem onClick={onShowGroupMembers}>{i18n('showMembers')}</MenuItem>
);
const showSafetyNumberMenuItem = !isGroup && !isMe && (
const showSafetyNumberMenuItem = showSafetyNumber(
isPublic,
isRss,
isGroup,
isMe
) && (
<MenuItem onClick={onShowSafetyNumber}>
{i18n('showSafetyNumber')}
</MenuItem>
);
const resetSessionMenuItem = !isGroup && (
const resetSessionMenuItem = showResetSession(isPublic, isRss, isGroup) && (
<MenuItem onClick={onResetSession}>{i18n('resetSession')}</MenuItem>
);
const blockHandlerMenuItem = !isMe && !isRss && !isGroup && (
const blockHandlerMenuItem = showBlock(isMe, isPrivate) && (
<MenuItem onClick={blockHandler}>{blockTitle}</MenuItem>
);

@ -0,0 +1,111 @@
export function showTimerOptions(
isPublic: boolean,
isRss: boolean,
isKickedFromGroup: boolean,
isBlocked: boolean
): boolean {
return (
Boolean(!isPublic) && Boolean(!isRss) && !isKickedFromGroup && !isBlocked
);
}
export function showMemberMenu(
isPublic: boolean,
isRss: boolean,
isGroup: boolean
): boolean {
return Boolean(!isPublic) && Boolean(!isRss) && isGroup;
}
export function showSafetyNumber(
isPublic: boolean,
isRss: boolean,
isGroup: boolean,
isMe: boolean
): boolean {
return Boolean(!isPublic) && Boolean(!isRss) && !isGroup && !isMe;
}
export function showResetSession(
isPublic: boolean,
isRss: boolean,
isGroup: boolean
): boolean {
return Boolean(!isPublic) && Boolean(!isRss) && Boolean(!isGroup);
}
export function showBlock(
isMe: boolean | undefined,
isPrivate: boolean | undefined
): boolean {
return Boolean(!isMe) && Boolean(isPrivate);
}
export function showClearNickname(
isPublic: boolean | undefined,
isRss: boolean | undefined,
isMe: boolean | undefined,
hasNickname: boolean | undefined
): boolean {
return (
Boolean(!isPublic) &&
Boolean(!isRss) &&
Boolean(!isMe) &&
Boolean(hasNickname)
);
}
export function showCopyId(
isPublic: boolean | undefined,
isRss: boolean | undefined
): boolean {
return Boolean(!isPublic) && Boolean(!isRss);
}
export 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)
);
}
export function showAddModerators(
amMod: boolean | undefined,
isKickedFromGroup: boolean | undefined
): boolean {
return Boolean(!isKickedFromGroup) && Boolean(amMod);
}
export function showRemoveModerators(
amMod: boolean | undefined,
isKickedFromGroup: boolean | undefined
): boolean {
return Boolean(!isKickedFromGroup) && Boolean(amMod);
}
export function showUpdateGroupName(
amMod: boolean | undefined,
isKickedFromGroup: boolean | undefined
): boolean {
return Boolean(!isKickedFromGroup) && Boolean(amMod);
}
export function showLeaveGroup(
isKickedFromGroup: boolean | undefined,
isGroup: boolean | undefined,
isPublic: boolean | undefined,
isRss: boolean | undefined
): boolean {
return Boolean(!isKickedFromGroup) && !!(!isGroup || isPublic || isRss);
}
export function showInviteContact(
isGroup: boolean | undefined,
isPublic: boolean | undefined
): boolean {
return Boolean(isGroup) && Boolean(isPublic);
}

@ -5,6 +5,7 @@ import * as StringUtils from './String';
import * as NumberUtils from './Number';
import * as PromiseUtils from './Promise';
import * as ProtobufUtils from './Protobuf';
import * as MenuUtils from './Menu';
export * from './Attachments';
export * from './TypedEmitter';
@ -18,4 +19,5 @@ export {
NumberUtils,
PromiseUtils,
ProtobufUtils,
MenuUtils,
};

Loading…
Cancel
Save