import { useState } from 'react' import { useParams, useNavigate } from 'react-router-dom' import { useRun } from '../hooks/useRuns' import { useBossResults, useGameBosses } from '../hooks/useBosses' import { useJournalEntry, useUpdateJournalEntry, useDeleteJournalEntry } from '../hooks/useJournal' import { JournalEntryView } from '../components/journal/JournalEntryView' import { JournalEditor } from '../components/journal/JournalEditor' export function JournalEntryPage() { const { runId, entryId } = useParams<{ runId: string; entryId: string }>() const navigate = useNavigate() const runIdNum = Number(runId) const [isEditing, setIsEditing] = useState(false) const { data: run, isLoading: runLoading } = useRun(runIdNum) const { data: entry, isLoading: entryLoading, error } = useJournalEntry(runIdNum, entryId ?? null) const { data: bossResults } = useBossResults(runIdNum) const { data: bosses } = useGameBosses(run?.gameId ?? null) const updateEntry = useUpdateJournalEntry(runIdNum, entryId ?? '') const deleteEntry = useDeleteJournalEntry(runIdNum) const isLoading = runLoading || entryLoading if (isLoading) { return (
) } if (error || !entry || !run) { return (
Failed to load journal entry.
) } const linkedBossResult = entry.bossResultId ? bossResults?.find((br) => br.id === entry.bossResultId) : null const linkedBoss = linkedBossResult ? bosses?.find((b) => b.id === linkedBossResult.bossBattleId) : null const handleSave = (data: { title: string; body: string; bossResultId: number | null }) => { updateEntry.mutate(data, { onSuccess: () => setIsEditing(false), }) } const handleDelete = () => { deleteEntry.mutate(entry.id, { onSuccess: () => navigate(`/runs/${runId}?tab=journal`), }) } if (isEditing) { return (

Edit Journal Entry

setIsEditing(false)} isSaving={updateEntry.isPending} isDeleting={deleteEntry.isPending} />
) } return (
setIsEditing(true)} onBack={() => navigate(`/runs/${runId}?tab=journal`)} />
) }