2023-04-06 08:11:36 +02:00
|
|
|
import React from 'react';
|
2023-09-06 03:51:37 +02:00
|
|
|
import { Item, Menu } from 'react-contexify';
|
2020-10-22 07:34:41 +02:00
|
|
|
|
2023-04-06 08:11:36 +02:00
|
|
|
import { useSelector } from 'react-redux';
|
|
|
|
import { useIsPinned, useIsPrivate, useIsPrivateAndFriend } from '../../hooks/useParamSelector';
|
|
|
|
import { getConversationController } from '../../session/conversations';
|
|
|
|
import { getIsMessageSection } from '../../state/selectors/section';
|
|
|
|
import { useConvoIdFromContext } from '../leftpane/conversation-list-item/ConvoIdContext';
|
|
|
|
import { SessionContextMenuContainer } from '../SessionContextMenuContainer';
|
2020-10-22 07:34:41 +02:00
|
|
|
import {
|
2023-04-06 06:07:50 +02:00
|
|
|
AcceptMsgRequestMenuItem,
|
2022-01-06 04:16:15 +01:00
|
|
|
BanMenuItem,
|
|
|
|
BlockMenuItem,
|
|
|
|
ChangeNicknameMenuItem,
|
|
|
|
ClearNicknameMenuItem,
|
|
|
|
CopyMenuItem,
|
2023-04-06 06:07:50 +02:00
|
|
|
DeclineAndBlockMsgRequestMenuItem,
|
|
|
|
DeclineMsgRequestMenuItem,
|
2023-05-10 05:29:38 +02:00
|
|
|
DeletePrivateContactMenuItem,
|
|
|
|
DeleteGroupOrCommunityMenuItem,
|
2022-01-06 04:16:15 +01:00
|
|
|
DeleteMessagesMenuItem,
|
|
|
|
InviteContactMenuItem,
|
|
|
|
LeaveGroupMenuItem,
|
|
|
|
MarkAllReadMenuItem,
|
2023-03-16 00:49:06 +01:00
|
|
|
MarkConversationUnreadMenuItem,
|
2022-01-06 04:16:15 +01:00
|
|
|
ShowUserDetailsMenuItem,
|
|
|
|
UnbanMenuItem,
|
2023-05-10 05:29:38 +02:00
|
|
|
DeletePrivateConversationMenuItem,
|
2023-06-15 10:36:54 +02:00
|
|
|
NotificationForConvoMenuItem,
|
2020-10-22 07:34:41 +02:00
|
|
|
} from './Menu';
|
2023-05-12 03:41:45 +02:00
|
|
|
import { isSearching } from '../../state/selectors/search';
|
2020-10-22 07:34:41 +02:00
|
|
|
|
|
|
|
export type PropsContextConversationItem = {
|
|
|
|
triggerId: string;
|
|
|
|
};
|
|
|
|
|
2021-07-06 09:14:00 +02:00
|
|
|
const ConversationListItemContextMenu = (props: PropsContextConversationItem) => {
|
2021-12-16 05:13:04 +01:00
|
|
|
const { triggerId } = props;
|
2023-05-12 03:41:45 +02:00
|
|
|
const isSearchingMode = useSelector(isSearching);
|
2021-10-20 06:54:03 +02:00
|
|
|
|
2023-05-12 03:41:45 +02:00
|
|
|
if (isSearchingMode) {
|
|
|
|
return null;
|
|
|
|
}
|
2023-05-17 02:09:22 +02:00
|
|
|
|
2020-10-22 07:34:41 +02:00
|
|
|
return (
|
2022-09-05 07:09:02 +02:00
|
|
|
<SessionContextMenuContainer>
|
2023-09-06 03:51:37 +02:00
|
|
|
<Menu id={triggerId} animation="fade">
|
2023-04-06 08:11:36 +02:00
|
|
|
{/* Message request related actions */}
|
2023-04-06 06:07:50 +02:00
|
|
|
<AcceptMsgRequestMenuItem />
|
|
|
|
<DeclineMsgRequestMenuItem />
|
|
|
|
<DeclineAndBlockMsgRequestMenuItem />
|
2023-04-06 08:11:36 +02:00
|
|
|
{/* Generic actions */}
|
2022-09-05 07:09:02 +02:00
|
|
|
<PinConversationMenuItem />
|
2023-06-15 10:36:54 +02:00
|
|
|
<NotificationForConvoMenuItem />
|
|
|
|
|
2022-09-05 07:09:02 +02:00
|
|
|
<BlockMenuItem />
|
|
|
|
<CopyMenuItem />
|
2023-04-06 08:11:36 +02:00
|
|
|
{/* Read state actions */}
|
2022-09-05 07:09:02 +02:00
|
|
|
<MarkAllReadMenuItem />
|
2023-03-16 00:49:06 +01:00
|
|
|
<MarkConversationUnreadMenuItem />
|
2023-04-06 08:11:36 +02:00
|
|
|
{/* Nickname actions */}
|
2022-09-05 07:09:02 +02:00
|
|
|
<ChangeNicknameMenuItem />
|
|
|
|
<ClearNicknameMenuItem />
|
2023-04-06 08:11:36 +02:00
|
|
|
{/* Communities actions */}
|
2022-09-05 07:09:02 +02:00
|
|
|
<BanMenuItem />
|
|
|
|
<UnbanMenuItem />
|
|
|
|
<InviteContactMenuItem />
|
2023-05-10 05:29:38 +02:00
|
|
|
<DeleteMessagesMenuItem />
|
|
|
|
<DeletePrivateConversationMenuItem />
|
|
|
|
<DeletePrivateContactMenuItem />
|
|
|
|
<DeleteGroupOrCommunityMenuItem />
|
2022-09-05 07:09:02 +02:00
|
|
|
<LeaveGroupMenuItem />
|
|
|
|
<ShowUserDetailsMenuItem />
|
|
|
|
</Menu>
|
|
|
|
</SessionContextMenuContainer>
|
2020-10-22 07:34:41 +02:00
|
|
|
);
|
|
|
|
};
|
2021-07-06 09:14:00 +02:00
|
|
|
|
2023-06-20 11:28:48 +02:00
|
|
|
export const MemoConversationListItemContextMenu = ConversationListItemContextMenu;
|
2023-04-06 08:11:36 +02:00
|
|
|
|
|
|
|
export const PinConversationMenuItem = (): JSX.Element | null => {
|
|
|
|
const conversationId = useConvoIdFromContext();
|
|
|
|
const isMessagesSection = useSelector(getIsMessageSection);
|
|
|
|
const isPrivateAndFriend = useIsPrivateAndFriend(conversationId);
|
|
|
|
const isPrivate = useIsPrivate(conversationId);
|
|
|
|
const isPinned = useIsPinned(conversationId);
|
|
|
|
|
|
|
|
if (isMessagesSection && (!isPrivate || (isPrivate && isPrivateAndFriend))) {
|
|
|
|
const conversation = getConversationController().get(conversationId);
|
|
|
|
|
2023-07-26 11:26:46 +02:00
|
|
|
const togglePinConversation = () => {
|
|
|
|
void conversation?.togglePinned();
|
2023-04-06 08:11:36 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
const menuText = isPinned ? window.i18n('unpinConversation') : window.i18n('pinConversation');
|
|
|
|
return <Item onClick={togglePinConversation}>{menuText}</Item>;
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
};
|