Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 1x 6x 6x 6x 6x 6x 6x 6x 6x 1x 1x 2x 2x 1x 1x 1x 1x 1x 1x 1x 1x | import { ChangeDetectionStrategy, Component, computed, HostListener, inject, signal } from '@angular/core';
import { FormBuilder } from '@angular/forms';
import { AppElizaService, IChatMessage } from '@app/client-util-eliza';
@Component({
selector: 'app-chatbot-root',
templateUrl: './chatbot-root.component.html',
styleUrls: ['./chatbot-root.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
})
export class AppChatbotRootComponent {
private readonly fb = inject(FormBuilder);
private readonly eliza = inject(AppElizaService);
public readonly messages$ = this.eliza.messages$;
private readonly nextUserMessage$ = signal<IChatMessage | null>(null);
public readonly respond$ = computed(async () => {
const message = this.nextUserMessage$();
Iif (message !== null && !message.bot) {
const text = message.text;
const response = await this.eliza.getResponse(text);
this.botResponse(response.reply);
if (response.final) {
this.form.disable();
}
}
});
public readonly form = this.fb.group({
message: [''],
});
public resetBot() {
this.eliza.reset();
this.form.enable();
}
public userMessage() {
const text = this.form.controls.message.value;
if (text !== null && text !== '') {
const message: IChatMessage = { bot: false, text };
this.nextUserMessage$.set(message);
this.eliza.nextMessage(message);
this.form.reset();
}
}
public botResponse(text: string) {
const message: IChatMessage = { bot: true, text };
this.eliza.nextMessage(message);
}
@HostListener('window:keyup', ['$event'])
public keyUp(event: KeyboardEvent) {
Eif (event.ctrlKey && event.key === 'Enter') {
this.userMessage();
}
}
}
|