eeg_portal/eeg_frontend/src/app/pages/my-memberships/my-memberships.ts
Bernhard Müller 6770be9bef fix(security): externalize CORS origins, secure JWT secret default, fix RouterLink import
- Externalize CORS origins via app.cors-origins property (configurable per environment)
- Remove hardcoded JWT secret fallback; use env-var-only with safe test default
- Disable show-sql by default (enable only in dev profile)
- Create application-dev.yml with safe development defaults
- Add missing RouterLink import in MyMembershipsComponent (fixes runtime error)
2026-07-22 09:09:36 +02:00

63 lines
1.8 KiB
TypeScript

import {Component, inject, OnInit, signal} from '@angular/core';
import {FormsModule} from '@angular/forms';
import {RouterLink} from '@angular/router';
import {MembershipService, MembershipResponse} from '../../services/membership';
import {ToastService} from '../../services/toast';
@Component({
selector: 'app-my-memberships',
standalone: true,
imports: [FormsModule, RouterLink],
templateUrl: './my-memberships.html'
})
export class MyMembershipsComponent implements OnInit {
private membershipService = inject(MembershipService);
private toastService = inject(ToastService);
memberships = signal<MembershipResponse[]>([]);
isLoading = signal(true);
filterStatus = signal<string>('ALL');
ngOnInit() {
this.loadMemberships();
}
loadMemberships() {
this.membershipService.getOwnMemberships().subscribe({
next: memberships => {
this.memberships.set(memberships);
this.isLoading.set(false);
},
error: () => {
this.isLoading.set(false);
this.toastService.error('Fehler beim Laden der Mitgliedschaften.');
}
});
}
get filteredMemberships(): MembershipResponse[] {
if (this.filterStatus() === 'ALL') {
return this.memberships();
}
return this.memberships().filter(m => m.status === this.filterStatus());
}
getStatusClass(status: string): string {
switch (status) {
case 'ACTIVE': return 'bg-green-100 text-green-800';
case 'PENDING': return 'bg-yellow-100 text-yellow-800';
case 'INACTIVE': return 'bg-gray-100 text-gray-800';
default: return 'bg-gray-100 text-gray-800';
}
}
getStatusLabel(status: string): string {
switch (status) {
case 'ACTIVE': return 'Aktiv';
case 'PENDING': return 'Wartend';
case 'INACTIVE': return 'Inaktiv';
default: return status;
}
}
}