Skip to content
This repository was archived by the owner on Sep 7, 2020. It is now read-only.

Commit d606b12

Browse files
committed
fix: handle nickname change for new users
1 parent 6952fff commit d606b12

File tree

2 files changed

+55
-32
lines changed

2 files changed

+55
-32
lines changed

src/Chat/Twilio/ChannelView.tsx

+53-30
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ export const ChannelView = ({
108108
onSlashCommand(SlashCommand.JOIN, args[0])
109109
break
110110
case '/nick':
111+
setAuthorNicks(previous => ({
112+
...previous,
113+
[identity]: args.join(' '),
114+
}))
111115
onSlashCommand(SlashCommand.NICK, args.join(' '))
112116
break
113117
default:
@@ -133,6 +137,36 @@ export const ChannelView = ({
133137
},
134138
})
135139

140+
const userChangedNickHandler = ({
141+
updateReasons,
142+
user,
143+
}: User.UpdatedEventArgs) => {
144+
if (updateReasons.includes('friendlyName')) {
145+
updateMessages(prevMessages => ({
146+
...prevMessages,
147+
messages: [
148+
...prevMessages.messages,
149+
{
150+
sid: v4(),
151+
status: {
152+
message: (
153+
<>
154+
User <em>{authorNicks[user.identity] || user.identity}</em>{' '}
155+
changed their name to <em>{user.friendlyName}</em>.
156+
</>
157+
),
158+
timestamp: new Date(),
159+
},
160+
},
161+
],
162+
}))
163+
setAuthorNicks(authorNicks => ({
164+
...authorNicks,
165+
[user.identity]: user.friendlyName,
166+
}))
167+
}
168+
}
169+
136170
const newMessageHandler = (message: Message) => {
137171
updateMessages(prevMessages => ({
138172
...prevMessages,
@@ -141,6 +175,25 @@ export const ChannelView = ({
141175
? prevMessages.lastIndex
142176
: message.index,
143177
}))
178+
if (!authorNicks[message.author]) {
179+
channelConnection?.client
180+
.getUserDescriptor(message.author)
181+
.then(async d => {
182+
const user = await d.subscribe()
183+
user.on('updated', userChangedNickHandler)
184+
setAuthorNicks(previous => ({
185+
...previous,
186+
[message.author]: d.friendlyName,
187+
}))
188+
setAuthorSubscriptions(previous => ({
189+
...previous,
190+
[message.author]: user,
191+
}))
192+
})
193+
.catch(err => {
194+
console.error(err)
195+
})
196+
}
144197
}
145198

146199
const memberJoinedHandler = (member: Member) => {
@@ -175,36 +228,6 @@ export const ChannelView = ({
175228
}))
176229
}
177230

178-
const userChangedNickHandler = ({
179-
updateReasons,
180-
user,
181-
}: User.UpdatedEventArgs) => {
182-
if (updateReasons.includes('friendlyName')) {
183-
updateMessages(prevMessages => ({
184-
...prevMessages,
185-
messages: [
186-
...prevMessages.messages,
187-
{
188-
sid: v4(),
189-
status: {
190-
message: (
191-
<>
192-
User <em>{authorNicks[user.identity] || user.identity}</em>{' '}
193-
changed their name to <em>{user.friendlyName}</em>.
194-
</>
195-
),
196-
timestamp: new Date(),
197-
},
198-
},
199-
],
200-
}))
201-
setAuthorNicks(authorNicks => ({
202-
...authorNicks,
203-
[user.identity]: user.friendlyName,
204-
}))
205-
}
206-
}
207-
208231
useEffect(() => {
209232
if (channelConnection) {
210233
channelConnection.channel.on('messageAdded', newMessageHandler)

src/Chat/components/MessageItem.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ import { emojify } from './Emojify'
77
const MessageView = styled.div`
88
border-radius: 10px;
99
background-color: #dbedff;
10-
margin: 1rem 4rem 1rem 1rem;
10+
margin: 0.5rem 0.5rem 0.5rem 4rem;
1111
`
1212

1313
const UserMessageView = styled(MessageView)`
14-
margin: 1rem 1rem 1rem 4rem;
14+
margin: 0.5rem 4rem 0.5rem 0.5rem;
1515
background-color: #dbfff7;
1616
`
1717

0 commit comments

Comments
 (0)