feat: add mention support friend nickname

pull/90/head
moonrailgun 2 years ago
parent 20c16adeec
commit 902ab8f422

@ -36,7 +36,7 @@ regMessageTextDecorators(() => ({
return `[${h}]${plain}[/card]`; return `[${h}]${plain}[/card]`;
}, },
mention: (userId, userName) => `[at=${userId}]${userName}[/at]`, mention: (userId, userName) => `[at=${userId} origin="${userName}"][/at]`, // keep empty content to auto generate with context, useful for friend nickname. NOTE: `origin` is not meaningless just for react-mention to locate text.
emoji: (emojiCode) => `[emoji]${stripColons(emojiCode)}[/emoji]`, emoji: (emojiCode) => `[emoji]${stripColons(emojiCode)}[/emoji]`,
serialize: (plain: string) => (serialize ? serialize(plain) : plain), serialize: (plain: string) => (serialize ? serialize(plain) : plain),
})); }));

@ -19,6 +19,7 @@ import {
useGroupInfo, useGroupInfo,
GroupPanelType, GroupPanelType,
} from 'tailchat-shared'; } from 'tailchat-shared';
import { useFriendNicknameMap } from 'tailchat-shared/redux/hooks/useFriendNickname';
import { MembersPanel } from './MembersPanel'; import { MembersPanel } from './MembersPanel';
import { GroupPanelContainer } from './shared/GroupPanelContainer'; import { GroupPanelContainer } from './shared/GroupPanelContainer';
@ -80,6 +81,7 @@ export const TextPanel: React.FC<TextPanelProps> = React.memo(
const groupMembers = useGroupMemberInfos(groupId); const groupMembers = useGroupMemberInfos(groupId);
const panelInfo = useGroupPanelInfo(groupId, panelId); const panelInfo = useGroupPanelInfo(groupId, panelId);
const { disabled, placeholder } = useChatInputInfo(groupId); const { disabled, placeholder } = useChatInputInfo(groupId);
const friendNicknameMap = useFriendNicknameMap();
if (!group) { if (!group) {
return null; return null;
@ -134,7 +136,9 @@ export const TextPanel: React.FC<TextPanelProps> = React.memo(
<ChatInputMentionsContextProvider <ChatInputMentionsContextProvider
users={groupMembers.map((m) => ({ users={groupMembers.map((m) => ({
id: m._id, id: m._id,
display: m.nickname, display: friendNicknameMap[m._id]
? friendNicknameMap[m._id]
: m.nickname,
}))} }))}
panels={group.panels panels={group.panels
.filter((p) => p.type !== GroupPanelType.GROUP) .filter((p) => p.type !== GroupPanelType.GROUP)

Loading…
Cancel
Save