Fixed search
This commit is contained in:
+6
-4
@@ -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
@@ -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
@@ -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 })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user