diff --git a/src/app/core/chat/discussion.service.ts b/src/app/core/chat/discussion.service.ts index 9d09b05..3995444 100644 --- a/src/app/core/chat/discussion.service.ts +++ b/src/app/core/chat/discussion.service.ts @@ -24,4 +24,8 @@ export class discussionsService { getMessages(discussionId: string): Observable { return this.http.get(`${this.apiUrl}/discussions/${discussionId}/messages`); } + + createPrivateDiscussion(username: string): Observable { + return this.http.post(`${this.apiUrl}/discussions/private`, { username }); + } } \ No newline at end of file diff --git a/src/app/pages/menu/menu-nav/menu-nav.component.html b/src/app/pages/menu/menu-nav/menu-nav.component.html index 865819d..cda9904 100644 --- a/src/app/pages/menu/menu-nav/menu-nav.component.html +++ b/src/app/pages/menu/menu-nav/menu-nav.component.html @@ -21,17 +21,17 @@
- - +

{{ errorMsg() }}

- diff --git a/src/app/pages/menu/menu-nav/menu-nav.component.ts b/src/app/pages/menu/menu-nav/menu-nav.component.ts index bf76bc0..26b4f72 100644 --- a/src/app/pages/menu/menu-nav/menu-nav.component.ts +++ b/src/app/pages/menu/menu-nav/menu-nav.component.ts @@ -1,31 +1,59 @@ -import {Component, inject, signal} from '@angular/core'; -import {Router} from "@angular/router"; -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 { 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 { 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(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.' + ); + } + }); + } +} \ No newline at end of file