Skip to content

Commit 133e232

Browse files
committed
example: collapsible message text
1 parent 3b1dbe1 commit 133e232

File tree

6 files changed

+82
-0
lines changed

6 files changed

+82
-0
lines changed

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,3 +262,16 @@
262262
<div>Latest message text: {{ latestMessageText }}</div>
263263
<div>Latest message id: {{ latestMessage?.id }}</div>
264264
</ng-template>
265+
266+
<ng-template
267+
#messageText
268+
let-message="message"
269+
let-shouldTranslate="shouldTranslate"
270+
let-isQuoted="isQuoted"
271+
>
272+
<app-message-text
273+
[message]="message"
274+
[shouldTranslate]="shouldTranslate"
275+
[isQuoted]="isQuoted"
276+
></app-message-text>
277+
</ng-template>

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

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

@@ -95,6 +96,8 @@ export class AppComponent implements AfterViewInit {
9596
private emptyMainMessageListTemplate!: TemplateRef<void>;
9697
@ViewChild('emptyThreadMessageList')
9798
private emptyThreadMessageListTemplate!: TemplateRef<void>;
99+
@ViewChild('messageText')
100+
messageTextTemplate!: TemplateRef<MessageTextContext>;
98101

99102
constructor(
100103
private chatService: ChatClientService,
@@ -189,6 +192,9 @@ export class AppComponent implements AfterViewInit {
189192
this.customTemplatesService.emptyThreadMessageListPlaceholder$.next(
190193
this.emptyThreadMessageListTemplate
191194
);
195+
this.customTemplatesService.messageTextTemplate$.next(
196+
this.messageTextTemplate
197+
);
192198
}
193199

194200
inviteClicked(channel: Channel) {

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { PickerModule } from '@ctrl/ngx-emoji-mart';
1212
import { MessageActionComponent } from './message-action/message-action.component';
1313
import { ThreadHeaderComponent } from './thread-header/thread-header.component';
1414
import { IconComponent } from './icon/icon.component';
15+
import { MessageTextComponent } from './message-text/message-text.component';
1516

1617
@NgModule({
1718
declarations: [
@@ -20,6 +21,7 @@ import { IconComponent } from './icon/icon.component';
2021
MessageActionComponent,
2122
ThreadHeaderComponent,
2223
IconComponent,
24+
MessageTextComponent,
2325
],
2426
imports: [
2527
BrowserModule,
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<ng-container *ngIf="isQuoted; else regularMessageText">
2+
<!-- Quoted message are clamped by default, so need there -->
3+
<stream-message-text
4+
[message]="message"
5+
[shouldTranslate]="shouldTranslate"
6+
[isQuoted]="isQuoted"
7+
></stream-message-text>
8+
</ng-container>
9+
<ng-template #regularMessageText>
10+
<div class="message-text" [class.message-text-expanded]="isExpanded" #text>
11+
<stream-message-text
12+
[message]="message"
13+
[shouldTranslate]="shouldTranslate"
14+
[isQuoted]="isQuoted"
15+
></stream-message-text>
16+
</div>
17+
<!-- 5px diff is due to Firefox issue -->
18+
<button
19+
[class.visible]="text.scrollHeight - text.clientHeight > 5 || isExpanded"
20+
(click)="isExpanded = !isExpanded"
21+
>
22+
{{ "Show" + (isExpanded ? " less" : " more") }}
23+
</button>
24+
</ng-template>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
.message-text {
2+
overflow: hidden;
3+
display: -webkit-box;
4+
-webkit-line-clamp: 5;
5+
line-clamp: 5;
6+
-webkit-box-orient: vertical;
7+
}
8+
9+
.message-text.message-text-expanded {
10+
display: block;
11+
}
12+
13+
button {
14+
display: none;
15+
16+
&.visible {
17+
display: block;
18+
}
19+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Component, Input } from '@angular/core';
2+
import { MessageResponseBase } from 'stream-chat';
3+
import { DefaultStreamChatGenerics, StreamMessage } from 'stream-chat-angular';
4+
5+
@Component({
6+
selector: 'app-message-text',
7+
templateUrl: './message-text.component.html',
8+
styleUrls: ['./message-text.component.scss'],
9+
})
10+
export class MessageTextComponent {
11+
@Input() message:
12+
| StreamMessage<DefaultStreamChatGenerics>
13+
| undefined
14+
| MessageResponseBase<DefaultStreamChatGenerics>;
15+
@Input() isQuoted: boolean = false;
16+
@Input() shouldTranslate: boolean = false;
17+
isExpanded = false;
18+
}

0 commit comments

Comments
 (0)