Skip to content

Commit 78b4e4d

Browse files
committed
feat(chat): expose message template
1 parent dd3fed1 commit 78b4e4d

File tree

4 files changed

+51
-13
lines changed

4 files changed

+51
-13
lines changed

src/components/chat/chat-message.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,18 @@ export default class IgcChatMessageComponent extends LitElement {
4141
return html`
4242
<div class=${containerClass}>
4343
<div class="bubble">
44-
${this.message?.text.trim()
45-
? html`<div>${renderMarkdown(this.message?.text)}</div>`
46-
: nothing}
47-
${this.message?.attachments && this.message?.attachments.length > 0
48-
? html`<igc-message-attachments
49-
.attachments=${this.message?.attachments}
50-
>
51-
</igc-message-attachments>`
52-
: nothing}
44+
${this._chatState?.options?.templates?.messageTemplate && this.message
45+
? this._chatState.options.templates.messageTemplate(this.message)
46+
: html` ${this.message?.text.trim()
47+
? html`<div>${renderMarkdown(this.message?.text)}</div>`
48+
: nothing}
49+
${this.message?.attachments &&
50+
this.message?.attachments.length > 0
51+
? html`<igc-message-attachments
52+
.attachments=${this.message?.attachments}
53+
>
54+
</igc-message-attachments>`
55+
: nothing}`}
5356
${this._chatState?.options?.templates?.messageActionsTemplate &&
5457
this.message
5558
? this._chatState.options.templates.messageActionsTemplate(

src/components/chat/chat.spec.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@ describe('Chat', () => {
1717
});
1818

1919
const createChatComponent = () => html`<igc-chat></igc-chat>`;
20+
21+
const messageTemplate = (msg: any) => {
22+
return html`<div>
23+
<h5>${msg.sender === 'user' ? 'You' : 'Bot'}:</h5>
24+
<p>${msg.text}</p>
25+
</div> `;
26+
};
27+
2028
const messageActionsTemplate = (msg: any) => {
2129
return msg.sender !== 'user' && msg.text.trim()
2230
? html`<div style="float: right">
@@ -770,6 +778,32 @@ describe('Chat', () => {
770778
});
771779
});
772780

781+
it('should render messageTemplate', async () => {
782+
chat.options = {
783+
templates: {
784+
messageTemplate: messageTemplate,
785+
},
786+
};
787+
await elementUpdated(chat);
788+
await aTimeout(500);
789+
const messageElements = chat.shadowRoot
790+
?.querySelector('igc-chat-message-list')
791+
?.shadowRoot?.querySelector('.message-list')
792+
?.querySelectorAll('igc-chat-message');
793+
messageElements?.forEach((messageElement, index) => {
794+
const messsageContainer =
795+
messageElement.shadowRoot?.querySelector('.bubble');
796+
expect(messsageContainer).dom.to.equal(
797+
`<div class="bubble">
798+
<div>
799+
<h5>${chat.messages[index].sender === 'user' ? 'You' : 'Bot'}: </h5>
800+
<p>${(messsageContainer?.querySelector('p') as HTMLElement)?.innerText}</p>
801+
</div>
802+
</div>`
803+
);
804+
});
805+
});
806+
773807
it('should render messageActionsTemplate', async () => {
774808
chat.options = {
775809
templates: {

src/components/chat/types.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export interface IgcMessageAttachment {
2222
export type AttachmentTemplate = (
2323
attachments: IgcMessageAttachment[]
2424
) => TemplateResult;
25-
export type MessageActionsTemplate = (message: IgcMessage) => TemplateResult;
25+
export type MessageTemplate = (message: IgcMessage) => TemplateResult;
2626

2727
export type IgcChatOptions = {
2828
currentUserId?: string;
@@ -47,7 +47,8 @@ export type IgcChatTemplates = {
4747
attachmentHeaderTemplate?: AttachmentTemplate;
4848
attachmentActionsTemplate?: AttachmentTemplate;
4949
attachmentContentTemplate?: AttachmentTemplate;
50-
messageActionsTemplate?: MessageActionsTemplate;
50+
messageTemplate?: MessageTemplate;
51+
messageActionsTemplate?: MessageTemplate;
5152
composingIndicatorTemplate?: TemplateResult;
5253
};
5354

stories/chat.stories.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ async function handleAIMessageSend(e: CustomEvent) {
431431
};
432432

433433
userMessages.push({
434-
role: chat.currentUserId,
434+
role: 'user',
435435
parts: [{ text: newMessage.text }],
436436
});
437437

@@ -442,7 +442,7 @@ async function handleAIMessageSend(e: CustomEvent) {
442442
await attachment.file.arrayBuffer(),
443443
attachment.file.type
444444
);
445-
userMessages.push({ role: chat.currentUserId, parts: [filePart] });
445+
userMessages.push({ role: 'user', parts: [filePart] });
446446
}
447447
}
448448
}

0 commit comments

Comments
 (0)