Files
Knots-Front/src/app/pages/menu/menu-nav/menu-nav.component.ts
T
2026-06-10 23:30:31 +02:00

60 lines
1.7 KiB
TypeScript

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";
import { CommonModule } from "@angular/common";
@Component({
selector: 'app-menu-nav',
imports: [CommonModule, 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);
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.'
);
}
});
}
}