From 537898b4d09a46402a1984429e354e32df3696b6 Mon Sep 17 00:00:00 2001 From: Ryderjj89 Date: Sun, 28 Sep 2025 17:58:47 -0400 Subject: [PATCH] Fixed chapter counting and numbering issues - Updated API functions to accept version parameter (getBook, getChapter) - Added proper chapter sorting with parseInt for numerical order - Removed fallback to 50 fake chapters - now shows actual chapter counts - Fixed Psalms chapter numbering: 1,2,3,4,5,6,7,8,9,10,11,12... instead of 1,2,3,4,5,6,7,8,9,10,101,102... - Books like 2 John now show correct number of chapters (1) instead of fake 50 --- frontend/logos/csb-logo.png | Bin 0 -> 13420 bytes frontend/logos/niv-logo.png | Bin 0 -> 9211 bytes frontend/logos/nlt-logo.png | Bin 0 -> 8708 bytes frontend/src/components/ChapterSelector.tsx | 18 +++++++++--------- frontend/src/services/api.ts | 8 ++++---- 5 files changed, 13 insertions(+), 13 deletions(-) create mode 100644 frontend/logos/csb-logo.png create mode 100644 frontend/logos/niv-logo.png create mode 100644 frontend/logos/nlt-logo.png diff --git a/frontend/logos/csb-logo.png b/frontend/logos/csb-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ed913cf4e10451b1a9c07b34dda25332e900839f GIT binary patch literal 13420 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 J*GZa&{4cE*-RS@T literal 0 HcmV?d00001 diff --git a/frontend/logos/niv-logo.png b/frontend/logos/niv-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8cb72f2875e149142bc0364febf702a593c8ed1f GIT binary patch literal 9211 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 = ({ book, onChapterSelect const loadChapters = async () => { try { setLoading(true); - const response = await getBook(book); - + const response = await getBook(book, version); + // The API now returns { chapters: ["1", "2", "3", ...] } if (response.chapters) { - setChapters(response.chapters); + // Sort chapters numerically to ensure proper order + const sortedChapters = response.chapters.sort((a, b) => parseInt(a, 10) - parseInt(b, 10)); + setChapters(sortedChapters); } else { - // Fallback: generate chapter numbers 1-50 (most books have fewer than 50 chapters) - const fallbackChapters = Array.from({ length: 50 }, (_, i) => (i + 1).toString()); - setChapters(fallbackChapters); + console.error('API returned no chapters data'); + setChapters([]); } } catch (error) { console.error('Failed to load chapters:', error); - // Fallback: generate chapter numbers 1-50 (most books have fewer than 50 chapters) - const fallbackChapters = Array.from({ length: 50 }, (_, i) => (i + 1).toString()); - setChapters(fallbackChapters); + // Don't show fallback chapters - just show an empty list + setChapters([]); } finally { setLoading(false); } diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index b0052de9..14a29bac 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -18,13 +18,13 @@ export const getBooks = async (): Promise => { return response.data; }; -export const getBook = async (book: string): Promise<{ chapters: string[] }> => { - const response = await api.get(`/books/${book}`); +export const getBook = async (book: string, version: string = 'esv'): Promise<{ chapters: string[] }> => { + const response = await api.get(`/books/${book}?version=${version}`); return response.data; }; -export const getChapter = async (book: string, chapter: string): Promise => { - const response = await api.get(`/books/${book}/${chapter}`); +export const getChapter = async (book: string, chapter: string, version: string = 'esv'): Promise => { + const response = await api.get(`/books/${book}/${chapter}?version=${version}`); return response.data; };