Skip to content

Commit a429309

Browse files
authored
Merge pull request #684 from GetStream/prevent-multiple-message-menus-on-mobile
fix: multiple message menus can be opened on mobile
2 parents 44fa54f + 635cb01 commit a429309

3 files changed

Lines changed: 25 additions & 2 deletions

File tree

projects/stream-chat-angular/src/lib/message-actions.service.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,10 @@ export class MessageActionsService<
186186
* By default the [`MessageComponent`](/chat/docs/sdk/angular/components/MessageComponent/) will display the [`MessageActionsBoxComponent`](/chat/docs/sdk/angular/components/MessageActionsBoxComponent/). You can override that behavior by providing your own event handler.
187187
*/
188188
customActionClickHandler?: (details: MessageActionsClickDetails<T>) => void;
189+
/**
190+
* @internal
191+
*/
192+
messageMenuOpenedFor$ = new BehaviorSubject<string | undefined>(undefined);
189193
private hasDisplayedClipboardWarning = false;
190194

191195
constructor(

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<div
2-
#container
32
data-testid="message-container"
43
class="str-chat__message-simple str-chat__message str-chat__message--{{
54
message?.type

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

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,10 +290,27 @@ export class MessageComponent
290290
this.registerMenuTriggerEventHandlers();
291291
});
292292
}
293+
this.subscriptions.push(
294+
this.messageActionsService.messageMenuOpenedFor$.subscribe((id) => {
295+
if (this.message && this.message.id === id) {
296+
if (!this.areMessageOptionsOpen) {
297+
this.messageMenuTrigger?.show();
298+
}
299+
} else if (
300+
(id === undefined || this.message?.id !== id) &&
301+
this.areMessageOptionsOpen
302+
) {
303+
this.messageMenuTrigger?.hide();
304+
}
305+
})
306+
);
293307
}
294308

295309
ngOnDestroy(): void {
296310
this.subscriptions.forEach((s) => s.unsubscribe());
311+
if (this.showMessageMenuTimeout) {
312+
clearTimeout(this.showMessageMenuTimeout);
313+
}
297314
}
298315

299316
mousePushedDown(event: MouseEvent) {
@@ -540,7 +557,10 @@ export class MessageComponent
540557
'undefined'
541558
)
542559
(document.activeElement as HTMLInputElement).blur();
543-
this.messageMenuTrigger?.show();
560+
this.messageMenuTrigger.show();
561+
this.messageActionsService.messageMenuOpenedFor$.next(
562+
this.message?.id
563+
);
544564
}
545565
if (this.isViewInited) {
546566
this.cdRef.detectChanges();

0 commit comments

Comments
 (0)