feat(api-detail): navigation entre versions + bouton nouvelle version
- GET /api/apis/:id/versions — retourne toutes les versions du même API (même name + convention), triées par version DESC - Sélecteur DSFR sur la page détail quand plusieurs versions existent ; changement de version navigue vers /catalog/:newId en rechargeant le composant via abonnement à paramMap (fix réutilisation instance Angular) - Bouton "Nouvelle version" → /upload?from=:id avec pré-remplissage du formulaire (convention, name, provider, contacts, version patch+1) - Seeder : 2 versions démo supplémentaires de "Référentiel Produits" (v3.0.3, v3.0.2) pour tester le sélecteur - Fix import ApiStatus manquant dans apis.service.ts 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:
@@ -12,7 +12,7 @@ import { ReactiveFormsModule, FormBuilder, Validators } from '@angular/forms';
|
||||
import { Router, RouterLink, ActivatedRoute } from '@angular/router';
|
||||
import { ApiService } from '../../core/api.service';
|
||||
import { CategoryService } from '../../core/category.service';
|
||||
import { Category, API_CONVENTION_LABELS, ApiConvention } from '@datacat/shared';
|
||||
import { ApiEntry, Category, API_CONVENTION_LABELS, ApiConvention } from '@datacat/shared';
|
||||
|
||||
@Component({
|
||||
selector: 'app-upload',
|
||||
@@ -526,7 +526,10 @@ export class UploadComponent implements OnInit {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
const preselectedCategoryId = this.route.snapshot.queryParamMap.get('categoryId');
|
||||
const params = this.route.snapshot.queryParamMap;
|
||||
const preselectedCategoryId = params.get('categoryId');
|
||||
const fromId = params.get('from');
|
||||
|
||||
this.categoryService.list().subscribe({
|
||||
next: (res) => {
|
||||
this.categories.set(res.items);
|
||||
@@ -535,6 +538,32 @@ export class UploadComponent implements OnInit {
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
if (fromId) {
|
||||
this.apiService.get(fromId).subscribe({
|
||||
next: (api) => this.prefillFromApi(api),
|
||||
error: () => {},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private prefillFromApi(api: ApiEntry): void {
|
||||
this.metaForm.patchValue({
|
||||
convention: api.convention,
|
||||
name: api.name,
|
||||
provider: api.provider,
|
||||
versionMajor: api.versionMajor,
|
||||
versionMinor: api.versionMinor,
|
||||
versionPatch: api.versionPatch + 1,
|
||||
description: api.description ?? '',
|
||||
categoryId: api.categoryId ?? '',
|
||||
contactFunctionalName: api.contactFunctionalName,
|
||||
contactFunctionalEntity: api.contactFunctionalEntity,
|
||||
contactFunctionalEmail: api.contactFunctionalEmail,
|
||||
contactTechnicalName: api.contactTechnicalName,
|
||||
contactTechnicalEntity: api.contactTechnicalEntity,
|
||||
contactTechnicalEmail: api.contactTechnicalEmail,
|
||||
});
|
||||
}
|
||||
|
||||
categoryLabel(cat: Category): string {
|
||||
|
||||
Reference in New Issue
Block a user