Skip to content

Commit dffba38

Browse files
authored
Merge pull request #396 from GetStream/custom-read-state
feat: Custom message state templates
2 parents 5b2203f + bb14206 commit dffba38

File tree

4 files changed

+100
-0
lines changed

4 files changed

+100
-0
lines changed

projects/stream-chat-angular/src/lib/custom-templates.service.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
ChannelActionsContext,
88
ChannelPreviewContext,
99
CommandAutocompleteListItemContext,
10+
DeliveredStatusContext,
1011
EmojiPickerContext,
1112
IconContext,
1213
LoadingIndicatorContext,
@@ -19,6 +20,8 @@ import {
1920
MessageReactionsContext,
2021
ModalContext,
2122
NotificationContext,
23+
ReadStatusContext,
24+
SendingStatusContext,
2225
ThreadHeaderContext,
2326
TypingIndicatorContext,
2427
} from './types';
@@ -190,6 +193,24 @@ export class CustomTemplatesService {
190193
threadHeaderTemplate$ = new BehaviorSubject<
191194
TemplateRef<ThreadHeaderContext> | undefined
192195
>(undefined);
196+
/**
197+
* The template used for displaying the delivered state of the message inside the [message component](../components/MessageComponent.mdx)
198+
*/
199+
deliveredStatusTemplate$ = new BehaviorSubject<
200+
TemplateRef<DeliveredStatusContext> | undefined
201+
>(undefined);
202+
/**
203+
* The template used for displaying the sending state of the message inside the [message component](../components/MessageComponent.mdx)
204+
*/
205+
sendingStatusTemplate$ = new BehaviorSubject<
206+
TemplateRef<SendingStatusContext> | undefined
207+
>(undefined);
208+
/**
209+
* The template used for displaying the sent state of the message inside the [message component](../components/MessageComponent.mdx)
210+
*/
211+
readStatusTemplate$ = new BehaviorSubject<
212+
TemplateRef<ReadStatusContext> | undefined
213+
>(undefined);
193214

194215
constructor() {}
195216
}

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,14 @@
471471
</ng-container>
472472
</ng-template>
473473
<ng-template #deliveredStatus>
474+
<ng-container
475+
*ngTemplateOutlet="
476+
customDeliveredStatusTemplate || defaultDeliveredStatus;
477+
context: getDeliveredStatusContext()
478+
"
479+
></ng-container>
480+
</ng-template>
481+
<ng-template #defaultDeliveredStatus>
474482
<span
475483
*ngIf="mode === 'main'"
476484
class="
@@ -499,6 +507,14 @@
499507
</span>
500508
</ng-template>
501509
<ng-template #sendingStatus>
510+
<ng-container
511+
*ngTemplateOutlet="
512+
customSendingStatusTemplate || defaultSendingStatus;
513+
context: getSendingStatusContext()
514+
"
515+
></ng-container>
516+
</ng-template>
517+
<ng-template #defaultSendingStatus>
502518
<span
503519
class="
504520
str-chat__message-simple-status
@@ -525,6 +541,14 @@
525541
</span>
526542
</ng-template>
527543
<ng-template #readStatus>
544+
<ng-container
545+
*ngTemplateOutlet="
546+
customReadStatusTemplate || defaultReadStatus;
547+
context: getReadStatusContext()
548+
"
549+
></ng-container>
550+
</ng-template>
551+
<ng-template #defaultReadStatus>
528552
<span
529553
class="
530554
str-chat__message-simple-status

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

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ import {
2020
MessageReactionsContext,
2121
DefaultStreamChatGenerics,
2222
StreamMessage,
23+
DeliveredStatusContext,
24+
SendingStatusContext,
25+
ReadStatusContext,
2326
} from '../types';
2427
import { parseDate } from './parse-date';
2528
import emojiRegex from 'emoji-regex';
@@ -73,6 +76,11 @@ export class MessageComponent implements OnInit, OnChanges, OnDestroy {
7376
visibleMessageActionsCount = 0;
7477
messageTextParts: MessagePart[] = [];
7578
mentionTemplate: TemplateRef<MentionTemplateContext> | undefined;
79+
customDeliveredStatusTemplate:
80+
| TemplateRef<DeliveredStatusContext>
81+
| undefined;
82+
customSendingStatusTemplate: TemplateRef<SendingStatusContext> | undefined;
83+
customReadStatusTemplate: TemplateRef<ReadStatusContext> | undefined;
7684
attachmentListTemplate: TemplateRef<AttachmentListContext> | undefined;
7785
messageActionsBoxTemplate: TemplateRef<MessageActionsBoxContext> | undefined;
7886
messageReactionsTemplate: TemplateRef<MessageReactionsContext> | undefined;
@@ -124,6 +132,21 @@ export class MessageComponent implements OnInit, OnChanges, OnDestroy {
124132
(template) => (this.messageReactionsTemplate = template)
125133
)
126134
);
135+
this.subscriptions.push(
136+
this.customTemplatesService.deliveredStatusTemplate$.subscribe(
137+
(template) => (this.customDeliveredStatusTemplate = template)
138+
)
139+
);
140+
this.subscriptions.push(
141+
this.customTemplatesService.sendingStatusTemplate$.subscribe(
142+
(template) => (this.customSendingStatusTemplate = template)
143+
)
144+
);
145+
this.subscriptions.push(
146+
this.customTemplatesService.readStatusTemplate$.subscribe(
147+
(template) => (this.customReadStatusTemplate = template)
148+
)
149+
);
127150
}
128151

129152
ngOnChanges(changes: SimpleChanges): void {
@@ -291,6 +314,25 @@ export class MessageComponent implements OnInit, OnChanges, OnDestroy {
291314
};
292315
}
293316

317+
getDeliveredStatusContext(): DeliveredStatusContext {
318+
return {
319+
message: this.message!,
320+
};
321+
}
322+
323+
getSendingStatusContext(): SendingStatusContext {
324+
return {
325+
message: this.message!,
326+
};
327+
}
328+
329+
getReadStatusContext(): ReadStatusContext {
330+
return {
331+
message: this.message!,
332+
readByText: this.readByText,
333+
};
334+
}
335+
294336
jumpToMessage(messageId: string, parentMessageId?: string) {
295337
void this.channelService.jumpToMessage(messageId, parentMessageId);
296338
}

projects/stream-chat-angular/src/lib/types.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,3 +275,16 @@ export type ImageAttachmentConfiguration = AttachmentConfigration & {
275275
export type VideoAttachmentConfiguration = ImageAttachmentConfiguration & {
276276
thumbUrl?: string;
277277
};
278+
279+
export type DeliveredStatusContext = {
280+
message: StreamMessage;
281+
};
282+
283+
export type SendingStatusContext = {
284+
message: StreamMessage;
285+
};
286+
287+
export type ReadStatusContext = {
288+
message: StreamMessage;
289+
readByText: string;
290+
};

0 commit comments

Comments
 (0)