logique de creation de discussions

This commit is contained in:
gokhoal
2026-06-10 22:46:03 +02:00
parent 127023fd7f
commit fd8d33642e
3 changed files with 53 additions and 21 deletions
+4
View File
@@ -24,4 +24,8 @@ export class discussionsService {
getMessages(discussionId: string): Observable<Message[]> {
return this.http.get<Message[]>(`${this.apiUrl}/discussions/${discussionId}/messages`);
}
createPrivateDiscussion(username: string): Observable<Discussion> {
return this.http.post<Discussion>(`${this.apiUrl}/discussions/private`, { username });
}
}
@@ -21,17 +21,17 @@
<div class="input-wrapper">
<ion-item class="custom-item">
<ion-input
[formControl]="username"
label="Nom d'utilisateur"
labelPlacement="floating"
placeholder="ex: jean_dupont"
/>
</ion-item>
<!-- message d'erreur — affiché plus tard via logique -->
<!-- <p class="error-msg">Utilisateur introuvable.</p> -->
<p class="error-msg" *ngIf="errorMsg()">{{ errorMsg() }}</p>
</div>
<button class="submit-btn">
Démarrer la conversation
<button class="submit-btn" (click)="startConversation()" [disabled]="isLoading()">
{{ isLoading() ? 'Création...' : 'Démarrer la conversation' }}
</button>
</div>
@@ -1,31 +1,59 @@
import { Component, inject, signal } from '@angular/core';
import { Router } from "@angular/router";
import { ReactiveFormsModule, FormControl } from "@angular/forms";
import { addIcons } from "ionicons";
import { closeOutline } from "ionicons/icons";
import {
IonButton,
IonButtons,
IonContent,
IonHeader, IonIcon, IonInput,
IonItem,
IonModal,
IonTitle,
IonToolbar
} from "@ionic/angular/standalone";
import { IonIcon, IonInput, IonItem, IonModal } from "@ionic/angular/standalone";
import { discussionsService } from "../../../core/chat/discussion.service";
@Component({
selector: 'app-menu-nav',
imports: [IonModal, IonItem, IonInput, IonIcon],
imports: [IonModal, IonItem, IonInput, IonIcon, ReactiveFormsModule],
templateUrl: './menu-nav.component.html',
styleUrl: './menu-nav.component.css'
})
export class MenuNav {
private router = inject(Router);
private discussionService = inject(discussionsService);
isModalOpen = signal(false);
isLoading = signal(false);
errorMsg = signal<string | null>(null);
username = new FormControl('');
constructor() {
addIcons({ closeOutline });
}
openNav() { this.isModalOpen.set(true); }
closeNav() { this.isModalOpen.set(false); }
closeNav() {
this.isModalOpen.set(false);
this.username.reset();
this.errorMsg.set(null);
}
startConversation() {
const name = this.username.value?.trim();
if (!name || this.isLoading()) return;
this.isLoading.set(true);
this.errorMsg.set(null);
this.discussionService.createPrivateDiscussion(name).subscribe({
next: (discussion) => {
this.isLoading.set(false);
this.closeNav();
this.router.navigate(['/main/messages', discussion.id]);
},
error: (err) => {
this.isLoading.set(false);
this.errorMsg.set(
err.status === 404 ? 'Utilisateur introuvable.' : 'Une erreur est survenue.'
);
}
});
}
}