Skip to content

Commit 1ab3e26

Browse files
authored
Merge pull request #532 from GetStream/fix-custom-modal-reactions
fix: allow using custom modal template in message reactions details
2 parents 12931ac + 579cc3b commit 1ab3e26

File tree

2 files changed

+76
-68
lines changed

2 files changed

+76
-68
lines changed

projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.html

Lines changed: 74 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@
130130
isOpen: !!selectedReactionType,
131131
messageId: messageId,
132132
reactionType: selectedReactionType,
133-
isOpenChangeHandler: isOpenChange
133+
isOpenChangeHandler: isOpenChange,
134+
content: modalContent
134135
}
135136
"
136137
></ng-container>
@@ -142,83 +143,88 @@
142143
let-messageId="messageId"
143144
let-reactionType="reactionType"
144145
let-isOpenChangeHandler="isOpenChangeHandler"
146+
let-content="content"
145147
>
146148
<stream-modal
147149
class="str-chat__message-reactions-details-modal"
148150
[isOpen]="isOpen"
149151
(isOpenChange)="isOpenChangeHandler($event)"
152+
[content]="content"
150153
>
151-
<div class="str-chat__message-reactions-details">
152-
<div class="str-chat__message-reactions-details-reaction-types">
153-
<div
154-
class="str-chat__message-reactions-details-reaction-type"
155-
*ngFor="
156-
let reactionType of existingReactions;
157-
trackBy: trackByMessageReaction
158-
"
159-
[ngStyle]="{
160-
cursor: shouldHandleReactionClick ? 'pointer' : 'default'
161-
}"
162-
attr.data-testid="reaction-details-selector-{{ reactionType }}"
163-
[class.str-chat__message-reactions-details-reaction-type--selected]="
164-
reactionType === selectedReactionType
165-
"
166-
(click)="selectedReactionType = reactionType; allUsers.scrollTop = 0"
167-
(keyup.enter)="
168-
selectedReactionType = reactionType; allUsers.scrollTop = 0
169-
"
170-
>
171-
<span class="emoji str-chat__message-reaction-emoji">
172-
{{ getEmojiByReaction(reactionType) }}&nbsp;
173-
</span>
174-
<span class="str-chat__message-reaction-count">
175-
{{ messageReactionCounts[reactionType] }}
176-
</span>
177-
</div>
178-
</div>
154+
</stream-modal>
155+
</ng-template>
156+
157+
<ng-template #modalContent>
158+
<div class="str-chat__message-reactions-details">
159+
<div class="str-chat__message-reactions-details-reaction-types">
179160
<div
180-
class="
181-
emoji
182-
str-chat__message-reaction-emoji str-chat__message-reaction-emoji-big
161+
class="str-chat__message-reactions-details-reaction-type"
162+
*ngFor="
163+
let reactionType of existingReactions;
164+
trackBy: trackByMessageReaction
165+
"
166+
[ngStyle]="{
167+
cursor: shouldHandleReactionClick ? 'pointer' : 'default'
168+
}"
169+
attr.data-testid="reaction-details-selector-{{ reactionType }}"
170+
[class.str-chat__message-reactions-details-reaction-type--selected]="
171+
reactionType === selectedReactionType
172+
"
173+
(click)="selectedReactionType = reactionType; allUsers.scrollTop = 0"
174+
(keyup.enter)="
175+
selectedReactionType = reactionType; allUsers.scrollTop = 0
183176
"
184177
>
185-
{{ getEmojiByReaction(selectedReactionType!) }}
178+
<span class="emoji str-chat__message-reaction-emoji">
179+
{{ getEmojiByReaction(reactionType) }}&nbsp;
180+
</span>
181+
<span class="str-chat__message-reaction-count">
182+
{{ messageReactionCounts[reactionType] }}
183+
</span>
186184
</div>
187-
<div
188-
#allUsers
189-
data-testid="all-reacting-users"
190-
class="str-chat__message-reactions-details-reacting-users"
191-
>
192-
<stream-loading-indicator
193-
*ngIf="isLoading; else reactions"
194-
></stream-loading-indicator>
195-
<ng-template #reactions>
196-
<div
197-
class="str-chat__message-reactions-details-reacting-user"
198-
*ngFor="
199-
let user of getAllUsersByReaction(selectedReactionType);
200-
trackBy: trackByUserId
201-
"
185+
</div>
186+
<div
187+
class="
188+
emoji
189+
str-chat__message-reaction-emoji str-chat__message-reaction-emoji-big
190+
"
191+
>
192+
{{ getEmojiByReaction(selectedReactionType!) }}
193+
</div>
194+
<div
195+
#allUsers
196+
data-testid="all-reacting-users"
197+
class="str-chat__message-reactions-details-reacting-users"
198+
>
199+
<stream-loading-indicator
200+
*ngIf="isLoading; else reactions"
201+
></stream-loading-indicator>
202+
<ng-template #reactions>
203+
<div
204+
class="str-chat__message-reactions-details-reacting-user"
205+
*ngFor="
206+
let user of getAllUsersByReaction(selectedReactionType);
207+
trackBy: trackByUserId
208+
"
209+
>
210+
<stream-avatar-placeholder
211+
data-testclass="avatar"
212+
class="str-chat__avatar str-chat__avatar--circle"
213+
style="max-height: 100%; overflow-y: hidden"
214+
[size]="30"
215+
[imageUrl]="user.image"
216+
[name]="user.name"
217+
type="user"
218+
location="reaction"
219+
[user]="user"
220+
></stream-avatar-placeholder>
221+
<span
222+
data-testclass="reaction-user-username"
223+
class="str-chat__user-item--name"
224+
>{{ user.name }}</span
202225
>
203-
<stream-avatar-placeholder
204-
data-testclass="avatar"
205-
class="str-chat__avatar str-chat__avatar--circle"
206-
style="max-height: 100%; overflow-y: hidden"
207-
[size]="30"
208-
[imageUrl]="user.image"
209-
[name]="user.name"
210-
type="user"
211-
location="reaction"
212-
[user]="user"
213-
></stream-avatar-placeholder>
214-
<span
215-
data-testclass="reaction-user-username"
216-
class="str-chat__user-item--name"
217-
>{{ user.name }}</span
218-
>
219-
</div>
220-
</ng-template>
221-
</div>
226+
</div>
227+
</ng-template>
222228
</div>
223-
</stream-modal>
229+
</div>
224230
</ng-template>

projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { AvatarPlaceholderComponent } from '../avatar-placeholder/avatar-placeho
1515
import { MessageReactionType } from '../types';
1616
import { MessageReactionsService } from '../message-reactions.service';
1717
import { ThemeService } from '../theme.service';
18+
import { ModalComponent } from '../modal/modal.component';
1819

1920
describe('MessageReactionsComponent', () => {
2021
let component: MessageReactionsComponent;
@@ -59,6 +60,7 @@ describe('MessageReactionsComponent', () => {
5960
MessageReactionsComponent,
6061
AvatarComponent,
6162
AvatarPlaceholderComponent,
63+
ModalComponent,
6264
],
6365
providers: [
6466
{ provide: ChannelService, useValue: channelServiceMock },

0 commit comments

Comments
 (0)