From 562c28b6cb4f060f46a80cf8c0e1923703b85dc2 Mon Sep 17 00:00:00 2001 From: kyle Date: Sat, 4 Jul 2026 18:40:40 +0000 Subject: [PATCH] additional files --- src/app/admin/admin.component.html | 1137 ++++++++++++++-------------- src/app/admin/admin.component.scss | 2 +- 2 files changed, 551 insertions(+), 588 deletions(-) diff --git a/src/app/admin/admin.component.html b/src/app/admin/admin.component.html index 94dd3a8..863c49d 100644 --- a/src/app/admin/admin.component.html +++ b/src/app/admin/admin.component.html @@ -7,670 +7,633 @@
- - - - - - - - - - + + + + + + + + + +
@if (activeTab() === 'shows') { - @if (shows$ | async; as shows) { -
-
-

Shows ({{ shows.length }})

- -
+ @if (shows$ | async; as shows) { +
+
+

Shows ({{ shows.length }})

+ +
- - - - - - - - - - - - - @for (show of shows; track show.id) { - - - - - - - - - } @empty { - +
OrderTitleHostGenreSlotsActions
{{ show.display_order }}{{ show.title }}{{ show.host }}{{ show.genre }} - @for (slot of show.schedules; track slot.id) { - {{ slot.day_label.charAt(0) }} {{ slot.time }} - } - - - -
No shows yet. Click "Add Show" to create one.
+ + + + + + + + + + + + @for (show of shows; track show.id) { + + + + + + -
OrderTitleHostGenreSlotsActions
{{ show.display_order }}{{ show.title }}{{ show.host }}{{ show.genre }} + @for (slot of show.schedules; track slot.id) { + {{ slot.day_label.charAt(0) }} {{ slot.time }} } -
-
- } + + + + + + + } @empty { + + No shows yet. Click "Add Show" to create one. + + } + + +
+ } } @if (activeTab() === 'events') { - @if (events$ | async; as events) { -
-
-

Events ({{ events.length }})

- -
+ @if (events$ | async; as events) { +
+
+

Events ({{ events.length }})

+ +
- - - - - - - - - - - - @for (event of events; track event.id) { - - - - - - - - } @empty { - - } - -
DateTitleLocationActiveActions
{{ event.date }}{{ event.title }}{{ event.location }}{{ event.active ? 'Yes' : 'No' }} - - -
No events yet. Click "Add Event" to create one.
-
- } + + + + + + + + + + + + @for (event of events; track event.id) { + + + + + + + + } @empty { + + + + } + +
DateTitleLocationActiveActions
{{ event.date }}{{ event.title }}{{ event.location }}{{ event.active ? 'Yes' : 'No' }} + + +
No events yet. Click "Add Event" to create one.
+
+ } } @if (activeTab() === 'history') { - @if (historyEntries$ | async; as entries) { -
-
-

History Timeline ({{ entries.length }})

- -
+ @if (historyEntries$ | async; as entries) { +
+
+

History Timeline ({{ entries.length }})

+ +
- - - - - - - - - - - - @for (entry of entries; track entry.id) { - - - - - - - - } @empty { - - } - -
YearTitleOrderActiveActions
{{ entry.year }}{{ entry.title }}{{ entry.display_order }}{{ entry.active ? 'Yes' : 'No' }} - - -
No history entries yet. Click "Add Entry" to create one.
-
- } + + + + + + + + + + + + @for (entry of entries; track entry.id) { + + + + + + + + } @empty { + + + + } + +
YearTitleOrderActiveActions
{{ entry.year }}{{ entry.title }}{{ entry.display_order }}{{ entry.active ? 'Yes' : 'No' }} + + +
No history entries yet. Click "Add Entry" to create one.
+
+ } } @if (activeTab() === 'team') { - @if (teamMembers$ | async; as members) { -
-
-

Team Members ({{ members.length }})

- -
+ @if (teamMembers$ | async; as members) { +
+
+

Team Members ({{ members.length }})

+ +
- - - - - - - - - - - - @for (member of members; track member.id) { - - - - - - - - } @empty { - - } - -
NameTitleOrderActiveActions
{{ member.name }}{{ member.title }}{{ member.display_order }}{{ member.active ? 'Yes' : 'No' }} - - -
No team members yet. Click "Add Member" to create one.
-
- } + + + + + + + + + + + + @for (member of members; track member.id) { + + + + + + + + } @empty { + + + + } + +
NameTitleOrderActiveActions
{{ member.name }}{{ member.title }}{{ member.display_order }}{{ member.active ? 'Yes' : 'No' }} + + +
No team members yet. Click "Add Member" to create one.
+
+ } } @if (activeTab() === 'community') { - @if (communityHighlights$ | async; as highlights) { -
-
-

Community Highlights ({{ highlights.length }})

- -
+ @if (communityHighlights$ | async; as highlights) { +
+
+

Community Highlights ({{ highlights.length }})

+ +
- - - - - - - - - - - - @for (highlight of highlights; track highlight.id) { - - - - - - - - } @empty { - - } - -
IconTitleOrderActiveActions
{{ highlight.icon }}{{ highlight.title }}{{ highlight.display_order }}{{ highlight.active ? 'Yes' : 'No' }} - - -
No highlights yet. Click "Add Highlight" to create one.
-
- } + + + + + + + + + + + + @for (highlight of highlights; track highlight.id) { + + + + + + + + } @empty { + + + + } + +
IconTitleOrderActiveActions
{{ highlight.icon }}{{ highlight.title }}{{ highlight.display_order }}{{ highlight.active ? 'Yes' : 'No' }} + + +
No highlights yet. Click "Add Highlight" to create one.
+
+ } } @if (activeTab() === 'station') { - @if (stationConfig$ | async; as config) { -
-
-

Station Configuration

- -
+ @if (stationConfig$ | async; as config) { +
+
+

Station Configuration

+ +
-
-
- Callsign - {{ config.callsign }} -
-
- Name - {{ config.name_primary }} {{ config.name_secondary }} -
-
- Tagline - {{ config.tagline }} -
-
- Frequency - {{ config.frequency }} -
-
- Founded - {{ config.founded_year }} -
-
- Nonprofit - {{ config.nonprofit_type }} — EIN {{ config.ein }} -
-
- Email - {{ config.email }} -
-
- Phone - {{ config.phone }} -
-
- Website - {{ config.website }} -
-
- Donation URL - {{ config.donation_url || '(not set)' }} -
-
- Play Store URL - {{ config.play_store_url || '(not set)' }} -
-
- App Store Embed - {{ config.app_store_embed_html ? 'Configured' : '(not set)' }} -
-
+
+
+ Callsign + {{ config.callsign }}
- } +
+ Name + {{ config.name_primary }} {{ config.name_secondary }} +
+
+ Tagline + {{ config.tagline }} +
+
+ Frequency + {{ config.frequency }} +
+
+ Founded + {{ config.founded_year }} +
+
+ Nonprofit + {{ config.nonprofit_type }} — EIN {{ config.ein }} +
+
+ Email + {{ config.email }} +
+
+ Phone + {{ config.phone }} +
+
+ Website + {{ config.website }} +
+
+ Donation URL + {{ config.donation_url || '(not set)' }} +
+
+ Play Store URL + {{ config.play_store_url || '(not set)' }} +
+
+ App Store Embed + {{ config.app_store_embed_html ? 'Configured' : '(not set)' }} +
+
+
+ } } @if (activeTab() === 'theme') { -
-
-

Color Theme

-
- -
-
- Harmony: - {{ getHarmonyLabel() }} -
- -
- - @if (themeSaveSuccess) { -
{{ themeSaveSuccess }}
- } - @if (themeSaveError) { -
{{ themeSaveError }}
- } - - -
- @for (role of colorRoles; track role.field) { -
-
- -
-
- {{ role.label }} - {{ themeColors[role.field] }} -
-
- @if (hasHarmonyIssue(role.field)) { - - } @else if (role.group !== 'neutral') { - - } -
-
- } -
- -
- - - -
+
+
+

Color Theme

+ +
+
+ Harmony: + {{ getHarmonyLabel() }} +
+ +
+ + @if (themeSaveSuccess) { +
{{ themeSaveSuccess }}
+ } + @if (themeSaveError) { +
{{ themeSaveError }}
+ } + + +
+ @for (role of colorRoles; track role.field) { +
+
+ +
+
+ {{ role.label }} + {{ themeColors[role.field] }} +
+
+ @if (hasHarmonyIssue(role.field)) { + + } @else if (role.group !== 'neutral') { + + } +
+
+ } +
+ +
+ + + +
+
} @if (activeTab() === 'underwriters') { - @if (underwriters$ | async; as underwriters) { -
-
-

Underwriters ({{ underwriters.length }})

- -
+ @if (underwriters$ | async; as underwriters) { +
+
+

Underwriters ({{ underwriters.length }})

+ +
- - - - - - - - - - - - - @for (uw of underwriters; track uw.id) { - - - - - - - - - } @empty { - +
NameDescriptionWebsiteOrderActiveActions
{{ uw.name }}{{ uw.description }} - @if (uw.website_url) { - {{ uw.website_url }} - } @else { - — - } - {{ uw.display_order }}{{ uw.active ? 'Yes' : 'No' }} - - -
No underwriters yet. Click "Add Underwriter" to create one.
+ + + + + + + + + + + + @for (uw of underwriters; track uw.id) { + + + + -
NameDescriptionWebsiteOrderActiveActions
{{ uw.name }}{{ uw.description }} + @if (uw.website_url) { + {{ uw.website_url }} + } @else { + — } -
-
- } + + {{ uw.display_order }} + {{ uw.active ? 'Yes' : 'No' }} + + + + + + } @empty { + + No underwriters yet. Click "Add Underwriter" to create one. + + } + + +
+ } } @if (activeTab() === 'mobile-builds') { -
-
-

Mobile Build Orchestration

- -
- -
-
-

Derived Defaults

- @if (mobileBuildDefaults; as defaults) { -
-
Tenant: {{ defaults.tenant_key }}
-
App Name: {{ defaults.app_name }}
-
Support Email: {{ defaults.support_email }}
-
Website: {{ defaults.website }}
-
Stream URL: {{ defaults.stream_url || '(not set)' }}
-
- } @else { -

Defaults unavailable. Check station config.

- } -
- -
-

Create Build Request

- -
- - -
- -
- - -
- -
- - - -
- -

Required Files

-
- - -
- -
- - -
- - @if (mobileBuildStatusMessage) { -

{{ mobileBuildStatusMessage }}

- } - @if (mobileBuildErrorMessage) { -

{{ mobileBuildErrorMessage }}

- } - - -
-
+
+
+

Mobile Build Orchestration

+ +
+
-

Build Requests

- @if (mobileBuilds$ | async; as builds) { - - - - - - - - - - - - - @for (build of builds; track build.id) { - - - - - - - - - } @empty { - - } - -
IDPlatformsVersionStatusPreflightActions
#{{ build.id }} - {{ build.platform_android ? 'Android' : '' }} - {{ build.platform_android && build.platform_ios ? ' + ' : '' }} - {{ build.platform_ios ? 'iOS' : '' }} - {{ build.version_name }} ({{ build.build_number }}){{ build.status }}{{ build.preflight_passed ? 'Passed' : 'Pending/Failed' }} - -
No build requests yet.
+

Derived Defaults

+ @if (mobileBuildDefaults; as defaults) { +
+
Tenant: {{ defaults.tenant_key }}
+
App Name: {{ defaults.app_name }}
+
Support Email: {{ defaults.support_email }}
+
Website: {{ defaults.website }}
+
Stream URL: {{ defaults.stream_url || '(not set)' }}
+
+ } @else { +

Defaults unavailable. Check station config.

}
- @if (selectedMobileBuild; as build) { -
-
-

Selected Request #{{ build.id }}

-
- - - -
-
+
+

Create Build Request

- @if (mobileBuildPreflightIssues.length > 0) { -
- Preflight issues: -
    - @for (issue of mobileBuildPreflightIssues; track issue) { -
  • {{ issue }}
  • - } -
-
- } +
+ + +
- @if (build.error_message) { -

Error: {{ build.error_message }}

- } +
+ + +
-

Artifacts

-
- @for (artifact of build.artifacts; track artifact.id) { -
-
- {{ artifact.file_name }} -
{{ artifact.platform }} • {{ artifact.artifact_type }} • {{ artifact.sha256.slice(0, 12) }}…
-
- Download -
- } @empty { -

No artifacts available yet.

- } -
+
+ + + +
-

Build Log

-
{{ build.build_log || 'No logs yet.' }}
-
- } +

Required Files

+
+ + +
+ +
+ + +
+ + @if (mobileBuildStatusMessage) { +

{{ mobileBuildStatusMessage }}

+ } + @if (mobileBuildErrorMessage) { +

{{ mobileBuildErrorMessage }}

+ } + + +
+ +
+

Build Requests

+ @if (mobileBuilds$ | async; as builds) { + + + + + + + + + + + + + @for (build of builds; track build.id) { + + + + + + + + + } @empty { + + + + } + +
IDPlatformsVersionStatusPreflightActions
#{{ build.id }} + {{ build.platform_android ? 'Android' : '' }} + {{ build.platform_android && build.platform_ios ? ' + ' : '' }} + {{ build.platform_ios ? 'iOS' : '' }} + {{ build.version_name }} ({{ build.build_number }}){{ build.status }}{{ build.preflight_passed ? 'Passed' : 'Pending/Failed' }} + +
No build requests yet.
+ } +
+ + @if (selectedMobileBuild; as build) { +
+
+

Selected Request #{{ build.id }}

+
+ + + +
+
+ + @if (mobileBuildPreflightIssues.length > 0) { +
+ Preflight issues: +
    + @for (issue of mobileBuildPreflightIssues; track issue) { +
  • {{ issue }}
  • + } +
+
+ } + + @if (build.error_message) { +

Error: {{ build.error_message }}

+ } + +

Artifacts

+
+ @for (artifact of build.artifacts; track artifact.id) { +
+
+ {{ artifact.file_name }} +
{{ artifact.platform }} • {{ artifact.artifact_type }} • {{ + artifact.sha256.slice(0, 12) }}…
+
+ Download +
+ } @empty { +

No artifacts available yet.

+ } +
+ +

Build Log

+
{{ build.build_log || 'No logs yet.' }}
+
+ } +
} @if (activeTab() === 'stats') { -
- -
+
+ +
}
@if (showShowForm) { - + } @if (showEventForm) { - + } @if (showStationForm) { - + } @if (showHistoryForm) { - + } @if (showTeamForm) { - + } @if (showCommunityForm) { - + } @if (showUnderwriterForm) { - + } \ No newline at end of file diff --git a/src/app/admin/admin.component.scss b/src/app/admin/admin.component.scss index d771886..02f85e4 100644 --- a/src/app/admin/admin.component.scss +++ b/src/app/admin/admin.component.scss @@ -547,4 +547,4 @@ .action-group { flex-wrap: wrap; } -} +} \ No newline at end of file