packages/storybook8/stories/Components/MessageThread/MentionUsers/MentionUsers.story.tsx (81 lines of code) (raw):

// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. import { ChatMessage, FluentThemeProvider, MessageStatus, MessageThread } from '@azure/communication-react'; import React from 'react'; import { ArgsFrom } from '../../../controlsUtils'; const storyControls = { mentionNames: { control: 'text', name: 'Mention Names (comma seperated list)' } }; const MentionUsersStory = (args: ArgsFrom<typeof storyControls>): JSX.Element => { const user1Id = 'user1'; const user2Id = 'user2'; const user3Id = 'user3'; const names = args.mentionNames.split(',').map((name: string) => name.trim()); const mentionlist = [ { id: 'everyone', displayText: 'Everyone' } ]; names.forEach((name: string) => { mentionlist.push({ id: name, displayText: name }); }); const messages: ChatMessage[] = [ { messageType: 'chat', senderId: user1Id, senderDisplayName: 'Kat Larsson', messageId: Math.random().toString(), content: `Hey <msft-mention id="${user2Id}">Robert Tolbert</msft-mention> and <msft-mention id="${user3Id}">Milton Dyer</msft-mention>, can you help me with my internet connection?`, createdOn: new Date('2019-04-13T00:00:00.000+08:10'), mine: false, attached: false, status: 'seen' as MessageStatus, contentType: 'html' }, { messageType: 'chat', senderId: user2Id, senderDisplayName: 'Robert Tolbert', messageId: Math.random().toString(), content: 'Absolutely! What seems to be the problem? <msft-mention id="${user1Id}">Kat Larsson</msft-mention>', createdOn: new Date('2019-04-13T00:00:00.000+08:11'), mine: true, attached: false, contentType: 'html' } ]; const onUpdateMessageCallback = (messageId: string, content: string): Promise<void> => { const msgIdx = messages.findIndex((m) => m.messageId === messageId); const message = messages[msgIdx] as ChatMessage; message.content = content; message.editedOn = new Date(Date.now()); messages[msgIdx] = message; return Promise.resolve(); }; return ( <FluentThemeProvider> <MessageThread userId={user2Id} showMessageDate={true} messages={messages} onUpdateMessage={onUpdateMessageCallback} mentionOptions={{ displayOptions: { onRenderMention: (mention, defaultOnMentionRender) => { return <button key={Math.random().toString()}>{defaultOnMentionRender(mention)}</button>; } }, lookupOptions: { onQueryUpdated: async (query) => { return Promise.resolve( mentionlist.filter((suggestion) => suggestion.displayText.toLocaleLowerCase().startsWith(query.toLocaleLowerCase()) ) ); } } }} /> </FluentThemeProvider> ); }; export const MessageThreadWithMentionUsers = MentionUsersStory.bind({});