|
|
|
@ -12,6 +12,7 @@ import {
|
|
|
|
|
useIsMe,
|
|
|
|
|
useIsPrivate,
|
|
|
|
|
useIsPublic,
|
|
|
|
|
useIsRequest,
|
|
|
|
|
useNotificationSetting,
|
|
|
|
|
useWeAreAdmin,
|
|
|
|
|
} from '../../hooks/useParamSelector';
|
|
|
|
@ -68,21 +69,27 @@ function showTimerOptions(
|
|
|
|
|
function showNotificationConvo(
|
|
|
|
|
isKickedFromGroup: boolean,
|
|
|
|
|
left: boolean,
|
|
|
|
|
isBlocked: boolean
|
|
|
|
|
isBlocked: boolean,
|
|
|
|
|
isRequest: boolean
|
|
|
|
|
): boolean {
|
|
|
|
|
return !left && !isKickedFromGroup && !isBlocked;
|
|
|
|
|
return !left && !isKickedFromGroup && !isBlocked && !isRequest;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function showBlock(isMe: boolean, isPrivate: boolean): boolean {
|
|
|
|
|
return !isMe && isPrivate;
|
|
|
|
|
function showBlock(isMe: boolean, isPrivate: boolean, isRequest: boolean): boolean {
|
|
|
|
|
return !isMe && isPrivate && !isRequest;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function showClearNickname(isMe: boolean, hasNickname: boolean, isPrivate: boolean): boolean {
|
|
|
|
|
return !isMe && hasNickname && isPrivate;
|
|
|
|
|
function showClearNickname(
|
|
|
|
|
isMe: boolean,
|
|
|
|
|
hasNickname: boolean,
|
|
|
|
|
isPrivate: boolean,
|
|
|
|
|
isRequest: boolean
|
|
|
|
|
): boolean {
|
|
|
|
|
return !isMe && hasNickname && isPrivate && isRequest;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function showChangeNickname(isMe: boolean, isPrivate: boolean) {
|
|
|
|
|
return !isMe && isPrivate;
|
|
|
|
|
function showChangeNickname(isMe: boolean, isPrivate: boolean, isRequest: boolean) {
|
|
|
|
|
return !isMe && isPrivate && !isRequest;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// we want to show the copyId for open groups and private chats only
|
|
|
|
@ -94,10 +101,11 @@ function showDeleteContact(
|
|
|
|
|
isGroup: boolean,
|
|
|
|
|
isPublic: boolean,
|
|
|
|
|
isGroupLeft: boolean,
|
|
|
|
|
isKickedFromGroup: boolean
|
|
|
|
|
isKickedFromGroup: boolean,
|
|
|
|
|
isRequest: boolean
|
|
|
|
|
): boolean {
|
|
|
|
|
// you need to have left a closed group first to be able to delete it completely.
|
|
|
|
|
return !isGroup || (isGroup && (isGroupLeft || isKickedFromGroup || isPublic));
|
|
|
|
|
return (!isGroup && !isRequest) || (isGroup && (isGroupLeft || isKickedFromGroup || isPublic));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const showUnbanUser = (weAreAdmin: boolean, isPublic: boolean, isKickedFromGroup: boolean) => {
|
|
|
|
@ -169,8 +177,9 @@ export const PinConversationMenuItem = (): JSX.Element | null => {
|
|
|
|
|
const conversationId = useContext(ContextConversationId);
|
|
|
|
|
const isMessagesSection = useSelector(getFocusedSection) === SectionType.Message;
|
|
|
|
|
const nbOfAlreadyPinnedConvos = useSelector(getNumberOfPinnedConversations);
|
|
|
|
|
const isRequest = useIsRequest(conversationId);
|
|
|
|
|
|
|
|
|
|
if (isMessagesSection) {
|
|
|
|
|
if (isMessagesSection && !isRequest) {
|
|
|
|
|
const conversation = getConversationController().get(conversationId);
|
|
|
|
|
const isPinned = conversation?.isPinned() || false;
|
|
|
|
|
|
|
|
|
@ -199,8 +208,9 @@ export const DeleteContactMenuItem = () => {
|
|
|
|
|
const isLeft = useIsLeft(convoId);
|
|
|
|
|
const isKickedFromGroup = useIsKickedFromGroup(convoId);
|
|
|
|
|
const isPrivate = useIsPrivate(convoId);
|
|
|
|
|
const isRequest = useIsRequest(convoId);
|
|
|
|
|
|
|
|
|
|
if (showDeleteContact(!isPrivate, isPublic, isLeft, isKickedFromGroup)) {
|
|
|
|
|
if (showDeleteContact(!isPrivate, isPublic, isLeft, isKickedFromGroup, isRequest)) {
|
|
|
|
|
let menuItemText: string;
|
|
|
|
|
if (isPublic) {
|
|
|
|
|
menuItemText = window.i18n('leaveGroup');
|
|
|
|
@ -448,9 +458,12 @@ export const NotificationForConvoMenuItem = (): JSX.Element | null => {
|
|
|
|
|
const left = useIsLeft(convoId);
|
|
|
|
|
const isBlocked = useIsBlocked(convoId);
|
|
|
|
|
const isPrivate = useIsPrivate(convoId);
|
|
|
|
|
const isRequest = useIsRequest(convoId);
|
|
|
|
|
const currentNotificationSetting = useNotificationSetting(convoId);
|
|
|
|
|
|
|
|
|
|
if (showNotificationConvo(Boolean(isKickedFromGroup), Boolean(left), Boolean(isBlocked))) {
|
|
|
|
|
if (
|
|
|
|
|
showNotificationConvo(Boolean(isKickedFromGroup), Boolean(left), Boolean(isBlocked), isRequest)
|
|
|
|
|
) {
|
|
|
|
|
// const isRtlMode = isRtlBody();'
|
|
|
|
|
|
|
|
|
|
// exclude mentions_only settings for private chats as this does not make much sense
|
|
|
|
@ -503,8 +516,9 @@ export const BlockMenuItem = (): JSX.Element | null => {
|
|
|
|
|
const isMe = useIsMe(convoId);
|
|
|
|
|
const isBlocked = useIsBlocked(convoId);
|
|
|
|
|
const isPrivate = useIsPrivate(convoId);
|
|
|
|
|
const isRequest = useIsRequest(convoId);
|
|
|
|
|
|
|
|
|
|
if (showBlock(Boolean(isMe), Boolean(isPrivate))) {
|
|
|
|
|
if (showBlock(Boolean(isMe), Boolean(isPrivate), Boolean(isRequest))) {
|
|
|
|
|
const blockTitle = isBlocked ? window.i18n('unblockUser') : window.i18n('blockUser');
|
|
|
|
|
const blockHandler = isBlocked
|
|
|
|
|
? () => unblockConvoById(convoId)
|
|
|
|
@ -519,8 +533,9 @@ export const ClearNicknameMenuItem = (): JSX.Element | null => {
|
|
|
|
|
const isMe = useIsMe(convoId);
|
|
|
|
|
const hasNickname = useHasNickname(convoId);
|
|
|
|
|
const isPrivate = useIsPrivate(convoId);
|
|
|
|
|
const isRequest = Boolean(useIsRequest(convoId)); // easier to copy paste
|
|
|
|
|
|
|
|
|
|
if (showClearNickname(Boolean(isMe), Boolean(hasNickname), Boolean(isPrivate))) {
|
|
|
|
|
if (showClearNickname(Boolean(isMe), Boolean(hasNickname), Boolean(isPrivate), isRequest)) {
|
|
|
|
|
return (
|
|
|
|
|
<Item onClick={() => clearNickNameByConvoId(convoId)}>{window.i18n('clearNickname')}</Item>
|
|
|
|
|
);
|
|
|
|
@ -532,9 +547,10 @@ export const ChangeNicknameMenuItem = () => {
|
|
|
|
|
const convoId = useContext(ContextConversationId);
|
|
|
|
|
const isMe = useIsMe(convoId);
|
|
|
|
|
const isPrivate = useIsPrivate(convoId);
|
|
|
|
|
const isRequest = useIsRequest(convoId);
|
|
|
|
|
|
|
|
|
|
const dispatch = useDispatch();
|
|
|
|
|
if (showChangeNickname(isMe, isPrivate)) {
|
|
|
|
|
if (showChangeNickname(isMe, isPrivate, isRequest)) {
|
|
|
|
|
return (
|
|
|
|
|
<Item
|
|
|
|
|
onClick={() => {
|
|
|
|
@ -550,6 +566,11 @@ export const ChangeNicknameMenuItem = () => {
|
|
|
|
|
|
|
|
|
|
export const DeleteMessagesMenuItem = () => {
|
|
|
|
|
const convoId = useContext(ContextConversationId);
|
|
|
|
|
const isRequest = useIsRequest(convoId);
|
|
|
|
|
|
|
|
|
|
if (isRequest) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Item
|
|
|
|
@ -577,10 +598,10 @@ export const HideBannerMenuItem = (): JSX.Element => {
|
|
|
|
|
|
|
|
|
|
export const AcceptMenuItem = () => {
|
|
|
|
|
const convoId = useContext(ContextConversationId);
|
|
|
|
|
const isRequest = useIsRequest(convoId);
|
|
|
|
|
const convo = getConversationController().get(convoId);
|
|
|
|
|
const showMenuItem = convo.isRequest();
|
|
|
|
|
|
|
|
|
|
if (showMenuItem) {
|
|
|
|
|
if (isRequest) {
|
|
|
|
|
return (
|
|
|
|
|
<Item
|
|
|
|
|
onClick={async () => {
|
|
|
|
|