Fixed search

This commit is contained in:
h202-wq
2026-08-19 08:33:56 -04:00
parent 35630dd41f
commit 5f526a9007
3 changed files with 26 additions and 10 deletions
+6 -4
View File
@@ -1,8 +1,7 @@
import { useCallback, useEffect, useState } from 'react'
import { Link } from 'react-router-dom'
import CandleCanvas from './Candle'
import { type Verse } from './bible'
import { daySeed, loadKJV, msUntilRollover, pickForDay } from './verse'
import { daySeed, loadKJV, msUntilRollover, pickForDay, type DailyVerse } from './verse'
type Phase = 'sealed' | 'revealing' | 'revealed'
@@ -16,7 +15,7 @@ function formatCountdown(ms: number): string {
export default function Home() {
const [phase, setPhase] = useState<Phase>('sealed')
const [verse, setVerse] = useState<Verse | null>(null)
const [verse, setVerse] = useState<DailyVerse | null>(null)
const [countdown, setCountdown] = useState('')
const [error, setError] = useState(false)
@@ -92,7 +91,10 @@ export default function Home() {
<div className="verse">
<p className="verse-text">{verse.text}</p>
<p className="verse-ref">
<Link to={`/read/${verse.reference.split(' ')[0]}/1`}>{verse.reference}</Link>
{' '}
<Link to={`/read/${encodeURIComponent(verse.book)}/${verse.chapter}#v${verse.verse}`}>
{verse.reference}
</Link>
</p>
</div>
</section>
+10 -2
View File
@@ -39,6 +39,7 @@ interface IndexEntry {
verse: number
text: string
lower: string
refLower: string
}
let loaded = false
@@ -61,7 +62,14 @@ export function loadBible(): Promise<void> {
for (const ch of b.chapters) {
const cn = Number(ch.chapter)
for (const v of ch.verses) {
index.push({ book: b.book, chapter: cn, verse: v.verse, text: v.text, lower: v.text.toLowerCase() })
index.push({
book: b.book,
chapter: cn,
verse: v.verse,
text: v.text,
lower: v.text.toLowerCase(),
refLower: `${displayName(b.book)} ${cn}:${v.verse}`.toLowerCase(),
})
}
}
}
@@ -99,7 +107,7 @@ export function searchBible(query: string, limit = 60): SearchOutcome {
const results: SearchResult[] = []
let total = 0
for (const e of index) {
if (e.lower.includes(q)) {
if (e.lower.includes(q) || e.refLower.includes(q)) {
total++
if (results.length < limit) {
results.push({ text: e.text, reference: `${displayName(e.book)} ${e.chapter}:${e.verse}`, book: e.book, chapter: e.chapter, verse: e.verse })
+10 -4
View File
@@ -2,7 +2,13 @@ import { getBooks, loadBible, type Verse } from './bible'
const ROLLOVER_LOCAL_HOUR = 2
let flatNT: Verse[] | null = null
export interface DailyVerse extends Verse {
book: string
chapter: number
verse: number
}
let flatNT: DailyVerse[] | null = null
export function daySeed(now: Date = new Date()): number {
const shifted = new Date(now.getTime() - ROLLOVER_LOCAL_HOUR * 3600_000)
@@ -26,13 +32,13 @@ function mulberry32(seed: number): () => number {
}
}
export function pickForDay(verses: Verse[], seed: number): Verse {
export function pickForDay(verses: DailyVerse[], seed: number): DailyVerse {
const rand = mulberry32(seed)
const index = Math.floor(rand() * verses.length)
return verses[index]
}
export async function loadKJV(): Promise<Verse[]> {
export async function loadKJV(): Promise<DailyVerse[]> {
if (flatNT) return flatNT
await loadBible()
flatNT = []
@@ -44,7 +50,7 @@ export async function loadKJV(): Promise<Verse[]> {
for (const chapter of book.chapters) {
const chapterNumber = Number(chapter.chapter)
for (const v of chapter.verses) {
flatNT.push({ text: v.text, reference: `${name} ${chapterNumber}:${v.verse}` })
flatNT.push({ text: v.text, reference: `${name} ${chapterNumber}:${v.verse}`, book: book.book, chapter: chapterNumber, verse: v.verse })
}
}
}