diff --git a/src/web/components/FindResultItem.tsx b/src/web/components/FindResultItem.tsx index 3359adab7..ea970c20a 100644 --- a/src/web/components/FindResultItem.tsx +++ b/src/web/components/FindResultItem.tsx @@ -10,7 +10,7 @@ import { TRPGState, TRPGDispatch } from '@redux/types/__all__'; import _get from 'lodash/get'; import _isNil from 'lodash/isNil'; import { showModal } from '@redux/actions/ui'; -import GroupInfo from './popover/GroupInfo'; +import PopoverGroupInfo from './popover/GroupInfo'; import { Popover } from 'antd'; import './FindResultItem.scss'; @@ -118,7 +118,7 @@ class FindResultItem extends React.Component {
} + content={} >
diff --git a/src/web/components/messageTypes/Base.tsx b/src/web/components/messageTypes/Base.tsx index 160e66123..8e78146c8 100644 --- a/src/web/components/messageTypes/Base.tsx +++ b/src/web/components/messageTypes/Base.tsx @@ -4,6 +4,9 @@ import config from '../../../shared/project.config'; import { MessageProps } from '@shared/components/MessageHandler'; import _get from 'lodash/get'; import { getAbsolutePath } from '@shared/utils/file-helper'; +import Avatar from '../Avatar'; +import { Popover } from 'antd'; +import PopoverUserInfo from '../popover/UserInfo'; class Base

extends React.PureComponent< P @@ -26,6 +29,12 @@ class Base

extends React.PureComponent< return _get(info, 'data.name') || name; } + getSenderUUID(): string { + const { info } = this.props; + + return _get(info, ['sender_uuid'], ''); + } + /** * 返回信息avatar的地址 * 获取顺序: 消息信息内头像 -> 传递来的头像(发送者) -> 默认头像 @@ -71,7 +80,25 @@ class Base

extends React.PureComponent<

- + {me ? ( + + ) : ( + } + > + + + )}
{this.getContent()}
diff --git a/src/web/components/popover/GroupInfo.tsx b/src/web/components/popover/GroupInfo.tsx index ff0bbc92e..fbab6f0df 100644 --- a/src/web/components/popover/GroupInfo.tsx +++ b/src/web/components/popover/GroupInfo.tsx @@ -29,7 +29,7 @@ const Container = styled.div` interface Props { groupUUID: string; } -const GroupInfo: React.FC = React.memo((props) => { +const PopoverGroupInfo: React.FC = React.memo((props) => { const groupInfo = useCachedGroupInfo(props.groupUUID); const avatar = useMemo( @@ -62,6 +62,6 @@ const GroupInfo: React.FC = React.memo((props) => { ); }); -GroupInfo.displayName = 'GroupInfo'; +PopoverGroupInfo.displayName = 'PopoverGroupInfo'; -export default GroupInfo; +export default PopoverGroupInfo; diff --git a/src/web/components/popover/UserInfo.tsx b/src/web/components/popover/UserInfo.tsx new file mode 100644 index 000000000..a73308807 --- /dev/null +++ b/src/web/components/popover/UserInfo.tsx @@ -0,0 +1,72 @@ +import React, { useMemo } from 'react'; +import { useCachedUserInfo } from '@shared/hooks/cache'; +import styled from 'styled-components'; +import Avatar from '../Avatar'; +import config from '@shared/project.config'; +import _isEmpty from 'lodash/isEmpty'; + +const Container = styled.div` + display: flex; + max-width: 240px; + + .avatar { + overflow: hidden; + border: 1px solid white; + + > img { + width: 100%; + height: 100%; + } + } + + .info { + flex: 1; + margin-left: 10px; + overflow: hidden; + } +`; + +interface Props { + userUUID: string; +} +const PopoverUserInfo: React.FC = React.memo((props) => { + const userInfo = useCachedUserInfo(props.userUUID); + + const name = useMemo(() => userInfo.nickname ?? userInfo.username ?? '', [ + userInfo.nickname, + userInfo.username, + ]); + + const avatar = useMemo( + () => + _isEmpty(userInfo.avatar) + ? config.defaultImg.getUser(name) + : userInfo.avatar, + [userInfo.avatar] + ); + + return ( + +
+ +
+
+
+ 用户名: + {name} +
+
+ 性别: + {userInfo.sex} +
+
+ 签名: +

{userInfo.sign}

+
+
+
+ ); +}); +PopoverUserInfo.displayName = 'PopoverUserInfo'; + +export default PopoverUserInfo;