2.4 KiB
2.4 KiB
Seite: Veranstaltung anlegen
Route
/shows/new
Die Route ist im Shows-Routing mit RoleGuard geschuetzt und verlangt die Rolle leader.
Zweck
Die Seite erstellt den Kopf einer neuen Veranstaltung. Nach der Anlage wird direkt zur Detailseite navigiert, wo Lieder hinzugefügt und der weitere Ablauf gepflegt werden.
Datenquellen
ShowService.SHOW_TYPE_PUBLICundShowService.SHOW_TYPE_PRIVATEliefern die auswählbaren Veranstaltungstypen.ShowService.new$(data)erstellt das Show-Dokument.UserService.user$wird innerhalb vonShowService.new$()verwendet, um den Besitzer zu setzen.ShowDataService.add()schreibt die neue Show in die Firestore-Collectionshows.
NewComponent haelt außerdem ShowDataService.list$ als shows$, nutzt diesen Stream in der aktuellen Vorlage aber nicht sichtbar.
Wichtige UI-Elemente
app-page-framemit TitelVeranstaltungen.- Karte
Neue Veranstaltungmit Rücksprung nach/shows. - Formularfeld
Art der Veranstaltungals gruppierte Auswahl. - Formularfeld
Datummit Material-Datepicker. - Button
Anlegen.
Aktionen
- Formular ausfuellen: Typ und Datum sind Pflichtfelder.
- Anlegen: markiert alle Felder als berührt, prüft die Formularvaliditaet und ruft
ShowService.new$()auf. - Nach erfolgreicher Anlage: Navigation zu
/shows/{id}.
Statuslogik
Beim Initialisieren wird das Formular zurückgesetzt. Das Speichern bricht ab, wenn Pflichtfelder fehlen oder kein Benutzer ermittelt werden kann.
ShowService.new$() ergänzt die eingegebenen Daten um:
owner: ID des aktuellen Benutzersorder: []songIds: []public: abgeleitet daraus, obshowTypeinSHOW_TYPE_PUBLICenthalten ist
Veröffentlichungs-, Melde- und Archivstatus werden auf dieser Seite nicht direkt gesetzt.
Berechtigungen
- Zugriff auf die Route erfordert
leader. - Die Seite selbst enthält keine zusätzliche Owner-Prüfung, da die Show erst beim Speichern für den aktuellen Benutzer erzeugt wird.
Technische Hinweise
- Das Formular ist ein typisiertes Reactive Form mit
FormControl<Date | null>undFormControl<string | null>. - Die Auswahl trennt öffentliche und private Veranstaltungstypen in
mat-optgroup. - Die Anzeige der Typen erfolgt über
ShowTypePipe. ShowService.new$()gibtnullzurück, wenn keinshowTypeoder kein Benutzer vorhanden ist; die Navigation nutzt dann defensiv einen leeren String.