Skip to content

Commit acbce56

Browse files
authored
Style/pictique chat bubbles names (#435)
* chore: add name to chatBubbles * feat: add name to chat bubbles on pictique * fix: lint
1 parent 328bc79 commit acbce56

3 files changed

Lines changed: 50 additions & 7 deletions

File tree

platforms/pictique/src/lib/fragments/ChatMessage/ChatMessage.svelte

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@
7474
</div>
7575

7676
<div class={cn(`max-w-[50%] ${isHeadNeeded ? 'mt-4' : 'mt-0'}`)}>
77+
{#if isHeadNeeded && !isOwn && sender}
78+
<p class="text-black-400 mb-1 px-1 text-xs font-medium">
79+
{sender.name}
80+
</p>
81+
{/if}
7782
<div
7883
class={cn(
7984
`relative rounded-3xl px-4 py-2 ${isOwn ? 'bg-grey' : 'bg-brand-burnt-orange'}`

platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,20 @@
4242
isOwn: false,
4343
userImgSrc: 'https://i.pravatar.cc/150?img=2',
4444
time: '2 minutes ago',
45-
message: 'Hey everyone, can we finalize the color palette today?'
45+
message: 'Hey everyone, can we finalize the color palette today?',
46+
senderId: 'user-2',
47+
senderName: 'Bob',
48+
senderHandle: '@bob'
4649
},
4750
{
4851
id: 'msg-2',
4952
isOwn: true,
5053
userImgSrc: 'https://i.pravatar.cc/150?img=1',
5154
time: '1 minute ago',
52-
message: 'Yes, I just pushed a new draft to Figma.'
55+
message: 'Yes, I just pushed a new draft to Figma.',
56+
senderId: 'user-1',
57+
senderName: 'Alice',
58+
senderHandle: '@alice'
5359
}
5460
]);
5561
@@ -65,14 +71,18 @@
6571
6672
async function handleSend() {
6773
if (!messageValue.trim()) return Promise.resolve();
74+
const currentMember = group.members.find((m) => m.id === userId);
6875
messages = [
6976
...messages,
7077
{
7178
id: `msg-${Date.now()}`,
7279
isOwn: true,
73-
userImgSrc: group.members.find((m) => m.id === userId)?.avatar || '',
80+
userImgSrc: currentMember?.avatar || '',
7481
time: 'just now',
75-
message: messageValue
82+
message: messageValue,
83+
senderId: userId,
84+
senderName: currentMember?.name || '',
85+
senderHandle: `@${currentMember?.name.toLowerCase() || ''}`
7686
}
7787
];
7888
messageValue = '';
@@ -141,12 +151,32 @@
141151

142152
<section class="chat relative px-0">
143153
<div class="mt-4 h-[calc(100vh-300px)] overflow-auto" bind:this={messagesContainer}>
144-
{#each messages as msg (msg.id)}
154+
{#each messages as msg, index (msg.id)}
155+
{@const prevMessage = index > 0 ? messages[index - 1] : null}
156+
{@const nextMessage = index < messages.length - 1 ? messages[index + 1] : null}
157+
{@const isHeadNeeded = Boolean(
158+
!prevMessage ||
159+
prevMessage.isOwn !== msg.isOwn ||
160+
(prevMessage.senderId && msg.senderId && prevMessage.senderId !== msg.senderId)
161+
)}
162+
{@const isTimestampNeeded = Boolean(
163+
!nextMessage ||
164+
nextMessage.isOwn !== msg.isOwn ||
165+
(nextMessage.senderId && msg.senderId && nextMessage.senderId !== msg.senderId)
166+
)}
145167
<ChatMessage
146168
isOwn={msg.isOwn}
147169
userImgSrc={msg.userImgSrc}
148170
time={msg.time}
149171
message={msg.message}
172+
{isHeadNeeded}
173+
{isTimestampNeeded}
174+
sender={{
175+
id: msg.senderId,
176+
name: msg.senderName,
177+
handle: msg.senderHandle,
178+
avatarUrl: msg.userImgSrc
179+
}}
150180
/>
151181
{/each}
152182
</div>

platforms/pictique/src/routes/(protected)/messages/[id]/+page.svelte

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,18 @@
122122
const nextMessage = index < newMessages.length - 1 ? newMessages[index + 1] : null;
123123
124124
// Show head (avatar, pointer) on first message of group
125-
const isHeadNeeded = !prevMessage || prevMessage.isOwn !== msg.isOwn;
125+
// Check if isOwn changed OR if the sender changed (for non-own messages)
126+
const isHeadNeeded =
127+
!prevMessage ||
128+
prevMessage.isOwn !== msg.isOwn ||
129+
(prevMessage.senderId && msg.senderId && prevMessage.senderId !== msg.senderId);
126130
127131
// Show timestamp on last message of group
128-
const isTimestampNeeded = !nextMessage || nextMessage.isOwn !== msg.isOwn;
132+
// Check if isOwn will change OR if the sender will change (for non-own messages)
133+
const isTimestampNeeded =
134+
!nextMessage ||
135+
nextMessage.isOwn !== msg.isOwn ||
136+
(nextMessage.senderId && msg.senderId && nextMessage.senderId !== msg.senderId);
129137
130138
return {
131139
...msg,

0 commit comments

Comments
 (0)