fix: copy account id on right click on msg too

pull/3206/head
Audric Ackermann 7 months ago
parent 0a1806a37b
commit 802fe71629
No known key found for this signature in database

@ -48,6 +48,8 @@ import { Reactions } from '../../../../util/reactions';
import { SessionContextMenuContainer } from '../../../SessionContextMenuContainer';
import { SessionEmojiPanel, StyledEmojiPanel } from '../../SessionEmojiPanel';
import { MessageReactBar } from './MessageReactBar';
import { showCopyAccountIdAction } from '../../../menu/items/CopyAccountId';
import { CopyAccountIdMenuItem } from '../../../menu/items/CopyAccountId/CopyAccountIdMenuItem';
export type MessageContextMenuSelectorProps = Pick<
MessageRenderingProps,
@ -382,6 +384,10 @@ export const MessageContextMenu = (props: Props) => {
>
{window.i18n('info')}
</Item>
{/* this is a message in the view, so always private */}
{sender && showCopyAccountIdAction({ isPrivate: true, pubkey: sender }) ? (
<CopyAccountIdMenuItem pubkey={sender} />
) : null}
<RetryItem messageId={messageId} />
{isDeletable ? <Item onClick={onSelect}>{selectMessageText}</Item> : null}
<DeleteItem messageId={messageId} />

@ -37,6 +37,7 @@ const StyledQuoteTextContent = styled.div`
padding-inline-start: 10px;
padding-inline-end: 10px;
max-width: 100%;
overflow: hidden;
display: flex;
flex-direction: column;

@ -19,7 +19,6 @@ import {
resendMessage,
} from '../../../../../interactions/conversationInteractions';
import { deleteMessagesById } from '../../../../../interactions/conversations/unsendingInteractions';
import { PubKey } from '../../../../../session/types';
import {
useMessageAttachments,
useMessageAuthor,
@ -52,6 +51,7 @@ import { Message } from '../../../message/message-item/Message';
import { AttachmentInfo, MessageInfo } from './components';
import { AttachmentCarousel } from './components/AttachmentCarousel';
import { ToastUtils } from '../../../../../session/utils';
import { showCopyAccountIdAction } from '../../../../menu/items/CopyAccountId';
// NOTE we override the default max-widths when in the detail isDetailView
const StyledMessageBody = styled.div`
@ -242,9 +242,10 @@ function CopySenderSessionId({ messageId }: WithMessageIdOpt) {
const senderId = useMessageAuthor(messageId);
const isGroup = isGroupOrCommunity && !isPublic;
const isPrivateButNotBlinded = senderId && isPrivate && !PubKey.isBlinded(senderId);
const isPrivateAndShouldShow =
senderId && showCopyAccountIdAction({ isPrivate, pubkey: senderId });
if (senderId && (isGroup || isPrivateButNotBlinded)) {
if (senderId && (isGroup || isPrivateAndShouldShow)) {
return (
<PanelIconButton
text={window.i18n('accountIDCopy')}

@ -13,7 +13,6 @@ import {
BlockMenuItem,
ChangeNicknameMenuItem,
ClearNicknameMenuItem,
CopyMenuItem,
DeclineAndBlockMsgRequestMenuItem,
DeclineMsgRequestMenuItem,
DeleteMessagesMenuItem,
@ -26,6 +25,8 @@ import {
ShowUserDetailsMenuItem,
UnbanMenuItem,
} from './Menu';
import { CopyCommunityUrlMenuItem } from './items/CopyCommunityUrl/CopyCommunityUrlMenuItem';
import { CopyAccountIdMenuItem } from './items/CopyAccountId/CopyAccountIdMenuItem';
export type PropsContextConversationItem = {
triggerId: string;
@ -35,6 +36,8 @@ const ConversationListItemContextMenu = (props: PropsContextConversationItem) =>
const { triggerId } = props;
const isSearching = useIsSearching();
const convoIdFromContext = useConvoIdFromContext();
if (isSearching) {
return null;
}
@ -51,7 +54,8 @@ const ConversationListItemContextMenu = (props: PropsContextConversationItem) =>
<NotificationForConvoMenuItem />
<BlockMenuItem />
<CopyMenuItem />
<CopyCommunityUrlMenuItem convoId={convoIdFromContext} />
<CopyAccountIdMenuItem pubkey={convoIdFromContext} />
{/* Read state actions */}
<MarkAllReadMenuItem />
<MarkConversationUnreadMenuItem />

@ -24,7 +24,6 @@ import {
approveConvoAndSendResponse,
blockConvoById,
clearNickNameByConvoId,
copyPublicKeyByConvoId,
declineConversationWithConfirm,
deleteAllMessagesByConvoIdWithConfirmation,
markAllReadByConvoId,
@ -39,6 +38,10 @@ import {
showUpdateGroupNameByConvoId,
unblockConvoById,
} from '../../interactions/conversationInteractions';
import {
ConversationInteractionStatus,
ConversationInteractionType,
} from '../../interactions/types';
import {
ConversationNotificationSetting,
ConversationNotificationSettingType,
@ -54,10 +57,6 @@ import { getIsMessageSection } from '../../state/selectors/section';
import { useSelectedConversationKey } from '../../state/selectors/selectedConversation';
import { LocalizerToken } from '../../types/Localizer';
import { SessionButtonColor } from '../basic/SessionButton';
import {
ConversationInteractionType,
ConversationInteractionStatus,
} from '../../interactions/types';
/** Menu items standardized */
@ -297,29 +296,6 @@ export const BanMenuItem = (): JSX.Element | null => {
return null;
};
export const CopyMenuItem = (): JSX.Element | null => {
const convoId = useConvoIdFromContext();
const isPublic = useIsPublic(convoId);
const isPrivate = useIsPrivate(convoId);
const isBlinded = useIsBlinded(convoId);
// we want to show the copyId for open groups and private chats only
if ((isPrivate && !isBlinded) || isPublic) {
const copyIdLabel = isPublic ? window.i18n('communityUrlCopy') : window.i18n('accountIDCopy');
return (
<Item
onClick={() => {
void copyPublicKeyByConvoId(convoId);
}}
>
{copyIdLabel}
</Item>
);
}
return null;
};
export const MarkAllReadMenuItem = (): JSX.Element | null => {
const convoId = useConvoIdFromContext();
const isIncomingRequest = useIsIncomingRequest(convoId);

@ -0,0 +1,28 @@
import { Item } from 'react-contexify';
import { useIsPrivate } from '../../../../hooks/useParamSelector';
import { copyPublicKeyByConvoId } from '../../../../interactions/conversationInteractions';
import { Localizer } from '../../../basic/Localizer';
import { showCopyAccountIdAction } from '.';
/**
* Can be used to copy the conversation AccountID or the message's author sender'id.
* Depending on what the pubkey is
*/
export const CopyAccountIdMenuItem = ({ pubkey }: { pubkey: string }): JSX.Element | null => {
const isPrivate = useIsPrivate(pubkey);
// we want to show the copyId for communities only
if (showCopyAccountIdAction({ isPrivate, pubkey })) {
return (
<Item
onClick={() => {
void copyPublicKeyByConvoId(pubkey);
}}
>
<Localizer token="accountIDCopy" />
</Item>
);
}
return null;
};

@ -0,0 +1,11 @@
import { PubKey } from '../../../../session/types';
export function showCopyAccountIdAction({
isPrivate,
pubkey,
}: {
isPrivate: boolean;
pubkey: string;
}) {
return isPrivate && !PubKey.isBlinded(pubkey);
}

@ -0,0 +1,24 @@
import { Item } from 'react-contexify';
import { showCopyCommunityUrlMenuItem } from '.';
import { useIsPublic } from '../../../../hooks/useParamSelector';
import { copyPublicKeyByConvoId } from '../../../../interactions/conversationInteractions';
import { Localizer } from '../../../basic/Localizer';
export const CopyCommunityUrlMenuItem = ({ convoId }: { convoId: string }): JSX.Element | null => {
const isPublic = useIsPublic(convoId);
// we want to show the copyId for communities only
if (showCopyCommunityUrlMenuItem({ isPublic })) {
return (
<Item
onClick={() => {
void copyPublicKeyByConvoId(convoId);
}}
>
<Localizer token="communityUrlCopy" />
</Item>
);
}
return null;
};

@ -0,0 +1,3 @@
export function showCopyCommunityUrlMenuItem({ isPublic }: { isPublic: boolean }) {
return isPublic;
}
Loading…
Cancel
Save