Skip to content

Commit 11bd0b6

Browse files
Shibani Basavashibbas
authored andcommitted
feat: make doc preview as composable
1 parent 02c9112 commit 11bd0b6

File tree

4 files changed

+33
-7
lines changed

4 files changed

+33
-7
lines changed

packages/chat-component/src/components/chat-component.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ import { ChatController } from './chat-controller.js';
2323
import { ChatHistoryController } from './chat-history-controller.js';
2424
import {
2525
lazyMultiInject,
26-
type ChatInputComponent,
2726
ComponentType,
27+
type ChatInputComponent,
2828
type ChatInputFooterComponent,
29+
type CitationActionComponent,
2930
} from './composable.js';
3031

3132
/**
@@ -74,7 +75,6 @@ export class ChatComponent extends LitElement {
7475
@query('#question-input')
7576
questionInput!: HTMLInputElement;
7677

77-
// Default prompts to display in the chat
7878
@state()
7979
isDisabled = false;
8080

@@ -110,6 +110,9 @@ export class ChatComponent extends LitElement {
110110
@lazyMultiInject(ComponentType.ChatInputFooterComponent)
111111
chatInputFooterComponets: ChatInputFooterComponent[] | undefined;
112112

113+
@lazyMultiInject(ComponentType.CitationActionComponent)
114+
citationActionComponents: CitationActionComponent[] | undefined;
115+
113116
override updated(changedProperties: Map<string | number | symbol, unknown>) {
114117
super.updated(changedProperties);
115118
// The following block is only necessary when you want to override the component from settings in the outside.
@@ -323,9 +326,9 @@ export class ChatComponent extends LitElement {
323326
@on-citation-click="${this.handleCitationClick}"
324327
></citation-list>
325328
${this.selectedCitation
326-
? html`<document-previewer
327-
url="${this.apiUrl}/content/${this.selectedCitation.text}"
328-
></document-previewer>`
329+
? this.citationActionComponents?.map((component) =>
330+
component.render(this.selectedCitation, `${this.apiUrl}/content/${this.selectedCitation.text}`),
331+
)
329332
: ''}
330333
</div>
331334
`
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { injectable } from 'inversify';
2+
import { container, type CitationActionComponent, ComponentType } from './composable.js';
3+
import { html } from 'lit';
4+
5+
@injectable()
6+
export class CitationPreviewer implements CitationActionComponent {
7+
render(citation: Citation, url: string) {
8+
return html`<document-previewer url="${url}"></document-previewer>`;
9+
}
10+
}
11+
12+
container.bind<CitationActionComponent>(ComponentType.CitationActionComponent).to(CitationPreviewer);

packages/chat-component/src/components/composable.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export const ComponentType = {
99
ChatInputComponent: Symbol.for('ChatInputComponent'),
1010
ChatInputFooterComponent: Symbol.for('ChatInputFooterComponent'),
1111
ChatEntryActionButtonComponent: Symbol.for('ChatEntryActionButtonComponent'),
12+
CitationActionComponent: Symbol.for('CitationActionComponent'),
1213
};
1314

1415
export interface ComposableComponent {
@@ -33,10 +34,16 @@ export interface ChatEntryActionButtonComponent extends ComposableComponent {
3334
render: (entry: ChatThreadEntry, isDisabled: boolean, handleClick: (event: Event) => void) => TemplateResult;
3435
}
3536

37+
export interface CitationActionComponent {
38+
render: (citation: Citation, url: string) => TemplateResult;
39+
}
40+
3641
// Add a default component since inversify currently doesn't seem to support optional bindings
3742
// and bindings fail if no component is provided
3843
@injectable()
39-
export class DefaultEmptyComponent {
44+
export class DefaultEmptyComponent implements ComposableComponent {
45+
attach() {}
46+
4047
render() {
4148
return html``;
4249
}
@@ -52,3 +59,5 @@ export class DefaultFooterComponent extends DefaultEmptyComponent implements Cha
5259

5360
container.bind<ChatInputComponent>(ComponentType.ChatInputComponent).to(DefaultInputComponent);
5461
container.bind<ChatInputFooterComponent>(ComponentType.ChatInputFooterComponent).to(DefaultFooterComponent);
62+
container.bind<ChatEntryActionButtonComponent>(ComponentType.ChatEntryActionButtonComponent).to(DefaultEmptyComponent);
63+
container.bind<CitationActionComponent>(ComponentType.CitationActionComponent).to(DefaultEmptyComponent);

packages/chat-component/src/components/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import './link-icon.js';
33
import './chat-stage.js';
44
import './loading-indicator.js';
5-
import './document-previewer.js';
65
import './tab-component.js';
76
import './citation-list.js';
87
import './chat-thread-component.js';
@@ -16,6 +15,9 @@ import './voice-input-button.js';
1615

1716
import './default-questions.js';
1817
import './teaser-list-component.js';
18+
19+
import './document-previewer.js';
20+
import './citation-previewer.js';
1921
// [COMPOSE COMPONENTS END]
2022

2123
export * from './chat-component.js';

0 commit comments

Comments
 (0)