add a show user details option in the menu

Fixes #1971
pull/1979/head
Audric Ackermann 4 years ago
parent 78738675b8
commit 55313deb91
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4

@ -422,6 +422,7 @@
"unpinConversation": "Unpin Conversation", "unpinConversation": "Unpin Conversation",
"pinConversationLimitTitle": "Pinned conversations limit", "pinConversationLimitTitle": "Pinned conversations limit",
"pinConversationLimitToastDescription": "You can only pin $number$ conversations", "pinConversationLimitToastDescription": "You can only pin $number$ conversations",
"showUserDetails": "Show User Details",
"latestUnreadIsAbove": "First unread message is above", "latestUnreadIsAbove": "First unread message is above",
"sendRecoveryPhraseTitle": "Sending Recovery Phrase", "sendRecoveryPhraseTitle": "Sending Recovery Phrase",
"sendRecoveryPhraseMessage": "You are attempting to send your recovery phrase which can be used to access your account. Are you sure you want to send this message?", "sendRecoveryPhraseMessage": "You are attempting to send your recovery phrase which can be used to access your account. Are you sure you want to send this message?",

@ -356,6 +356,9 @@ const ConversationListItem = (props: Props) => {
left={!!left} left={!!left}
type={type} type={type}
currentNotificationSetting={currentNotificationSetting || 'all'} currentNotificationSetting={currentNotificationSetting || 'all'}
avatarPath={avatarPath || null}
name={name}
profileName={profileName}
/> />
</Portal> </Portal>
</div> </div>

@ -360,6 +360,9 @@ export const ConversationHeaderWithDetails = () => {
left={left} left={left}
hasNickname={hasNickname} hasNickname={hasNickname}
currentNotificationSetting={currentNotificationSetting} currentNotificationSetting={currentNotificationSetting}
avatarPath={avatarPath}
name={name}
profileName={profileName}
/> />
</div> </div>

@ -6,6 +6,7 @@ import useCopyToClipboard from 'react-use/lib/useCopyToClipboard';
import useKey from 'react-use/lib/useKey'; import useKey from 'react-use/lib/useKey';
import { ConversationTypeEnum } from '../../models/conversation'; import { ConversationTypeEnum } from '../../models/conversation';
import { getConversationController } from '../../session/conversations'; import { getConversationController } from '../../session/conversations';
import { ToastUtils } from '../../session/utils';
import { openConversationWithMessages } from '../../state/ducks/conversations'; import { openConversationWithMessages } from '../../state/ducks/conversations';
import { updateUserDetailsModal } from '../../state/ducks/modalDialog'; import { updateUserDetailsModal } from '../../state/ducks/modalDialog';
import { Avatar, AvatarSize } from '../Avatar'; import { Avatar, AvatarSize } from '../Avatar';
@ -77,6 +78,7 @@ export const UserDetailsDialog = (props: Props) => {
buttonColor={SessionButtonColor.Primary} buttonColor={SessionButtonColor.Primary}
onClick={() => { onClick={() => {
copyToClipboard(props.conversationId); copyToClipboard(props.conversationId);
ToastUtils.pushCopiedToClipBoard();
}} }}
/> />
<SessionButton <SessionButton

@ -15,6 +15,7 @@ import {
getNotificationForConvoMenuItem, getNotificationForConvoMenuItem,
getPinConversationMenuItem, getPinConversationMenuItem,
getRemoveModeratorsMenuItem, getRemoveModeratorsMenuItem,
getShowUserDetailsMenuItem,
getStartCallMenuItem, getStartCallMenuItem,
getUpdateGroupNameMenuItem, getUpdateGroupNameMenuItem,
} from './Menu'; } from './Menu';
@ -34,6 +35,9 @@ export type PropsConversationHeaderMenu = {
isPrivate: boolean; isPrivate: boolean;
isBlocked: boolean; isBlocked: boolean;
hasNickname: boolean; hasNickname: boolean;
name: string | undefined;
profileName: string | undefined;
avatarPath: string | null;
}; };
const ConversationHeaderMenu = (props: PropsConversationHeaderMenu) => { const ConversationHeaderMenu = (props: PropsConversationHeaderMenu) => {
@ -50,7 +54,11 @@ const ConversationHeaderMenu = (props: PropsConversationHeaderMenu) => {
left, left,
hasNickname, hasNickname,
currentNotificationSetting, currentNotificationSetting,
name,
profileName,
avatarPath,
} = props; } = props;
const userName = name || profileName || conversationId;
return ( return (
<Menu id={triggerId} animation={animation.fade}> <Menu id={triggerId} animation={animation.fade}>
@ -75,9 +83,9 @@ const ConversationHeaderMenu = (props: PropsConversationHeaderMenu) => {
{getRemoveModeratorsMenuItem(weAreAdmin, isPublic, isKickedFromGroup, conversationId)} {getRemoveModeratorsMenuItem(weAreAdmin, isPublic, isKickedFromGroup, conversationId)}
{getUpdateGroupNameMenuItem(weAreAdmin, isKickedFromGroup, left, conversationId)} {getUpdateGroupNameMenuItem(weAreAdmin, isKickedFromGroup, left, conversationId)}
{getLeaveGroupMenuItem(isKickedFromGroup, left, isGroup, isPublic, conversationId)} {getLeaveGroupMenuItem(isKickedFromGroup, left, isGroup, isPublic, conversationId)}
{/* TODO: add delete group */}
{getInviteContactMenuItem(isGroup, isPublic, conversationId)} {getInviteContactMenuItem(isGroup, isPublic, conversationId)}
{getDeleteContactMenuItem(isGroup, isPublic, left, isKickedFromGroup, conversationId)} {getDeleteContactMenuItem(isGroup, isPublic, left, isKickedFromGroup, conversationId)}
{getShowUserDetailsMenuItem(isPrivate, conversationId, avatarPath, userName)}
</Menu> </Menu>
); );
}; };

@ -18,6 +18,7 @@ import {
getMarkAllReadMenuItem, getMarkAllReadMenuItem,
getNotificationForConvoMenuItem, getNotificationForConvoMenuItem,
getPinConversationMenuItem, getPinConversationMenuItem,
getShowUserDetailsMenuItem,
} from './Menu'; } from './Menu';
export type PropsContextConversationItem = { export type PropsContextConversationItem = {
@ -33,6 +34,9 @@ export type PropsContextConversationItem = {
left: boolean; left: boolean;
theme?: any; theme?: any;
currentNotificationSetting: ConversationNotificationSettingType; currentNotificationSetting: ConversationNotificationSettingType;
name: string | undefined;
profileName: string | undefined;
avatarPath: string | null;
}; };
const ConversationListItemContextMenu = (props: PropsContextConversationItem) => { const ConversationListItemContextMenu = (props: PropsContextConversationItem) => {
@ -48,9 +52,14 @@ const ConversationListItemContextMenu = (props: PropsContextConversationItem) =>
isKickedFromGroup, isKickedFromGroup,
currentNotificationSetting, currentNotificationSetting,
isPrivate, isPrivate,
name,
profileName,
avatarPath,
} = props; } = props;
const isGroup = type === 'group'; const isGroup = type === 'group';
const userName = name || profileName || conversationId;
return ( return (
<Menu id={triggerId} animation={animation.fade}> <Menu id={triggerId} animation={animation.fade}>
{getNotificationForConvoMenuItem({ {getNotificationForConvoMenuItem({
@ -71,6 +80,7 @@ const ConversationListItemContextMenu = (props: PropsContextConversationItem) =>
{getInviteContactMenuItem(isGroup, isPublic, conversationId)} {getInviteContactMenuItem(isGroup, isPublic, conversationId)}
{getDeleteContactMenuItem(isGroup, isPublic, left, isKickedFromGroup, conversationId)} {getDeleteContactMenuItem(isGroup, isPublic, left, isKickedFromGroup, conversationId)}
{getLeaveGroupMenuItem(isKickedFromGroup, left, isGroup, isPublic, conversationId)} {getLeaveGroupMenuItem(isKickedFromGroup, left, isGroup, isPublic, conversationId)}
{getShowUserDetailsMenuItem(isPrivate, conversationId, avatarPath, userName)}
</Menu> </Menu>
); );
}; };

@ -12,7 +12,11 @@ import {
ConversationNotificationSettingType, ConversationNotificationSettingType,
} from '../../../models/conversation'; } from '../../../models/conversation';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { changeNickNameModal, updateConfirmModal } from '../../../state/ducks/modalDialog'; import {
changeNickNameModal,
updateConfirmModal,
updateUserDetailsModal,
} from '../../../state/ducks/modalDialog';
import { SectionType } from '../../../state/ducks/section'; import { SectionType } from '../../../state/ducks/section';
import { getConversationController } from '../../../session/conversations'; import { getConversationController } from '../../../session/conversations';
import { import {
@ -241,6 +245,35 @@ export function getLeaveGroupMenuItem(
return null; return null;
} }
export function getShowUserDetailsMenuItem(
isPrivate: boolean | undefined,
conversationId: string,
avatarPath: string | null,
userName: string
): JSX.Element | null {
const dispatch = useDispatch();
if (isPrivate) {
return (
<Item
onClick={() => {
dispatch(
updateUserDetailsModal({
conversationId: conversationId,
userName,
authorAvatarPath: avatarPath,
})
);
}}
>
{window.i18n('showUserDetails')}
</Item>
);
}
return null;
}
export function getUpdateGroupNameMenuItem( export function getUpdateGroupNameMenuItem(
isAdmin: boolean | undefined, isAdmin: boolean | undefined,
isKickedFromGroup: boolean | undefined, isKickedFromGroup: boolean | undefined,

Loading…
Cancel
Save