dcb-backoffice/src/app/modules/subscriptions/subscriptions.ts

103 lines
3.1 KiB
TypeScript

import { Component, inject, OnInit } from '@angular/core';
import { CommonModule } from '@angular/common';
import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap';
import { NgIcon } from '@ng-icons/core';
import { PageTitle } from '@app/components/page-title/page-title';
import { SubscriptionsList } from './subscriptions-list/subscriptions-list';
import { SubscriptionDetails } from './subscription-details/subscription-details';
import { SubscriptionPayments } from './subscription-payments/subscription-payments'; // AJOUTER
import { SubscriptionAccessService } from './services/subscription-access.service';
import { Subscription } from 'rxjs';
@Component({
selector: 'app-subscriptions',
standalone: true,
imports: [
CommonModule,
NgbNavModule,
NgIcon,
PageTitle,
SubscriptionsList,
SubscriptionDetails,
SubscriptionPayments
],
templateUrl: './subscriptions.html',
})
export class Subscriptions implements OnInit {
private subscriptions: Subscription[] = [];
private accessService = inject(SubscriptionAccessService);
activeView: 'list' | 'details' | 'payments' = 'list'; // AJOUTER 'payments'
selectedSubscriptionId: string | null = null;
// Permissions
canAccessModule = true;
accessDenied = false;
currentUserRole = '';
currentMerchantId?: number;
subscriptionInitialized = false;
ngOnInit(): void {
console.log('🔍 Subscription: ngOnInit() appelé');
// Attendre que le SubscriptionAccessService soit VRAIMENT prêt
this.subscriptions.push(
this.accessService.waitForReady().subscribe({
next: () => {
console.log('✅ Subscription: waitForReady() a émis - Initialisation...');
this.subscriptionInitialized = true;
this.checkAccess();
},
error: (err) => {
console.error('❌ Subscription: Erreur dans waitForReady():', err);
}
})
);
}
private checkAccess() {
const access = this.accessService.getSubscriptionAccess();
this.canAccessModule = access.canViewSubscriptions;
this.accessDenied = !access.canViewSubscriptions;
this.currentUserRole = access.userRoleLabel;
this.currentMerchantId = access.merchantId;
}
showListView() {
this.activeView = 'list';
this.selectedSubscriptionId = null;
}
showDetailsView(subscriptionId: string) {
this.activeView = 'details';
this.selectedSubscriptionId = subscriptionId;
}
// NOUVELLE MÉTHODE
showPaymentsView(subscriptionId: string) {
this.activeView = 'payments';
this.selectedSubscriptionId = subscriptionId;
}
// NOUVELLE MÉTHODE
onViewPaymentsRequested(subscriptionId: string) {
this.showPaymentsView(subscriptionId);
}
// Utilitaires pour le template
getUserBadgeClass(): string {
const access = this.accessService.getSubscriptionAccess();
return access.isHubUser ? 'badge bg-primary' : 'badge bg-success';
}
getUserBadgeIcon(): string {
const access = this.accessService.getSubscriptionAccess();
return access.isHubUser ? 'lucideShield' : 'lucideStore';
}
getUserBadgeText(): string {
return this.currentUserRole;
}
}