-
- @for (show of demoShows; track show.slug) {
+ @if (isLoading()) {
+
+ } @else if (errorMessage()) {
+
+
+
+
error
+
+
Could not load shows
+
{{ errorMessage() }}
+
+
+
+
+
+
+
+ } @else if (shows().length === 0) {
+
+
+
+
theaters
+
+
No shows published yet
+
Published productions will appear here as soon as they are available.
+
+
+
+
+ } @else {
+
+ @for (show of shows(); track show.slug) {
{{ show.title }}
- {{ show.venue }}
{{ show.summary }}
-
- {{ show.startsAt }}
-
Open detail
- }
-
+ }
+
+ }
`,
styles: [`
@@ -85,13 +111,56 @@ type DemoShow = {
gap: 20px;
}
- .show-card {
+ .status-panel,
+ .status-copy {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ }
+
+ .status-panel {
+ min-height: 220px;
+ justify-content: center;
+ color: var(--azionelab-muted);
+ }
+
+ .status-card {
+ max-width: 680px;
border-radius: 8px;
border: 1px solid var(--azionelab-border);
background: var(--azionelab-surface);
box-shadow: var(--azionelab-shadow);
}
+ .status-copy {
+ align-items: flex-start;
+ }
+
+ .status-copy h2 {
+ margin: 0 0 8px;
+ font-size: 1.2rem;
+ }
+
+ .status-copy p {
+ margin: 0;
+ color: var(--azionelab-muted);
+ line-height: 1.6;
+ }
+
+ .show-card {
+ display: flex;
+ flex-direction: column;
+ min-height: 220px;
+ border-radius: 8px;
+ border: 1px solid var(--azionelab-border);
+ background: var(--azionelab-surface);
+ box-shadow: var(--azionelab-shadow);
+ }
+
+ .show-card mat-card-content {
+ flex: 1;
+ }
+
.show-card p {
color: var(--azionelab-muted);
line-height: 1.6;
@@ -106,20 +175,37 @@ type DemoShow = {
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ShowListPageComponent {
- protected readonly demoShows: DemoShow[] = [
- {
- slug: 'open-stage',
- title: 'Open Stage',
- summary: 'Placeholder list item for the first published production.',
- venue: 'AzioneLab Theatre',
- startsAt: 'May 15, 20:30',
- },
- {
- slug: 'city-echoes',
- title: 'City Echoes',
- summary: 'Second sample entry showing how cards will map to live API data.',
- venue: 'Studio Nuovo',
- startsAt: 'May 22, 18:00',
- },
- ];
+ private readonly destroyRef = inject(DestroyRef);
+ private readonly showsApi = inject(ShowsApiService);
+
+ protected readonly shows = signal