logique de creation de discussions
This commit is contained in:
@@ -24,4 +24,8 @@ export class discussionsService {
|
|||||||
getMessages(discussionId: string): Observable<Message[]> {
|
getMessages(discussionId: string): Observable<Message[]> {
|
||||||
return this.http.get<Message[]>(`${this.apiUrl}/discussions/${discussionId}/messages`);
|
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">
|
<div class="input-wrapper">
|
||||||
<ion-item class="custom-item">
|
<ion-item class="custom-item">
|
||||||
<ion-input
|
<ion-input
|
||||||
|
[formControl]="username"
|
||||||
label="Nom d'utilisateur"
|
label="Nom d'utilisateur"
|
||||||
labelPlacement="floating"
|
labelPlacement="floating"
|
||||||
placeholder="ex: jean_dupont"
|
placeholder="ex: jean_dupont"
|
||||||
/>
|
/>
|
||||||
</ion-item>
|
</ion-item>
|
||||||
<!-- message d'erreur — affiché plus tard via logique -->
|
<p class="error-msg" *ngIf="errorMsg()">{{ errorMsg() }}</p>
|
||||||
<!-- <p class="error-msg">Utilisateur introuvable.</p> -->
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button class="submit-btn">
|
<button class="submit-btn" (click)="startConversation()" [disabled]="isLoading()">
|
||||||
Démarrer la conversation
|
{{ isLoading() ? 'Création...' : 'Démarrer la conversation' }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,31 +1,59 @@
|
|||||||
import { Component, inject, signal } from '@angular/core';
|
import { Component, inject, signal } from '@angular/core';
|
||||||
import { Router } from "@angular/router";
|
import { Router } from "@angular/router";
|
||||||
|
import { ReactiveFormsModule, FormControl } from "@angular/forms";
|
||||||
import { addIcons } from "ionicons";
|
import { addIcons } from "ionicons";
|
||||||
import { closeOutline } from "ionicons/icons";
|
import { closeOutline } from "ionicons/icons";
|
||||||
import {
|
import { IonIcon, IonInput, IonItem, IonModal } from "@ionic/angular/standalone";
|
||||||
IonButton,
|
import { discussionsService } from "../../../core/chat/discussion.service";
|
||||||
IonButtons,
|
|
||||||
IonContent,
|
|
||||||
IonHeader, IonIcon, IonInput,
|
|
||||||
IonItem,
|
|
||||||
IonModal,
|
|
||||||
IonTitle,
|
|
||||||
IonToolbar
|
|
||||||
} from "@ionic/angular/standalone";
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-menu-nav',
|
selector: 'app-menu-nav',
|
||||||
imports: [IonModal, IonItem, IonInput, IonIcon],
|
imports: [IonModal, IonItem, IonInput, IonIcon, ReactiveFormsModule],
|
||||||
templateUrl: './menu-nav.component.html',
|
templateUrl: './menu-nav.component.html',
|
||||||
styleUrl: './menu-nav.component.css'
|
styleUrl: './menu-nav.component.css'
|
||||||
})
|
})
|
||||||
export class MenuNav {
|
export class MenuNav {
|
||||||
|
|
||||||
|
private router = inject(Router);
|
||||||
|
private discussionService = inject(discussionsService);
|
||||||
|
|
||||||
isModalOpen = signal(false);
|
isModalOpen = signal(false);
|
||||||
|
isLoading = signal(false);
|
||||||
|
errorMsg = signal<string | null>(null);
|
||||||
|
|
||||||
|
username = new FormControl('');
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
addIcons({ closeOutline });
|
addIcons({ closeOutline });
|
||||||
}
|
}
|
||||||
|
|
||||||
openNav() { this.isModalOpen.set(true); }
|
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.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user