Skip to content

Commit 12931ac

Browse files
authored
Merge pull request #531 from GetStream/message-menu
refactor: Move logic from MessageActionsBox to MessageActionsService
2 parents 847da93 + 1b4f5f3 commit 12931ac

15 files changed

+394
-163
lines changed

projects/customizations-example/src/app/app.component.html

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,7 @@
55
</stream-channel-list>
66
<stream-channel>
77
<stream-channel-header></stream-channel-header>
8-
<stream-message-list
9-
[customMessageActions]="[
10-
{
11-
actionName: 'forward',
12-
actionLabelOrTranslationKey: 'Forward',
13-
isVisible: isVisible,
14-
actionHandler: actionHandler
15-
}
16-
]"
17-
></stream-message-list>
8+
<stream-message-list></stream-message-list>
189
<stream-notification-list></stream-notification-list>
1910
<stream-message-input></stream-message-input>
2011
<stream-thread name="thread">
@@ -175,20 +166,16 @@
175166

176167
<ng-template
177168
#messageActionsBoxTemplate
178-
let-isOpen="isOpen"
179169
let-isMine="isMine"
180170
let-enabledActions="enabledActions"
181171
let-messageInput="message"
182-
let-displayedActionsCountChangeHandler="displayedActionsCountChangeHandler"
183-
let-isEditingChangeHandler="isEditingChangeHandler"
172+
let-customActions="customActions"
184173
>
185174
<stream-message-actions-box
186-
[isOpen]="isOpen"
187175
[isMine]="isMine"
188176
[enabledActions]="enabledActions"
189177
[message]="messageInput"
190-
(displayedActionsCount)="displayedActionsCountChangeHandler($event)"
191-
(isEditing)="isEditingChangeHandler($event)"
178+
[customActions]="customActions"
192179
></stream-message-actions-box>
193180
</ng-template>
194181

projects/customizations-example/src/app/app.component.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import {
3636
ThreadHeaderContext,
3737
CustomAttachmentUploadContext,
3838
DateSeparatorContext,
39+
MessageActionsService,
3940
} from 'stream-chat-angular';
4041
import { environment } from '../environments/environment';
4142

@@ -100,8 +101,17 @@ export class AppComponent implements AfterViewInit {
100101
private chatService: ChatClientService,
101102
public channelService: ChannelService,
102103
private streamI18nService: StreamI18nService,
103-
private customTemplatesService: CustomTemplatesService
104+
private customTemplatesService: CustomTemplatesService,
105+
private messageActionsService: MessageActionsService
104106
) {
107+
this.messageActionsService.customActions$.next([
108+
{
109+
actionName: 'forward',
110+
actionLabelOrTranslationKey: 'Forward',
111+
isVisible: this.isVisible,
112+
actionHandler: this.actionHandler,
113+
},
114+
]);
105115
void this.chatService.init(
106116
environment.apiKey,
107117
environment.userId,
@@ -210,5 +220,8 @@ export class AppComponent implements AfterViewInit {
210220
return true;
211221
}
212222

213-
actionHandler() {}
223+
actionHandler() {
224+
/* eslint-disable-next-line no-console */
225+
console.log('forwarded');
226+
}
214227
}

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

Lines changed: 18 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { NotificationService } from '../notification.service';
2626
import { DefaultStreamChatGenerics, StreamMessage } from '../types';
2727

2828
import { MessageActionsBoxComponent } from './message-actions-box.component';
29+
import { MessageActionsService } from '../message-actions.service';
2930

3031
describe('MessageActionsBoxComponent', () => {
3132
let component: MessageActionsBoxComponent;
@@ -88,6 +89,7 @@ describe('MessageActionsBoxComponent', () => {
8889
component = fixture.componentInstance;
8990
message = mockMessage();
9091
component.message = message;
92+
component.ngOnInit();
9193
component.ngOnChanges({ message: {} as SimpleChange });
9294
nativeElement = fixture.nativeElement as HTMLElement;
9395
queryQuoteAction = () =>
@@ -268,42 +270,6 @@ describe('MessageActionsBoxComponent', () => {
268270
);
269271
});
270272

271-
it('should emit the number of displayed actions', () => {
272-
component.enabledActions = [
273-
'pin-message',
274-
'update-own-message',
275-
'delete-own-message',
276-
'flag-message',
277-
];
278-
component.isMine = true;
279-
const spy = jasmine.createSpy();
280-
component.displayedActionsCount.subscribe(spy);
281-
component.ngOnChanges({
282-
isMine: {} as any as SimpleChange,
283-
enabledActions: {} as any as SimpleChange,
284-
});
285-
fixture.detectChanges();
286-
287-
expect(spy).toHaveBeenCalledWith(3);
288-
289-
spy.calls.reset();
290-
component.enabledActions = [
291-
'pin-message',
292-
'update-any-message',
293-
'delete',
294-
'flag-message',
295-
'quote-message',
296-
];
297-
component.isMine = false;
298-
component.ngOnChanges({
299-
isMine: {} as any as SimpleChange,
300-
enabledActions: {} as any as SimpleChange,
301-
});
302-
fixture.detectChanges();
303-
304-
expect(spy).toHaveBeenCalledWith(4);
305-
});
306-
307273
describe('should display edit action', () => {
308274
it('if #enabledActions contains "edit" and #isMine', () => {
309275
component.enabledActions = ['update-own-message'];
@@ -372,7 +338,9 @@ describe('MessageActionsBoxComponent', () => {
372338

373339
it('should emit #isEditing if user starts to edit', () => {
374340
const spy = jasmine.createSpy();
375-
component.isEditing.subscribe(spy);
341+
const actionsService = TestBed.inject(MessageActionsService);
342+
actionsService.messageToEdit$.subscribe(spy);
343+
spy.calls.reset();
376344
component.enabledActions = [
377345
'pin-message',
378346
'update-any-message',
@@ -386,7 +354,7 @@ describe('MessageActionsBoxComponent', () => {
386354
queryEditAction()?.click();
387355
fixture.detectChanges();
388356

389-
expect(spy).toHaveBeenCalledWith(true);
357+
expect(spy).toHaveBeenCalledWith(component.message);
390358
});
391359

392360
it('should open modal if user starts to edit', () => {
@@ -435,14 +403,16 @@ describe('MessageActionsBoxComponent', () => {
435403
});
436404
fixture.detectChanges();
437405
const spy = jasmine.createSpy();
438-
component.isEditing.subscribe(spy);
406+
const actionsService = TestBed.inject(MessageActionsService);
407+
actionsService.messageToEdit$.subscribe(spy);
439408
queryEditAction()?.click();
440409
fixture.detectChanges();
410+
spy.calls.reset();
441411
queryModalCancelButton()?.click();
442412
fixture.detectChanges();
443413

444414
expect(queryEditModal().isOpen).toBeFalse();
445-
expect(spy).toHaveBeenCalledWith(false);
415+
expect(spy).toHaveBeenCalledWith(undefined);
446416
});
447417

448418
it('should update #isEditModalOpen if modal is closed', () => {
@@ -455,14 +425,16 @@ describe('MessageActionsBoxComponent', () => {
455425
});
456426
fixture.detectChanges();
457427
const spy = jasmine.createSpy();
458-
component.isEditing.subscribe(spy);
428+
const actionsService = TestBed.inject(MessageActionsService);
429+
actionsService.messageToEdit$.subscribe(spy);
459430
queryEditAction()?.click();
460431
fixture.detectChanges();
432+
spy.calls.reset();
461433
queryEditModal().close();
462434
fixture.detectChanges();
463435

464436
expect(component.isEditModalOpen).toBeFalse();
465-
expect(spy).toHaveBeenCalledWith(false);
437+
expect(spy).toHaveBeenCalledWith(undefined);
466438
});
467439

468440
it('should close modal if message was updated successfully', () => {
@@ -476,14 +448,16 @@ describe('MessageActionsBoxComponent', () => {
476448
queryEditAction()?.click();
477449
fixture.detectChanges();
478450
const spy = jasmine.createSpy();
479-
component.isEditing.subscribe(spy);
451+
const actionsService = TestBed.inject(MessageActionsService);
452+
actionsService.messageToEdit$.subscribe(spy);
453+
spy.calls.reset();
480454
const messageInputComponent = queryMessageInputComponent();
481455

482456
messageInputComponent.messageUpdate.emit();
483457
fixture.detectChanges();
484458

485459
expect(queryEditModal().isOpen).toBeFalse();
486-
expect(spy).toHaveBeenCalledWith(false);
460+
expect(spy).toHaveBeenCalledWith(undefined);
487461
});
488462

489463
it('should delete message', () => {

0 commit comments

Comments
 (0)