ng-implementation/airwatch/src/app/chatbot/message-box/message-box.ts

81 lines
2 KiB
TypeScript
Raw Normal View History

import {Component, Input, OnChanges, SimpleChanges} from '@angular/core';
import {DomSanitizer, SafeHtml} from '@angular/platform-browser';
import {Copy} from 'sae-lib/buttons/copy/copy';
import {FeedbackButton} from '../feedback-button/feedback-button';
import {ChatbotMessage} from '../../services/chatbot.message.type';
import {NgClass} from '@angular/common';
import {Store} from '@ngrx/store';
2025-08-20 12:47:37 +02:00
import {ActionTypes, StateInterface} from '../../reducers';
type MessageKind = "user" | "llm";
@Component({
selector: 'app-message-box',
imports: [
Copy,
FeedbackButton,
NgClass
],
templateUrl: './message-box.html',
styleUrl: './message-box.scss'
})
export class MessageBox implements OnChanges {
@Input() kind: MessageKind = <"user" | "llm">""
@Input() conf: any = {}
@Input() content: any = ""
@Input() message: ChatbotMessage = {} as ChatbotMessage;
id: string = "00122121221312";
sanitizedContent: SafeHtml = "";
expanded: boolean = true;
2025-08-20 12:47:37 +02:00
displaySourcesPanelLarge: boolean = false;
constructor(private sanitizer: DomSanitizer,
public store: Store<StateInterface>) {
this.store.select(state => state.app.displaySourcesPanelLarge).subscribe(value => {
this.displaySourcesPanelLarge = value;
});
}
ngOnChanges(changes: SimpleChanges): void {
if (changes['content']) {
this.sanitizeContent();
}
}
sanitizeContent(): void {
this.sanitizedContent = this.sanitizer.bypassSecurityTrustHtml(this.content);
}
bookmark() {
console.log("TODO bookmark")
}
generateResponse() {
console.log("TODO generateResponse")
}
editMessage() {
console.log("TODO editMessage")
}
toggleSources() {
console.log("TODO toggle sources")
this.store.dispatch({
2025-08-20 12:47:37 +02:00
type: ActionTypes.UPDATE_APP,
payload: {
2025-08-20 12:47:37 +02:00
displaySourcesPanelLarge: !this.displaySourcesPanelLarge
}
})
}
toggleFullScreen() {
console.log("TODO toggle fullscreen")
this.expanded = !this.expanded;
}
}