import { Component, inject, signal, OnInit } from '@angular/core'; import { ActivatedRoute, RouterLink } from '@angular/router'; import { ApiService, type IOrganization, type IRepository } from '../../core/services/api.service'; import { ToastService } from '../../core/services/toast.service'; @Component({ selector: 'app-organization-detail', standalone: true, imports: [RouterLink], template: `
@if (loading()) {
} @else if (organization()) {
{{ organization()!.name.charAt(0).toUpperCase() }}

{{ organization()!.displayName }}

@{{ organization()!.name }}

@if (organization()!.isPublic) { Public } @else { Private }
@if (organization()!.description) {

{{ organization()!.description }}

}

Repositories

@if (repositories().length === 0) {

No repositories yet

} @else { }

Members

{{ organization()!.memberCount }}

Repositories

{{ repositories().length }}

Created

{{ formatDate(organization()!.createdAt) }}

}
`, }) export class OrganizationDetailComponent implements OnInit { private route = inject(ActivatedRoute); private apiService = inject(ApiService); private toastService = inject(ToastService); organization = signal(null); repositories = signal([]); loading = signal(true); ngOnInit(): void { const orgId = this.route.snapshot.paramMap.get('orgId'); if (orgId) { this.loadData(orgId); } } private async loadData(orgId: string): Promise { this.loading.set(true); try { const [org, reposResponse] = await Promise.all([ this.apiService.getOrganization(orgId).toPromise(), this.apiService.getRepositories(orgId).toPromise(), ]); this.organization.set(org || null); this.repositories.set(reposResponse?.repositories || []); } catch (error) { this.toastService.error('Failed to load organization'); } finally { this.loading.set(false); } } formatDate(dateStr: string): string { return new Date(dateStr).toLocaleDateString(); } }