working basic site admin

This commit is contained in:
2026-06-21 02:56:49 +00:00
parent 53d932655e
commit f52625b37b
38 changed files with 1163 additions and 56 deletions
+29 -1
View File
@@ -6,14 +6,17 @@ import { BehaviorSubject, firstValueFrom } from 'rxjs';
import { Program } from '../interfaces/program';
import { Event } from '../interfaces/event';
import { Tier } from '../interfaces/tier';
import { StationConfig } from '../interfaces/station-config';
import { ProgramService } from '../services/program.service';
import { EventService } from '../services/event.service';
import { TierService } from '../services/tier.service';
import { StationConfigService } from '../services/station-config.service';
import { AdminProgramFormComponent } from './admin-program-form.component';
import { AdminEventFormComponent } from './admin-event-form.component';
import { AdminTierFormComponent } from './admin-tier-form.component';
import { AdminStationFormComponent } from './admin-station-form.component';
type TabKey = 'programs' | 'events' | 'tiers';
type TabKey = 'programs' | 'events' | 'tiers' | 'station';
@Component({
selector: 'app-admin',
@@ -25,6 +28,7 @@ type TabKey = 'programs' | 'events' | 'tiers';
AdminProgramFormComponent,
AdminEventFormComponent,
AdminTierFormComponent,
AdminStationFormComponent,
],
templateUrl: './admin.component.html',
styleUrl: './admin.component.scss',
@@ -33,6 +37,7 @@ export class AdminComponent implements OnInit {
private programService = inject(ProgramService);
private eventService = inject(EventService);
private tierService = inject(TierService);
private stationConfigService = inject(StationConfigService);
activeTab = signal<TabKey>('programs');
@@ -45,10 +50,12 @@ export class AdminComponent implements OnInit {
readonly programs$ = new BehaviorSubject<Program[]>([]);
readonly events$ = new BehaviorSubject<Event[]>([]);
readonly tiers$ = new BehaviorSubject<Tier[]>([]);
readonly stationConfig$ = new BehaviorSubject<StationConfig | null>(null);
showProgramForm = false;
showEventForm = false;
showTierForm = false;
showStationForm = false;
ngOnInit(): void {
this.loadAll();
@@ -69,11 +76,17 @@ export class AdminComponent implements OnInit {
this.tiers$.next(data);
}
async reloadStationConfig(): Promise<void> {
await this.stationConfigService.load();
this.stationConfig$.next(this.stationConfigService.config());
}
async loadAll(): Promise<void> {
await Promise.all([
this.reloadPrograms(),
this.reloadEvents(),
this.reloadTiers(),
this.reloadStationConfig(),
]);
}
@@ -163,4 +176,19 @@ export class AdminComponent implements OnInit {
await firstValueFrom(this.tierService.deleteTier(id));
await this.reloadTiers();
}
// ── Station Config ──────────────────────────────────────
openStationForm(): void {
this.showStationForm = true;
}
onStationSaved(): void {
this.reloadStationConfig();
this.showStationForm = false;
}
onStationClosed(): void {
this.showStationForm = false;
}
}