make standardized menu, use them in ConversationHeader
and ConversationListItempull/1277/head
parent
8910be2ceb
commit
401c37c39e
@ -1,111 +0,0 @@
|
||||
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);
|
||||
}
|
@ -0,0 +1,336 @@
|
||||
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 <MenuItem onClick={action}>{i18n('inviteContacts')}</MenuItem>;
|
||||
}
|
||||
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 (
|
||||
<MenuItem onClick={action}>{i18n('deletePublicChannel')}</MenuItem>
|
||||
);
|
||||
}
|
||||
return <MenuItem onClick={action}>{i18n('deleteContact')}</MenuItem>;
|
||||
}
|
||||
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 <MenuItem onClick={action}>{i18n('leaveGroup')}</MenuItem>;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
export function getUpdateGroupNameMenuItem(
|
||||
amMod: boolean | undefined,
|
||||
isKickedFromGroup: boolean | undefined,
|
||||
action: any,
|
||||
i18n: LocalizerType
|
||||
): JSX.Element | null {
|
||||
if (showUpdateGroupName(amMod, isKickedFromGroup)) {
|
||||
return (
|
||||
<MenuItem onClick={action}>{i18n('editGroupNameOrPicture')}</MenuItem>
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
export function getRemoveModeratorsMenuItem(
|
||||
amMod: boolean | undefined,
|
||||
isKickedFromGroup: boolean | undefined,
|
||||
action: any,
|
||||
i18n: LocalizerType
|
||||
): JSX.Element | null {
|
||||
if (showRemoveModerators(amMod, isKickedFromGroup)) {
|
||||
return <MenuItem onClick={action}>{i18n('removeModerators')}</MenuItem>;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
export function getAddModeratorsMenuItem(
|
||||
amMod: boolean | undefined,
|
||||
isKickedFromGroup: boolean | undefined,
|
||||
action: any,
|
||||
i18n: LocalizerType
|
||||
): JSX.Element | null {
|
||||
if (showAddModerators(amMod, isKickedFromGroup)) {
|
||||
return <MenuItem onClick={action}>{i18n('addModerators')}</MenuItem>;
|
||||
}
|
||||
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 <MenuItem onClick={action}>{copyIdLabel}</MenuItem>;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
export function getDisappearingMenuItem(
|
||||
isPublic: boolean | undefined,
|
||||
isRss: boolean | undefined,
|
||||
isKickedFromGroup: boolean | undefined,
|
||||
isBlocked: boolean | undefined,
|
||||
timerOptions: Array<TimerOption>,
|
||||
action: any,
|
||||
i18n: LocalizerType
|
||||
): JSX.Element | null {
|
||||
if (
|
||||
showTimerOptions(
|
||||
Boolean(isPublic),
|
||||
Boolean(isRss),
|
||||
Boolean(isKickedFromGroup),
|
||||
Boolean(isBlocked)
|
||||
)
|
||||
) {
|
||||
return (
|
||||
<SubMenu title={i18n('disappearingMessages') as any}>
|
||||
{(timerOptions || []).map(item => (
|
||||
<MenuItem
|
||||
key={item.value}
|
||||
onClick={() => {
|
||||
action(item.value);
|
||||
}}
|
||||
>
|
||||
{item.name}
|
||||
</MenuItem>
|
||||
))}
|
||||
</SubMenu>
|
||||
);
|
||||
}
|
||||
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 <MenuItem onClick={action}>{i18n('showMembers')}</MenuItem>;
|
||||
}
|
||||
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 <MenuItem onClick={action}>{i18n('showSafetyNumber')}</MenuItem>;
|
||||
}
|
||||
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 <MenuItem onClick={action}>{i18n('resetSession')}</MenuItem>;
|
||||
}
|
||||
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 <MenuItem onClick={blockHandler}>{blockTitle}</MenuItem>;
|
||||
}
|
||||
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 <MenuItem onClick={action}>{i18n('clearNickname')}</MenuItem>;
|
||||
}
|
||||
return null;
|
||||
}
|
Loading…
Reference in New Issue