From 0bf2d92b1f6874d07b957556775c44d7291507f8 Mon Sep 17 00:00:00 2001 From: nmemmert Date: Thu, 3 Sep 2026 09:31:43 -0400 Subject: [PATCH] Apply master-detail pattern to Ep. Highlights and Download Library; v1.1.52 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Episode Highlights and the Downloads Library section now use the same compact list → click to edit pattern as Studies. Both sections show a scannable row list (title, key meta, edit/delete buttons) and open a focused editor for a single item. Testimonials and Finished Books remain as collapsible cards since they have few fields and grow slowly. Co-Authored-By: Claude Sonnet 4.6 --- package.json | 2 +- src/AdminPage.tsx | 293 ++++++++++++++++++++++++++++------------------ 2 files changed, 180 insertions(+), 115 deletions(-) diff --git a/package.json b/package.json index 5dffd9c..c7d4e9e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "siteforge", "private": true, - "version": "1.1.51", + "version": "1.1.52", "type": "module", "scripts": { "dev": "vite", diff --git a/src/AdminPage.tsx b/src/AdminPage.tsx index 2a61cee..56630bd 100644 --- a/src/AdminPage.tsx +++ b/src/AdminPage.tsx @@ -1111,6 +1111,8 @@ export default function AdminPage({ content, onSave, onLogout }: Props) { const [rssEpisodes, setRssEpisodes] = useState>([]) const [selectedStudyId, setSelectedStudyId] = useState(null) const [selectedLessonId, setSelectedLessonId] = useState(null) + const [selectedHighlightId, setSelectedHighlightId] = useState(null) + const [selectedResourceId, setSelectedResourceId] = useState(null) const [dashboardNow, setDashboardNow] = useState(() => new Date()) const [manualQuestion, setManualQuestion] = useState({ @@ -3335,68 +3337,99 @@ async function handleAssetUpload(event: ChangeEvent) { )} {/* PODCAST — EPISODE HIGHLIGHTS */} - {adminView === 'podcast:highlights' && ( -
-
-

Episode Highlights

-

Featured episodes shown on the Episodes page. Fill in discussion questions, show notes, or an embed URL and the highlight automatically gets its own detail page at /episodes/[id].

-
- {(form.podcastFeaturedLinks ?? []).length === 0 && ( -

No episode highlights yet. Add one below.

- )} - {(form.podcastFeaturedLinks ?? []).map(item => ( - -
-
-
- - updatePodcastLink(item.id, 'episodeNumber', e.target.value)} /> -
-
- - updatePodcastLink(item.id, 'title', e.target.value)} /> -
-
- -