flare / flare-ui /src /app /components /chat /chat.component.ts
ciyidogan's picture
Update flare-ui/src/app/components/chat/chat.component.ts
cb22125 verified
raw
history blame
2.6 kB
import { Component, OnInit, OnDestroy } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatCardModule } from '@angular/material/card';
import { Subscription } from 'rxjs';
import { ApiService } from '../../services/api.service';
interface ChatMessage {
author: 'user' | 'assistant';
text: string;
}
@Component({
selector: 'app-chat',
standalone: true,
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule,
MatButtonModule,
MatIconModule,
MatFormFieldModule,
MatInputModule,
MatCardModule
],
templateUrl: './chat.component.html',
styleUrls: ['./chat.component.scss']
})
export class ChatComponent implements OnInit, OnDestroy {
projects: string[] = [];
selectedProject!: string | null;
sessionId: string | null = null;
messages: ChatMessage[] = [];
input = this.fb.control('', Validators.required);
private subs = new Subscription();
constructor(private fb: FormBuilder, private api: ApiService) {}
ngOnInit(): void {
/* Proje isimlerini çek → comboya doldur */
const sub = this.api.getChatProjects().subscribe({
next: p => (this.projects = p),
error: () => alert('Projeler yüklenemedi')
});
this.subs.add(sub);
}
/** Start Chat → /start_session */
startChat(): void {
if (!this.selectedProject) return;
const sub = this.api.startChat(this.selectedProject).subscribe({
next: res => {
this.sessionId = res.session_id;
this.messages = [{ author: 'assistant', text: res.answer }];
},
error: () => alert('Oturum açılamadı')
});
this.subs.add(sub);
}
/** Send → /chat */
send(): void {
if (!this.sessionId || this.input.invalid) return;
const text = this.input.value!.trim();
if (!text) return;
this.messages.push({ author: 'user', text });
this.input.reset();
const sub = this.api.chat(this.sessionId, text).subscribe({
next: res => this.messages.push({ author: 'assistant', text: res.answer }),
error: () =>
this.messages.push({
author: 'assistant',
text: '⚠️ Mesaj iletilemedi, tekrar deneyin.'
})
});
this.subs.add(sub);
}
ngOnDestroy(): void {
this.subs.unsubscribe();
}
}