67 lines
2.0 KiB
TypeScript
67 lines
2.0 KiB
TypeScript
import { Component, OnInit } from '@angular/core';
|
|
|
|
import { Router } from '@angular/router';
|
|
import { LucideAngularModule, Map, Plus } from 'lucide-angular';
|
|
import { TranslatePipe } from '@ngx-translate/core';
|
|
import { CampaignService } from '../services/campaign.service';
|
|
import { LayoutService } from '../services/layout.service';
|
|
import { Campaign } from '../services/campaign.model';
|
|
import { CampaignCreateComponent, CampaignCreatePayload } from './campaign/campaign-create/campaign-create.component';
|
|
|
|
@Component({
|
|
selector: 'app-campaigns',
|
|
imports: [LucideAngularModule, CampaignCreateComponent, TranslatePipe],
|
|
templateUrl: './campaigns.component.html',
|
|
styleUrls: ['./campaigns.component.scss']
|
|
})
|
|
export class CampaignsComponent implements OnInit {
|
|
readonly Map = Map;
|
|
readonly Plus = Plus;
|
|
|
|
campaigns: Campaign[] = [];
|
|
showCreateModal = false;
|
|
|
|
constructor(
|
|
private router: Router,
|
|
private campaignService: CampaignService,
|
|
private layoutService: LayoutService
|
|
) {}
|
|
|
|
ngOnInit(): void {
|
|
// Liste racine de la section Campagnes : aucune sidebar secondaire ne
|
|
// doit subsister (ex: si on arrive depuis une page Lore qui en affichait
|
|
// une, elle persisterait sans ce hide() — cf. bug rapporte 2026-05-19).
|
|
this.layoutService.hide();
|
|
this.loadCampaigns();
|
|
}
|
|
|
|
loadCampaigns(): void {
|
|
this.campaignService.getAllCampaigns().subscribe({
|
|
next: (data) => this.campaigns = data,
|
|
error: () => this.campaigns = []
|
|
});
|
|
}
|
|
|
|
openCreateModal(): void {
|
|
this.showCreateModal = true;
|
|
}
|
|
|
|
onModalClose(): void {
|
|
this.showCreateModal = false;
|
|
}
|
|
|
|
onCampaignCreated(data: CampaignCreatePayload): void {
|
|
this.campaignService.createCampaign(data).subscribe({
|
|
next: () => {
|
|
this.showCreateModal = false;
|
|
this.loadCampaigns();
|
|
},
|
|
error: () => console.error('Erreur lors de la création de la campagne')
|
|
});
|
|
}
|
|
|
|
navigateToDetail(id: string): void {
|
|
this.router.navigate(['/campaigns', id]);
|
|
}
|
|
}
|