103 lines
3.1 KiB
TypeScript
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;
|
|
}
|
|
} |