feat(api-detail): modale d'édition des métadonnées d'une API

- Bouton "Modifier" sur la page détail ouvre une modale avec tous les
  champs éditables (titre, version, catégorie, description, docs, contacts,
  droits d'accès)
- ApiService.update() étendu à tous les champs du UpdateApiEntryDto
- Remplacement des labels "Obligatoire"/"Optionnel" par un astérisque
  rouge sur les champs requis dans tous les formulaires

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
This commit is contained in:
z3n
2026-06-09 13:06:53 +00:00
parent ecb45e8248
commit af02cf6808
4 changed files with 172 additions and 23 deletions

View File

@@ -104,7 +104,7 @@ import { Category } from '@datacat/shared';
<form [formGroup]="metaForm" (ngSubmit)="goToStep3()" novalidate>
<div class="fr-input-group fr-mb-3w" [class.fr-input-group--error]="titleInvalid()">
<label class="fr-label" for="title-input">
Titre <span class="fr-hint-text">Obligatoire</span>
Titre <span style="color:var(--text-default-error)">*</span>
</label>
<input
id="title-input"
@@ -121,7 +121,7 @@ import { Category } from '@datacat/shared';
<div class="fr-input-group fr-mb-3w" [class.fr-input-group--error]="versionInvalid()">
<label class="fr-label" for="version-input">
Version <span class="fr-hint-text">Obligatoire</span>
Version <span style="color:var(--text-default-error)">*</span>
</label>
<input
id="version-input"
@@ -138,7 +138,7 @@ import { Category } from '@datacat/shared';
<div class="fr-select-group fr-mb-3w">
<label class="fr-label" for="type-input">
Type <span class="fr-hint-text">Obligatoire</span>
Type <span style="color:var(--text-default-error)">*</span>
</label>
<select id="type-input" class="fr-select" formControlName="type">
<option value="ASYNCAPI">AsyncAPI</option>
@@ -148,8 +148,7 @@ import { Category } from '@datacat/shared';
<div class="fr-select-group fr-mb-3w">
<label class="fr-label" for="category-input">
Catégorie <span class="fr-hint-text">Optionnel</span>
</label>
Catégorie </label>
<select id="category-input" class="fr-select" formControlName="categoryId">
<option value="">— Sans catégorie —</option>
@for (cat of categories(); track cat.id) {
@@ -160,8 +159,7 @@ import { Category } from '@datacat/shared';
<div class="fr-input-group fr-mb-3w">
<label class="fr-label" for="description-input">
Description <span class="fr-hint-text">Optionnel</span>
</label>
Description </label>
<textarea
id="description-input"
class="fr-input"
@@ -173,8 +171,7 @@ import { Category } from '@datacat/shared';
<div class="fr-input-group fr-mb-3w">
<label class="fr-label" for="functional-doc-input">
Documentation fonctionnelle <span class="fr-hint-text">Optionnel</span>
</label>
Documentation fonctionnelle </label>
<textarea
id="functional-doc-input"
class="fr-input"
@@ -186,8 +183,7 @@ import { Category } from '@datacat/shared';
<div class="fr-input-group fr-mb-3w">
<label class="fr-label" for="technical-doc-input">
Documentation technique <span class="fr-hint-text">Optionnel</span>
</label>
Documentation technique </label>
<textarea
id="technical-doc-input"
class="fr-input"
@@ -199,8 +195,7 @@ import { Category } from '@datacat/shared';
<div class="fr-input-group fr-mb-3w">
<label class="fr-label" for="external-doc-url-input">
URL documentation externe <span class="fr-hint-text">Optionnel</span>
</label>
URL documentation externe </label>
<input
id="external-doc-url-input"
class="fr-input"
@@ -212,8 +207,7 @@ import { Category } from '@datacat/shared';
<div class="fr-input-group fr-mb-3w">
<label class="fr-label" for="contact-functional-input">
Contact fonctionnel <span class="fr-hint-text">Optionnel</span>
</label>
Contact fonctionnel </label>
<input
id="contact-functional-input"
class="fr-input"
@@ -225,8 +219,7 @@ import { Category } from '@datacat/shared';
<div class="fr-input-group fr-mb-3w">
<label class="fr-label" for="contact-technical-input">
Contact technique <span class="fr-hint-text">Optionnel</span>
</label>
Contact technique </label>
<input
id="contact-technical-input"
class="fr-input"
@@ -238,8 +231,7 @@ import { Category } from '@datacat/shared';
<div class="fr-input-group fr-mb-4w">
<label class="fr-label" for="access-rights-input">
Droits d'accès <span class="fr-hint-text">Optionnel</span>
</label>
Droits d'accès </label>
<textarea
id="access-rights-input"
class="fr-input"