import { NgFor, NgIf } from '@angular/common'; import { Component, OnInit } from '@angular/core'; import { AbstractCrudComponent } from '@app/cores/abstracts/abstract-crud-component'; import { CrudImports } from '@app/cores/utils/crud.imports'; import { Column } from '@app/shared/components/forms/data-table/data-table.component'; export interface {{pascalCase}} { id: number; {{#fields}} {{name}}: {{tsType}}{{#nullable}} | null{{/nullable}}; {{/fields}} {{#relationships}} {{#isBelongsTo}} {{foreignKey}}: number; {{name}}?: object; {{/isBelongsTo}} {{#isHasOne}} {{name}}?: {{relatedModel}}; {{/isHasOne}} {{#isHasMany}} {{name}}?: {{relatedModel}}[]; {{/isHasMany}} {{/relationships}} created_at?: Date; updated_at?: Date; } @Component({ selector: 'app-{{kebabCase}}', standalone: true, imports: [CrudImports], templateUrl: './{{kebabCase}}.component.html', styleUrl: './{{kebabCase}}.component.scss', }) export class {{pascalCase}}Component extends AbstractCrudComponent<{{pascalCase}}> implements OnInit { override resourceName: string = '{{pluralCamelCase}}'; override modalId: string = '{{camelCase}}Modal'; override deleteId: string = 'delete_{{camelCase}}'; isFeminine: boolean = {{isFeminine}}; columns: Column[] = [ {{#tableColumns}} { field: '{{field}}', header: '{{header}}', filterType: '{{filterType}}' }, {{/tableColumns}} ]; globalFilterFields = [{{#searchableFields}}'{{.}}',{{/searchableFields}}{{#relationships}}{{#isBelongsTo}}{{#ui.showInTable}}'{{name}}.{{displayField}}',{{/ui.showInTable}}{{/isBelongsTo}}{{/relationships}}]; {{#additionalProperties}} {{name}}: {{type}} = {{value}}; {{/additionalProperties}} // Relations {{#relationships}} {{#isHasMany}} {{name}}Items: any[] = []; {{/isHasMany}} {{#isHasOne}} {{name}}Item: any = null; {{/isHasOne}} {{/relationships}} /** * Gérer une relation pour l'entité actuelle * @param relationName Nom de la relation à gérer */ manage{{pascalCase}}Relation(relationName: string) { // Implémentation de la gestion de relation // Cette méthode ouvrira un modal pour gérer la relation // À adapter selon les besoins spécifiques console.log(`Gérer la relation ${relationName} pour l'entité avec ID ${this.currentItem?.id}`); // Exemple pour charger les données de la relation if (this.currentItem.id) { {{#relationships}} {{#isHasMany}} if (relationName === '{{name}}') { this.apiService.get(`${this.resourceName}/${this.currentItem.id}/{{name}}`).subscribe({ next: (response: any) => { this.{{name}}Items = response.data || []; // Ouvrir un modal pour gérer cette relation // Logique de gestion de relation à implémenter selon les besoins }, error: (error: any) => { this.messageService.add({ severity: 'error', summary: 'Erreur', detail: 'Impossible de charger les données de la relation' }); } }); } {{/isHasMany}} {{#isHasOne}} if (relationName === '{{name}}') { this.apiService.get(`${this.resourceName}/${this.currentItem.id}/{{name}}`).subscribe({ next: (response: any) => { this.{{name}}Item = response.data || null; // Ouvrir un modal pour gérer cette relation // Logique de gestion de relation à implémenter selon les besoins }, error: (error: any) => { this.messageService.add({ severity: 'error', summary: 'Erreur', detail: 'Impossible de charger les données de la relation' }); } }); } {{/isHasOne}} {{/relationships}} } } /** * Méthode surchargée pour charger un élément avec ses relations * @param item Élément à charger */ override editItem(item: any) { super.editItem(item); // Charger les relations à l'ouverture du formulaire if (item.id) { {{#relationships}} {{#isHasMany}} this.apiService.get(`${this.resourceName}/${item.id}/{{name}}`).subscribe({ next: (response: any) => { this.currentItem.{{name}} = response.data || []; }, error: () => { this.currentItem.{{name}} = []; } }); {{/isHasMany}} {{#isHasOne}} this.apiService.get(`${this.resourceName}/${item.id}/{{name}}`).subscribe({ next: (response: any) => { this.currentItem.{{name}} = response.data || null; }, error: () => { this.currentItem.{{name}} = null; } }); {{/isHasOne}} {{/relationships}} } } }