72 lines
2.2 KiB
TypeScript
72 lines
2.2 KiB
TypeScript
import { Component, OnInit } from '@angular/core';
|
|
import { CommonModule } from '@angular/common';
|
|
import { Router } from '@angular/router';
|
|
import { LucideAngularModule, Dices, Plus, Pencil, Trash2 } from 'lucide-angular';
|
|
import { GameSystemService } from '../services/game-system.service';
|
|
import { LayoutService } from '../services/layout.service';
|
|
import { GameSystem } from '../services/game-system.model';
|
|
import { ConfirmDialogService } from '../shared/confirm-dialog/confirm-dialog.service';
|
|
|
|
@Component({
|
|
selector: 'app-game-systems',
|
|
standalone: true,
|
|
imports: [CommonModule, LucideAngularModule],
|
|
templateUrl: './game-systems.component.html',
|
|
styleUrls: ['./game-systems.component.scss']
|
|
})
|
|
export class GameSystemsComponent implements OnInit {
|
|
readonly Dices = Dices;
|
|
readonly Plus = Plus;
|
|
readonly Pencil = Pencil;
|
|
readonly Trash2 = Trash2;
|
|
|
|
gameSystems: GameSystem[] = [];
|
|
|
|
constructor(
|
|
private router: Router,
|
|
private gameSystemService: GameSystemService,
|
|
private confirmDialog: ConfirmDialogService,
|
|
private layoutService: LayoutService
|
|
) {}
|
|
|
|
ngOnInit(): void {
|
|
// Page racine : on s'assure de ne pas heriter de la sidebar d'une
|
|
// section precedente (cf. fix CampaignsComponent / LoreComponent).
|
|
this.layoutService.hide();
|
|
this.load();
|
|
}
|
|
|
|
load(): void {
|
|
this.gameSystemService.getAll().subscribe({
|
|
next: (data) => this.gameSystems = data,
|
|
error: () => this.gameSystems = []
|
|
});
|
|
}
|
|
|
|
create(): void {
|
|
this.router.navigate(['/game-systems/create']);
|
|
}
|
|
|
|
edit(id: string): void {
|
|
this.router.navigate(['/game-systems', id, 'edit']);
|
|
}
|
|
|
|
delete(system: GameSystem, event: MouseEvent): void {
|
|
event.stopPropagation();
|
|
if (!system.id) return;
|
|
this.confirmDialog.confirm({
|
|
title: 'Supprimer le système',
|
|
message: `Supprimer le système "${system.name}" ?`,
|
|
details: ['Les campagnes qui l\'utilisent ne seront plus associées à aucun système.'],
|
|
confirmLabel: 'Supprimer',
|
|
variant: 'danger'
|
|
}).then(ok => {
|
|
if (!ok || !system.id) return;
|
|
this.gameSystemService.delete(system.id).subscribe({
|
|
next: () => this.load(),
|
|
error: () => console.error('Erreur suppression GameSystem')
|
|
});
|
|
});
|
|
}
|
|
}
|